test_maintenance_helpers.py 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. import rdflib
  2. from app.maintenance import (
  3. _extract_wikidata_qids_from_entity_dump,
  4. _infer_atlas_type_from_qids,
  5. )
  6. from app.atlas_store import _parse_boolean_literal
  7. def test_extract_wikidata_qids_from_dump_dedupes():
  8. dump = {
  9. "entities": {
  10. "Q1": {
  11. "claims": {
  12. "P31": [
  13. {
  14. "mainsnak": {
  15. "datavalue": {"value": {"id": "Q5"}},
  16. }
  17. },
  18. {
  19. "mainsnak": {
  20. "datavalue": {"value": {"id": "Q5"}},
  21. }
  22. },
  23. ],
  24. "P279": [
  25. {
  26. "mainsnak": {
  27. "datavalue": {"value": {"id": "Q6"}},
  28. }
  29. }
  30. ],
  31. },
  32. }
  33. }
  34. }
  35. qids = _extract_wikidata_qids_from_entity_dump(dump)
  36. assert qids == ["Q5", "Q6"]
  37. def test_infer_atlas_type_from_qids_heuristic_person():
  38. g = rdflib.Graph()
  39. wikidata_uri = rdflib.URIRef("http://www.wikidata.org/entity/Q5")
  40. # object should contain a keyword like "Person" so the heuristic maps.
  41. g.add((wikidata_uri, rdflib.RDFS.subClassOf, rdflib.URIRef("http://dbpedia.org/ontology/Person")))
  42. atlas_type = _infer_atlas_type_from_qids(["Q5"], g)
  43. assert atlas_type == "atlas:Person"
  44. def test_parse_boolean_literal_accepts_virtuoso_one():
  45. assert _parse_boolean_literal("1") is True
  46. assert _parse_boolean_literal("true") is True
  47. assert _parse_boolean_literal("0") is False