from hef.catalog import Record, validate from hef.selection import Coordinate from tools.review import approve, proposed_records def make_record(**o): base = dict( id="a", title="t", source_url="u", source_archive="nasa", license="public_domain", mode="video", left=0, right=0, dark=0, light=0, duration_s=1, file_path="p", ) base.update(o) return Record(**base) def test_proposed_records_filters(): a = make_record(id="a", review_status="proposed") b = make_record(id="b", review_status="approved") assert [r.id for r in proposed_records([a, b])] == ["a"] def test_approve_sets_status_and_timestamp(): r = make_record(review_status="proposed") out = approve(r, reviewed_at="2026-06-04T13:00:00+00:00") assert out.review_status == "approved" assert out.reviewed_at == "2026-06-04T13:00:00+00:00" def test_approve_can_override_coordinates(): r = make_record(left=0, right=0, dark=0, light=0, review_status="proposed") out = approve(r, reviewed_at="t", coordinate=Coordinate(4, 1, 2, 3)) assert (out.left, out.right, out.dark, out.light) == (4, 1, 2, 3) def test_approve_does_not_mutate_input(): r = make_record(review_status="proposed") approve(r, reviewed_at="t") assert r.review_status == "proposed" and r.reviewed_at is None def test_approve_can_set_rationale(): r = make_record(review_status="proposed", rationale="auto") out = approve(r, reviewed_at="t", rationale="human note") assert out.rationale == "human note" def test_approved_record_revalidates(): r = make_record(review_status="proposed") out = approve(r, reviewed_at="t", coordinate=Coordinate(2, 2, 1, 1)) validate(out) # must not raise