test_governance_identifiers.py 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. from __future__ import annotations
  2. import uuid
  3. import pytest
  4. def test_generated_governance_uid_is_uuid7_compatible():
  5. from app.core.common.identifiers import new_governance_uid
  6. value = new_governance_uid()
  7. parsed = uuid.UUID(value)
  8. assert parsed.version == 7
  9. assert parsed.variant == uuid.RFC_4122
  10. def test_ensure_governance_uid_preserves_retry_identity():
  11. from app.core.common.identifiers import ensure_governance_uid
  12. properties = {"name_zh": "客户域"}
  13. first = ensure_governance_uid(properties)
  14. second = ensure_governance_uid(properties)
  15. assert first == second
  16. assert properties["uid"] == first
  17. def test_ensure_governance_uid_rejects_invalid_or_non_v7_values():
  18. from app.core.common.identifiers import ensure_governance_uid
  19. with pytest.raises(ValueError, match="UUIDv7"):
  20. ensure_governance_uid({"uid": "not-a-uuid"})
  21. with pytest.raises(ValueError, match="UUIDv7"):
  22. ensure_governance_uid({"uid": str(uuid.uuid4())})
  23. class RecordingSession:
  24. def __init__(self):
  25. self.calls = []
  26. def run(self, query, parameters=None, **kwargs):
  27. self.calls.append((query, parameters or kwargs))
  28. return []
  29. def test_reconciliation_defines_uid_constraints_and_reports_without_writing():
  30. from app.commands.reconcile_governance_uids import (
  31. ensure_uid_constraints,
  32. report_missing_uids,
  33. )
  34. session = RecordingSession()
  35. ensure_uid_constraints(session)
  36. report_missing_uids(session, limit=25)
  37. queries = "\n".join(query for query, _ in session.calls)
  38. assert "business_domain_uid" in queries
  39. assert "data_meta_uid" in queries
  40. assert "data_flow_uid" in queries
  41. assert "datasource_uid" in queries
  42. assert "IS UNIQUE" in queries
  43. assert "SET n.uid" not in queries
  44. assert "n.uid IS NULL" in queries
  45. def test_primary_governance_creation_paths_attach_uid():
  46. from pathlib import Path
  47. root = Path(__file__).resolve().parents[1]
  48. business_domain = (root / "app/core/business_domain/business_domain.py").read_text(
  49. encoding="utf-8"
  50. )
  51. dataflow = (root / "app/core/data_flow/dataflows.py").read_text(encoding="utf-8")
  52. metadata_routes = (root / "app/api/meta_data/routes.py").read_text(
  53. encoding="utf-8"
  54. )
  55. assert business_domain.count("ensure_governance_uid(") >= 4
  56. assert dataflow.count("ensure_governance_uid(") >= 1
  57. assert metadata_routes.count("ensure_governance_uid(") >= 3