from backend.agents.disputes import annotate_clusters, find_disputes def _a(id_, attribute, value): return {"id": id_, "attribute": attribute, "value": value, "source_text": value} def test_find_disputes_flags_same_attribute_different_values(): assertions = [ _a("a1", "stud_pack_size", "(2) 2x6 STUD PACK"), _a("a2", "stud_pack_size", "(5) 2x6 STUD PACK"), _a("a3", "beam_size", "HSS16X4X5/8"), ] disputes = find_disputes(assertions) assert len(disputes) == 1 assert disputes[0]["attribute"] == "stud_pack_size" assert disputes[0]["values"] == ["(2) 2x6 STUD PACK", "(5) 2x6 STUD PACK"] assert disputes[0]["assertion_ids"] == ["a1", "a2"] def test_find_disputes_ignores_agreeing_values_and_blanks(): assertions = [ _a("a1", "beam_size", "HSS16X4X5/8"), _a("a2", "beam_size", " hss16x4x5/8 "), # same after normalize _a("a3", "", "orphan"), # no attribute -> skipped _a("a4", "beam_size", ""), # no value -> skipped ] assert find_disputes(assertions) == [] def test_annotate_clusters_writes_disputed_attributes(): clusters = [ {"key": "c1", "assertions": [ _a("a1", "stud_pack_size", "(2) 2x6"), _a("a2", "stud_pack_size", "(5) 2x6"), ]}, {"key": "c2", "assertions": [_a("a3", "x", "1"), _a("a4", "x", "1")]}, ] assert annotate_clusters(clusters) == 1 assert clusters[0]["disputed_attributes"][0]["attribute"] == "stud_pack_size" assert "disputed_attributes" not in clusters[1]