MediaRouter / tests /test_output_validation.py
basyx's picture
Add word-by-word motivational captions template (#3)
8939f6f
Raw History Blame Contribute Delete
2.39 kB
from __future__ import annotations
from pathlib import Path
import pytest
from app.container import build_container
from app.core.exceptions import ProcessingError
from app.models.media import OperationResult
@pytest.mark.asyncio
async def test_output_validation_probes_audio_artifact(settings, tmp_path: Path, monkeypatch) -> None:
container = build_container(settings)
output = tmp_path / "final.mp3"
output.write_bytes(b"audio-placeholder")
async def fake_probe(path: Path):
assert path == output
return {
"duration": 12.5,
"container": "mp3",
"video_streams": [],
"audio_streams": [{"codec": "mp3"}],
"resolution": None,
}
monkeypatch.setattr(container.processor.ffprobe, "probe", fake_probe)
report = await container.processor.validate_output_result(
OperationResult(path=output, filename=output.name, mime_type="audio/mpeg")
)
assert report["valid"] is True
assert report["probed"] is True
assert report["size_bytes"] == output.stat().st_size
assert report["audio_stream_count"] == 1
assert report["duration_seconds"] == 12.5
@pytest.mark.asyncio
async def test_output_validation_rejects_audio_without_audio_stream(settings, tmp_path: Path, monkeypatch) -> None:
container = build_container(settings)
output = tmp_path / "broken.mp3"
output.write_bytes(b"not-real-audio")
async def fake_probe(path: Path):
return {
"duration": 1.0,
"container": "mp3",
"video_streams": [],
"audio_streams": [],
"resolution": None,
}
monkeypatch.setattr(container.processor.ffprobe, "probe", fake_probe)
with pytest.raises(ProcessingError, match="no audio stream"):
await container.processor.validate_output_result(
OperationResult(path=output, filename=output.name, mime_type="audio/mpeg")
)
@pytest.mark.asyncio
async def test_output_validation_rejects_empty_artifact(settings, tmp_path: Path) -> None:
container = build_container(settings)
output = tmp_path / "empty.mp4"
output.write_bytes(b"")
with pytest.raises(ProcessingError, match="empty"):
await container.processor.validate_output_result(
OperationResult(path=output, filename=output.name, mime_type="video/mp4")
)