import 'package:flutter_test/flutter_test.dart'; import 'package:livekit_client/livekit_client.dart'; import 'package:pyramid/features/voice_channel/livekit_call_manager.dart'; /// Vertragstests für die Streaming-Qualitäts-Presets (M4, /// `docs/STREAMING_60FPS.md`). Nagelt fest, was `startScreenShare` und das /// SENDEN-Menü voraussetzen: jede Auflösung hat eine Encoding-Zeile, die /// 60-FPS-Presets tragen wirklich 60 FPS und genug Bitrate dafür. /// (Das echte Publish-Verhalten – sender.parameters.encodings im Call – /// braucht zwei verbundene Clients und bleibt ein Gerätetest.) void main() { test('Jedes Auflösungs-Preset hat genau eine Encoding-Zeile (und umgekehrt)', () { expect( LiveKitCallManager.qualityPresets.keys.toSet(), LiveKitCallManager.screenShareEncodings.keys.toSet(), reason: 'qualityPresets und screenShareEncodings müssen dieselben ' 'Keys haben – sonst fällt ein Menü-Eintrag auf den Fallback zurück', ); }); test('60-FPS-Presets: wirklich 60 FPS, hohe Bitrate, richtige Auflösung', () { for (final key in ['hd60', 'fhd60']) { final enc = LiveKitCallManager.screenShareEncodings[key]!; expect(enc.maxFramerate, 60, reason: '$key muss 60 FPS tragen'); expect(enc.maxBitrate, greaterThanOrEqualTo(4_000_000), reason: '$key: zu wenig Bitrate für 60 FPS → Encoder ruckelt'); expect(LiveKitCallManager.isHighFpsPreset(key), isTrue); } expect(LiveKitCallManager.qualityPresets['hd60']!.dimensions, VideoParametersPresets.h720_169.dimensions); expect(LiveKitCallManager.qualityPresets['fhd60']!.dimensions, VideoParametersPresets.h1080_169.dimensions); }); test('60-FPS-Preset hat mehr Bitrate als sein Standard-Pendant', () { final enc = LiveKitCallManager.screenShareEncodings; expect(enc['hd60']!.maxBitrate, greaterThan(enc['hd']!.maxBitrate)); expect(enc['fhd60']!.maxBitrate, greaterThan(enc['fhd']!.maxBitrate)); }); test('Bestands-Presets unverändert (kein Verhaltenssprung für Uta)', () { final enc = LiveKitCallManager.screenShareEncodings; expect(enc['sd'], const VideoEncoding(maxBitrate: 500_000, maxFramerate: 10)); expect(enc['hd'], const VideoEncoding(maxBitrate: 1_500_000, maxFramerate: 15)); expect(enc['fhd'], const VideoEncoding(maxBitrate: 2_500_000, maxFramerate: 20)); expect(enc['4k'], const VideoEncoding(maxBitrate: 4_000_000, maxFramerate: 30)); for (final key in ['sd', 'hd', 'fhd', '4k']) { expect(LiveKitCallManager.isHighFpsPreset(key), isFalse, reason: '$key darf NICHT als 60-FPS-Preset behandelt werden ' '(sonst verliert es Simulcast)'); } }); }