admin can split a sentence into 2 sentences
This commit is contained in:
@@ -188,3 +188,74 @@ def test_processor_marks_ready_only_after_oss_upload(tmp_path, monkeypatch):
|
||||
assert uploads[0]["stored_filename"] == f"{VIDEO_HASH}.mp4"
|
||||
assert video["status"] == "ready"
|
||||
assert video["remote_url"] == "https://media.example.com/lesson.mp4"
|
||||
|
||||
|
||||
def test_admin_can_split_sentence_and_reindexes_following_sentences(tmp_path):
|
||||
settings = replace(Settings.from_env(), data_dir=tmp_path / "data")
|
||||
settings.ensure_directories()
|
||||
repository = VideoRepository(settings.database_path)
|
||||
repository.upsert_upload(
|
||||
video_hash=VIDEO_HASH,
|
||||
title="Manual split lesson",
|
||||
filename="lesson.mp4",
|
||||
stored_filename=f"{VIDEO_HASH}.mp4",
|
||||
content_type="video/mp4",
|
||||
size_bytes=5,
|
||||
language="en",
|
||||
)
|
||||
repository.save_processing_result(
|
||||
SentenceBoundaryDocument(
|
||||
video_hash=VIDEO_HASH,
|
||||
duration_ms=9000,
|
||||
algorithm_version="test",
|
||||
sentences=[
|
||||
SentenceBoundary(
|
||||
index=0,
|
||||
start_ms=0,
|
||||
end_ms=4000,
|
||||
text="First part second part",
|
||||
language="en",
|
||||
reference_speech_duration_ms=3600,
|
||||
),
|
||||
SentenceBoundary(
|
||||
index=1,
|
||||
start_ms=4000,
|
||||
end_ms=9000,
|
||||
text="Next sentence.",
|
||||
language="en",
|
||||
reference_speech_duration_ms=4600,
|
||||
),
|
||||
],
|
||||
),
|
||||
None,
|
||||
)
|
||||
|
||||
class UnavailableTranscriber:
|
||||
available = False
|
||||
|
||||
client = TestClient(
|
||||
create_app(
|
||||
BoundaryStore(tmp_path / "boundaries.json"),
|
||||
settings=settings,
|
||||
repository=repository,
|
||||
transcriber=UnavailableTranscriber(),
|
||||
)
|
||||
)
|
||||
response = client.put(
|
||||
f"/api/v1/admin/videos/{VIDEO_HASH}/sentences/0/split",
|
||||
json={"text": "First part\nsecond part", "language": "en"},
|
||||
)
|
||||
|
||||
assert response.status_code == 200
|
||||
replacements = response.json()
|
||||
assert [item["text"] for item in replacements] == ["First part", "second part"]
|
||||
assert replacements[0]["start_ms"] == 0
|
||||
assert replacements[0]["end_ms"] == replacements[1]["start_ms"]
|
||||
assert replacements[1]["end_ms"] == 4000
|
||||
document = repository.get_document(VIDEO_HASH)
|
||||
assert [item.text for item in document.sentences] == [
|
||||
"First part",
|
||||
"second part",
|
||||
"Next sentence.",
|
||||
]
|
||||
assert [item.index for item in document.sentences] == [0, 1, 2]
|
||||
|
||||
Reference in New Issue
Block a user