48 lines
1.5 KiB
Python
48 lines
1.5 KiB
Python
"""Tests for verdict parsing and per-frame evidence mapping."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from video_analysis.buster_client import (
|
|
build_frame_evidence,
|
|
parse_verdict_and_explanation,
|
|
)
|
|
|
|
|
|
def test_parse_real():
|
|
out = parse_verdict_and_explanation("REAL — no signs of manipulation.")
|
|
assert out["verdict"] == "REAL"
|
|
assert out["explanation"].startswith("REAL")
|
|
|
|
|
|
def test_parse_fake():
|
|
assert parse_verdict_and_explanation("FAKE, visible artifacts")["verdict"] == "FAKE"
|
|
|
|
|
|
def test_parse_unclear_is_uncertain():
|
|
# Anything that is not clearly REAL/FAKE maps to UNCERTAIN (offer enum).
|
|
out = parse_verdict_and_explanation("Hard to tell, mixed signals.")
|
|
assert out["verdict"] == "UNCERTAIN"
|
|
|
|
|
|
def test_parse_empty_is_uncertain():
|
|
assert parse_verdict_and_explanation("")["verdict"] == "UNCERTAIN"
|
|
|
|
|
|
def test_build_frame_evidence_aligns_indices_and_timestamps():
|
|
ev = build_frame_evidence([0, 30, 60], [0.0, 1.0, 2.0])
|
|
assert ev == [
|
|
{"frame_index": 0, "timestamp_s": 0.0},
|
|
{"frame_index": 30, "timestamp_s": 1.0},
|
|
{"frame_index": 60, "timestamp_s": 2.0},
|
|
]
|
|
|
|
|
|
def test_build_frame_evidence_handles_missing_timestamps():
|
|
ev = build_frame_evidence([5, 10], [None])
|
|
assert ev[0] == {"frame_index": 5, "timestamp_s": None}
|
|
# Second frame has no timestamp entry → defaults to None.
|
|
assert ev[1] == {"frame_index": 10, "timestamp_s": None}
|
|
|
|
|
|
def test_build_frame_evidence_empty():
|
|
assert build_frame_evidence([], []) == []
|