test_claims.py 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. from app.claims import build_claim_sets
  2. from app.models import AtlasAlias, AtlasClaim, AtlasClaimObject, AtlasEntity, AtlasProvenance
  3. def test_build_claim_sets_attaches_provenance_per_claim():
  4. entity = AtlasEntity(
  5. atlas_id="atlas:0cqt90abcd123456",
  6. canonical_label="Donald Trump",
  7. canonical_description="45th and 47th U.S. President",
  8. entity_type="Person",
  9. aliases=[AtlasAlias(label="Donald Trump")],
  10. claims=[
  11. AtlasClaim(
  12. claim_id="clm_raw_ident_mid_/m/0cqt90",
  13. subject="atlas:0cqt90abcd123456",
  14. predicate="atlas:hasIdentifier",
  15. object=AtlasClaimObject(kind="identifier", id_type="mid", value="/m/0cqt90"),
  16. layer="raw",
  17. provenance=AtlasProvenance(source="google", retrieval_method="trends-resolution", confidence=0.9, retrieved_at="2026-04-03T00:00:00Z"),
  18. ),
  19. AtlasClaim(
  20. claim_id="clm_raw_ident_qid_Q22686",
  21. subject="atlas:0cqt90abcd123456",
  22. predicate="atlas:hasIdentifier",
  23. object=AtlasClaimObject(kind="identifier", id_type="qid", value="Q22686"),
  24. layer="raw",
  25. provenance=AtlasProvenance(source="wikidata", retrieval_method="wbsearchentities + entitydata", confidence=0.99, retrieved_at="2026-04-03T00:00:01Z"),
  26. ),
  27. AtlasClaim(
  28. claim_id="clm_drv_canonical_type",
  29. subject="atlas:0cqt90abcd123456",
  30. predicate="atlas:hasCanonicalType",
  31. object=AtlasClaimObject(kind="type", value="atlas:Person"),
  32. layer="derived",
  33. provenance=AtlasProvenance(source="openai-llm", retrieval_method="type-classification", confidence=1.0, retrieved_at="2026-04-03T00:00:02Z"),
  34. ),
  35. ],
  36. raw_payload={"wikidata": {"status": "ok", "qid": "Q22686", "retrieved_at": "2026-04-03T00:00:01Z"}},
  37. needs_curation=False,
  38. )
  39. raw_claims, derived_claims = build_claim_sets(entity)
  40. mid_claim = next(c for c in raw_claims if c["object"].get("value") == "/m/0cqt90")
  41. qid_claim = next(c for c in raw_claims if c["object"].get("value") == "Q22686")
  42. canonical_type = next(c for c in derived_claims if c["predicate"] == "atlas:hasCanonicalType")
  43. assert mid_claim["provenance"]["source"] == "google"
  44. assert qid_claim["provenance"]["source"] == "wikidata"
  45. assert canonical_type["provenance"]["method"] == "type-classification"