from __future__ import annotations import unittest from owner_voice_pet.models import AudioFrame, AudioSegment, PlaybackResult, TransportHealth from owner_voice_pet.real_live_check import FixtureLiveAudioTransport def frame(idx: int) -> AudioFrame: return AudioFrame(b"\x00\x00", 16000, 1, idx * 20, idx, {"duration_ms": 20}) class FakeOutputTransport: def __init__(self) -> None: self.played: list[AudioSegment] = [] def play_pcm(self, segment: AudioSegment, interrupt: bool = False) -> PlaybackResult: self.played.append(segment) return PlaybackResult(True, segment.duration_ms) def health(self) -> TransportHealth: return TransportHealth(True, True, "fake") class RealLiveCheckTests(unittest.TestCase): def test_fixture_transport_flush_preserves_generated_future_frames(self) -> None: transport = FixtureLiveAudioTransport([frame(1), frame(2)], play_audio=False) transport.start_input() self.assertEqual(transport.flush_input(), 0) self.assertEqual(transport.flush_count, 1) self.assertEqual([item.frame_id for item in transport.read_frames(10)], [1]) def test_fixture_transport_can_delegate_real_playback(self) -> None: output = FakeOutputTransport() transport = FixtureLiveAudioTransport([], play_audio=True, output_transport=output) segment = AudioSegment(b"\x00\x00", 16000, 1, 0, 20) result = transport.play_pcm(segment) self.assertTrue(result.played) self.assertEqual(output.played, [segment]) self.assertEqual(transport.played_segments, [segment]) if __name__ == "__main__": unittest.main()