49 lines
2.0 KiB
Python
49 lines
2.0 KiB
Python
"""Тесты чистой функции `build_transcript` (сборка строк-фраз для суммаризации)."""
|
|
|
|
from workers.summarizer.transcript import TranscriptLine, build_transcript
|
|
|
|
|
|
def test_empty_lines_produce_empty_transcript() -> None:
|
|
"""Пустой список фраз → пустая строка."""
|
|
assert build_transcript([]) == ""
|
|
|
|
|
|
def test_single_line_mm_ss_format_under_one_hour() -> None:
|
|
"""Смещение меньше часа форматируется как `MM:SS`."""
|
|
lines = [TranscriptLine(speaker="Аня", offset_s=65.0, text="привет всем")]
|
|
|
|
assert build_transcript(lines) == "[Аня 01:05] привет всем"
|
|
|
|
|
|
def test_offset_at_or_above_one_hour_uses_hh_mm_ss_format() -> None:
|
|
"""Смещение от часа и больше форматируется как `ЧЧ:MM:SS`."""
|
|
lines = [TranscriptLine(speaker="Боря", offset_s=3725.0, text="подведём итоги")]
|
|
|
|
assert build_transcript(lines) == "[Боря 1:02:05] подведём итоги"
|
|
|
|
|
|
def test_lines_are_sorted_by_offset_regardless_of_input_order() -> None:
|
|
"""Строки транскрипта сортируются по `offset_s`, даже если поданы вразнобой."""
|
|
lines = [
|
|
TranscriptLine(speaker="Боря", offset_s=10.0, text="второй"),
|
|
TranscriptLine(speaker="Аня", offset_s=0.0, text="первый"),
|
|
TranscriptLine(speaker="Боря", offset_s=20.0, text="третий"),
|
|
]
|
|
|
|
result = build_transcript(lines)
|
|
|
|
assert result == "\n".join(
|
|
[
|
|
"[Аня 00:00] первый",
|
|
"[Боря 00:10] второй",
|
|
"[Боря 00:20] третий",
|
|
]
|
|
)
|
|
|
|
|
|
def test_zero_offset_formats_as_zero_minutes_zero_seconds() -> None:
|
|
"""Нулевое смещение → `00:00`."""
|
|
lines = [TranscriptLine(speaker="Аня", offset_s=0.0, text="начало")]
|
|
|
|
assert build_transcript(lines) == "[Аня 00:00] начало"
|