from __future__ import annotations import json import unittest from pathlib import Path from scripts import apply_credits_permissions_seed_adapter as permissions_adapter from scripts import serviceification_d3_engine as deploy REPO_ROOT = Path(__file__).resolve().parents[1] CATALOG_PATH = ( REPO_ROOT / "deployments" / "offline" / "runtime" / "seeds" / "deploy-seed-catalog.json" ) PERMISSIONS_INVOCATION_ID = "test.credits_permissions.governed_reference_data" def governed_reference_data_evidence() -> dict[str, object]: permission_counts = { "permission_sets": 5, "object_permissions": 5, "field_permissions": 29, } return { "status": "passed", "profile": "test", "phase": "governed_reference_data", "execution_mode": "apply", "invocations": [ { "invocation_id": "test.pack_reference_data.governed_reference_data", "module_id": "pack_reference_data", "status": "applied", "selection": { "objects": ["Industry_Vertical__c", "Dated_Conversion_Rate__c"], }, "summary": { "coverage_complete": True, "reference_data_objects": [ "Industry_Vertical__c", "Dated_Conversion_Rate__c", ], "reference_data_record_count": 2, }, }, { "invocation_id": PERMISSIONS_INVOCATION_ID, "module_id": "credits_permissions_seed", "status": "applied", "selection": {}, "summary": { "schema_version": 1, "format": "deploy-seed-script-v1", "module_id": "credits_permissions_seed", "dry_run": False, "apply_engine": "direct_sql", "planned_counts": permission_counts, "applied_counts": permission_counts, "coverage_complete": True, "verification_status": "skipped", "duration_ms": 1, }, }, ], } class ServiceificationD3GovernedReferenceDataTests(unittest.TestCase): def test_test_profile_routes_credits_permissions_through_the_existing_d3_callsite(self) -> None: catalog = json.loads(CATALOG_PATH.read_text(encoding="utf-8")) invocation = next( item for item in catalog["profiles"]["test"]["invocations"] if item["invocation_id"] == PERMISSIONS_INVOCATION_ID ) self.assertEqual("credits_permissions_seed", invocation["module_id"]) self.assertEqual("governed_reference_data", invocation["phase"]) self.assertIn(PERMISSIONS_INVOCATION_ID, permissions_adapter.INVOCATION_REASONS) callsite = next( item for item in catalog["expected_callsites"] if item["callsite_id"] == "test.credits_permissions" ) self.assertEqual("scripts/serviceification_d3_engine.py", callsite["path"]) self.assertEqual("credits_permissions_seed", callsite["module_id"]) self.assertEqual([PERMISSIONS_INVOCATION_ID], callsite["invocation_ids"]) def test_d3_evidence_requires_both_reference_data_and_credits_permissions(self) -> None: objects, record_count = deploy.validate_governed_reference_data_evidence( governed_reference_data_evidence() ) self.assertEqual(["Industry_Vertical__c", "Dated_Conversion_Rate__c"], objects) self.assertEqual(2, record_count) incomplete = governed_reference_data_evidence() incomplete["invocations"] = incomplete["invocations"][:1] with self.assertRaisesRegex( deploy.DeployError, "Credits permission-definition evidence is incomplete", ): deploy.validate_governed_reference_data_evidence(incomplete) if __name__ == "__main__": unittest.main()