[真实流程命令]:完成完整链路自测入口,包含真实Provider CLI、播放验收和文档测试

This commit is contained in:
mkbk
2026-06-17 23:57:24 +08:00
parent b2822dc1af
commit b9b501cf74
9 changed files with 462 additions and 3 deletions
+12
View File
@@ -111,6 +111,18 @@ class CliAcceptanceTests(unittest.TestCase):
self.assertEqual(data["final_transcripts"], ["第1轮模拟问题", "第2轮模拟问题"])
self.assertTrue(data["checks"]["partial_noise_filtered"])
def test_real_live_check_command_invokes_real_fixture_runner(self) -> None:
expected = {"success": True, "completed_turns": 2}
with patch("owner_voice_pet.cli.run_real_live_check", return_value=expected) as runner:
code, data = self.call("real-live-check", "--turns", "2", "--no-playback", "--question", "第一问")
self.assertEqual(code, 0)
self.assertEqual(data, expected)
kwargs = runner.call_args.kwargs
self.assertEqual(kwargs["turns"], 2)
self.assertFalse(kwargs["play_audio"])
self.assertEqual(kwargs["questions"], ["第一问"])
if __name__ == "__main__":
unittest.main()
+47
View File
@@ -0,0 +1,47 @@
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()