Coverage for tests/test_wrapper_podcasttranscript.py: 100%
62 statements
« prev ^ index » next coverage.py v7.15.4, created at 2026-08-09 04:47 +0000
« prev ^ index » next coverage.py v7.15.4, created at 2026-08-09 04:47 +0000
1#!/usr/bin/env python3
3import sys
4import pytest
5from unittest.mock import patch
6from unittest.mock import MagicMock
7from tests.torch_mock import TorchMock
8from tests.openaiclient_mock import OpenAIClientMock
10mock_torch = TorchMock()
11mock_openai = OpenAIClientMock()
13sys.path.append("wrapper")
14sys.path.append("wrapper/podcasttranscript")
16with patch.dict(sys.modules, {
17 'fitz': MagicMock(),
18 'azure': MagicMock(),
19 'azure.identity': MagicMock(),
20 'nvidia_smi': MagicMock(),
21 'tenacity': MagicMock(),
22 'torch': mock_torch,
23 'openai': mock_openai,
24}):
25 from podcasttranscript.wrapper_podcasttranscript import PodcastTranscriptGenerator
26 from podcasttranscript.wrapper_podcasttranscript import Dialogue
27 from podcasttranscript.wrapper_podcasttranscript import Script
28 from podcasttranscript.wrapper_podcasttranscript import Scene
29 from podcasttranscript.wrapper_podcasttranscript import Podcast
32@pytest.mark.asyncio
33async def test_podcast_transcript() -> None:
34 model = PodcastTranscriptGenerator()
35 assert model is not None
36 assert model.model_name == "podcasttranscript"
38 model.init()
39 health = model.get_health()
40 assert health is not None
41 assert health is not None
42 timestamps = model.get_timestamps()
43 assert timestamps is not None
45 with pytest.raises(ValueError):
46 await model.get_rest_args({})
47 await model.get_rest_args({
48 "pdf_url": "http://example.com/doc.pdf"
49 })
51 await model.warmup()
53 with pytest.raises(ValueError):
54 await model.generate()
55 with pytest.raises(Exception, match="Failed to download PDF"):
56 await model.generate(pdf_url="http://example.com/doc.pdf")
57 with pytest.raises(Exception, match="Cannot query LLM for script"):
58 await model.generate(pdf_url="https://arxiv.org/pdf/2501.16634")
61def test_dialogue_str() -> None:
62 """Dialogue.__str__() should format as 'character: transcript'."""
63 d = Dialogue(character="Alice", transcript="Hello world.")
64 assert str(d) == "Alice: Hello world."
66 d_end = Dialogue(character="Bob", transcript="Goodbye.", end_script=True)
67 assert str(d_end) == "Bob: Goodbye."
70def test_script_str() -> None:
71 """Script.__str__() should list all dialogues prefixed with 'Script:'."""
72 script = Script(dialogues=[
73 Dialogue(character="Alice", transcript="Hi there."),
74 Dialogue(character="Bob", transcript="Hey!"),
75 ])
76 result = str(script)
77 assert result.startswith("Script:")
78 assert "Alice: Hi there." in result
79 assert "Bob: Hey!" in result
82def test_scene_str() -> None:
83 """Scene.__str__() should list characters and all dialogue lines."""
84 scene = Scene(
85 characters=["Alice", "Bob"],
86 dialogues=[
87 Dialogue(character="Alice", transcript="Welcome."),
88 Dialogue(character="Bob", transcript="Thanks."),
89 ],
90 )
91 result = str(scene)
92 assert "Alice" in result
93 assert "Bob" in result
94 assert "Welcome." in result
95 assert "Thanks." in result
98def test_podcast_str() -> None:
99 """Podcast.__str__() should include scene indices and dialogue text."""
100 podcast = Podcast(scenes=[
101 Scene(
102 characters=["Alice"],
103 dialogues=[Dialogue(character="Alice", transcript="Scene zero.")],
104 ),
105 Scene(
106 characters=["Bob"],
107 dialogues=[Dialogue(character="Bob", transcript="Scene one.")],
108 ),
109 ])
110 result = str(podcast)
111 assert "Scene: 0" in result
112 assert "Scene: 1" in result
113 assert "Scene zero." in result
114 assert "Scene one." in result