test_service.py 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. import pytest
  2. from ontorefactor_governance.db import Database
  3. from ontorefactor_governance.service import (
  4. GovernanceError,
  5. export_jsonld,
  6. impact,
  7. list_elements,
  8. require_project,
  9. seed_challenge_cup_demo,
  10. seed_tenant_isolation,
  11. )
  12. @pytest.fixture
  13. def db():
  14. value = Database("sqlite:///:memory:")
  15. yield value
  16. value.close()
  17. def test_reference_slice_is_valid_and_idempotent(db):
  18. first = seed_tenant_isolation(db, "tenant-a")
  19. second = seed_tenant_isolation(db, "tenant-a")
  20. assert first["validation"]["valid"] is True
  21. assert second["validation"]["valid"] is True
  22. assert second["overview"]["totals"] == {
  23. "elements": 48,
  24. "assertions": 56,
  25. "pending_reviews": 0,
  26. "evidence": 2,
  27. "rules": 5,
  28. "open_issues": 0,
  29. "agent_runs": 0,
  30. }
  31. assert second["overview"]["layers"] == {"M3": 8, "M2": 24, "M1": 13, "M0": 3}
  32. def test_tenant_scope_is_enforced(db):
  33. result = seed_tenant_isolation(db, "tenant-a")
  34. with pytest.raises(GovernanceError) as error:
  35. require_project(db, "tenant-b", result["project"]["id"])
  36. assert error.value.status == 404
  37. def test_impact_and_jsonld_export(db):
  38. result = seed_tenant_isolation(db, "tenant-a")
  39. project_id = result["project"]["id"]
  40. elements = list_elements(db, "tenant-a", project_id)["items"]
  41. tenant = next(item for item in elements if item["name"] == "Tenant")
  42. affected = impact(db, "tenant-a", tenant["id"], 3)
  43. exported = export_jsonld(db, "tenant-a", project_id)
  44. assert affected["center"]["name"] == "Tenant"
  45. assert any(node["name"] == "DcpTenantTable" for node in affected["nodes"])
  46. assert exported["@id"] == result["project"]["namespace"]
  47. assert len(exported["@graph"]) == 104
  48. def test_challenge_cup_demo_is_idempotent_and_starts_empty(db):
  49. first = seed_challenge_cup_demo(db, "demo")
  50. second = seed_challenge_cup_demo(db, "demo")
  51. assert first["validation"]["valid"] is True
  52. assert first["project"]["id"] == second["project"]["id"]
  53. assert second["overview"]["demo"]["decision_code"] == "NOT_BUILT"
  54. assert second["overview"]["demo"]["asset_id"] == ""
  55. assert second["overview"]["totals"]["elements"] == 0
  56. assert second["overview"]["totals"]["assertions"] == 0
  57. assert second["overview"]["totals"]["evidence"] == 0
  58. assert second["overview"]["totals"]["rules"] == 0