"""Тесты чистой функции `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] начало"