"""Страница разбора: по ней смотрят, чья ошибка - распознавания или разметки."""
import json
import re
from app.view import render_job
def job(**over):
base = {
"job_id": "abc12345", "filename": "call.mp3", "duration_sec": 120.0,
"turns": [
{"speaker": 0, "start": 0.0, "end": 4.0, "text": "Первая реплика.",
"acoustics": {"loudness_db": -18.0}},
{"speaker": 0, "start": 30.0, "end": 34.0, "text": "Вторая <реплика>.",
"acoustics": {}, "recovered": True},
],
"sentences": [
{"n": 1, "text": "Первая реплика.", "start": 0.0, "loudness_db": -18.0, "turn": 0},
{"n": 2, "text": "Вторая <реплика>.", "start": 30.0, "loudness_db": None, "turn": 1},
],
"stats": {"turns_count": 2, "speech_sec": 8.0, "diarized": False},
"timing": {"diarization_sec": 1.0, "asr_sec": 2.0},
}
base.update(over)
return base
class TestPage:
def test_is_self_contained(self):
"""Страница открывается локально: внешних файлов и запросов быть не должно."""
page = render_job(job())
assert " в расшифровке закрыла бы тег и сломала страницу."""
evil = 'а тут
'
page = render_job(job(
turns=[{"speaker": 0, "start": 0.0, "end": 1.0, "text": evil, "acoustics": {}}],
sentences=[{"n": 1, "text": evil, "start": 0.0, "loudness_db": None, "turn": 0}]))
assert "
") == 1
def test_survives_empty_result(self):
page = render_job({"job_id": "x", "turns": [], "sentences": [], "duration_sec": 0})
assert "реплик нет" in page
def test_old_result_explains_missing_sentences(self):
"""Результаты до 0.14.0 не содержат предложений - пустой блок выглядел бы поломкой."""
page = render_job({"job_id": "x", "turns": [], "sentences": [], "duration_sec": 10})
assert "старше 0.14.0" in page
assert "