test_agents.py 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. from pathlib import Path
  2. import pytest
  3. from ontorefactor_governance.agents import execute_governance_agent
  4. from ontorefactor_governance.db import Database
  5. from ontorefactor_governance.service import GovernanceError, create_project, list_assertions, list_elements
  6. def project(db):
  7. return create_project(db, "tenant-a", {"name": "Agent import", "namespace": "urn:test:agent"})
  8. def test_lambdagent_pipeline_discovers_and_persists_assets():
  9. db = Database("sqlite:///:memory:")
  10. item = project(db)
  11. result = execute_governance_agent(db, "tenant-a", item["id"], {
  12. "source_type": "ddl",
  13. "source_name": "customer.sql",
  14. "environment": "production",
  15. "content": """
  16. CREATE TABLE dcp_customer (
  17. id INTEGER PRIMARY KEY,
  18. mobile VARCHAR(32) NOT NULL
  19. );
  20. """,
  21. })
  22. assert result["status"] == "completed"
  23. assert result["result"]["summary"] == {"elements": 7, "assertions": 8, "issues": 2}
  24. assert result["persisted"] == {"elements": 7, "assertions": 8, "issues": 2}
  25. assert len(result["trace"]) >= 5
  26. assert list_elements(db, "tenant-a", item["id"])["total"] == 7
  27. assert len(list_assertions(db, "tenant-a", item["id"])) == 8
  28. assert any(value["review_status"] == "pending" for value in list_assertions(db, "tenant-a", item["id"]))
  29. db.close()
  30. def test_invalid_ddl_creates_a_failed_audited_run():
  31. db = Database("sqlite:///:memory:")
  32. item = project(db)
  33. with pytest.raises(GovernanceError):
  34. execute_governance_agent(db, "tenant-a", item["id"], {"source_type": "ddl", "content": "SELECT 1"})
  35. run = db.fetchone("SELECT status,error FROM governance_agent_runs")
  36. assert run["status"] == "failed"
  37. assert run["error"]
  38. db.close()
  39. def test_runtime_source_has_no_agentpaas_dependency():
  40. source_root = Path(__file__).parents[1] / "src" / "ontorefactor_governance"
  41. source = "\n".join(path.read_text(encoding="utf-8") for path in source_root.glob("*.py"))
  42. assert "import agentpaas" not in source
  43. assert "from agentpaas" not in source