import XCTest @testable import MatchLiveTv @MainActor final class ThermalAdaptationTests: XCTestCase { func testSeriousReducesBitrateAndFps() { let baseline = BroadcastConfig( rtmpUrl: "rtmp://localhost/live/key", videoBitrate: 2_500_000, fps: 30 ) let adapted = ThermalStateManager.adaptedConfig(from: baseline, for: .serious) XCTAssertEqual(adapted.videoBitrate, 1_875_000) XCTAssertEqual(adapted.fps, 24) } func testCriticalReducesFurther() { let baseline = BroadcastConfig( rtmpUrl: "rtmp://localhost/live/key", videoBitrate: 2_500_000, fps: 30 ) let adapted = ThermalStateManager.adaptedConfig(from: baseline, for: .critical) XCTAssertEqual(adapted.videoBitrate, 1_250_000) XCTAssertEqual(adapted.fps, 20) } func testNominalKeepsBaseline() { let baseline = BroadcastConfig( rtmpUrl: "rtmp://localhost/live/key", videoBitrate: 2_500_000, fps: 30 ) let adapted = ThermalStateManager.adaptedConfig(from: baseline, for: .nominal) XCTAssertEqual(adapted.videoBitrate, baseline.videoBitrate) XCTAssertEqual(adapted.fps, baseline.fps) } func testThermalStateLabels() { AppLanguage.current = .it XCTAssertEqual(ThermalState.nominal.displayLabel, L10n.t("thermal.state.nominal")) XCTAssertEqual(ThermalState.fair.displayLabel, L10n.t("thermal.state.fair")) XCTAssertEqual(ThermalState.serious.displayLabel, L10n.t("thermal.state.serious")) XCTAssertEqual(ThermalState.critical.displayLabel, L10n.t("thermal.state.critical")) AppLanguage.current = .en XCTAssertEqual(ThermalState.nominal.displayLabel, "Temperature OK") AppLanguage.current = .system } }