import json import re import unittest from pathlib import Path REPO_ROOT = Path(__file__).resolve().parents[1] CRM_FRONTEND = REPO_ROOT / "salesforce-crm-standard" / "frontend" SETUP_POLICY = CRM_FRONTEND / "src" / "setup-navigation-policy.ts" def read_text(path: Path) -> str: return path.read_text(encoding="utf-8") def load_json(path: Path): with path.open(encoding="utf-8") as handle: return json.load(handle) def parse_simple_object_entries(source: str, name: str) -> list[dict[str, str]]: match = re.search( rf"export const {re.escape(name)} = \[(.*?)\] as const", source, flags=re.DOTALL, ) if not match: raise AssertionError(f"missing object array export {name}") entries: list[dict[str, str]] = [] for line in match.group(1).splitlines(): stripped = line.strip().rstrip(",") if not stripped.startswith("{"): continue entry = { key: value for key, value in re.findall(r"([A-Za-z0-9_]+): '([^']*)'", stripped) } if entry: entries.append(entry) return entries class CrmFrontendSetupNavigationPolicyTest(unittest.TestCase): def test_package_exports_and_manifest_entrypoints_include_setup_navigation_source(self): package_json = load_json(CRM_FRONTEND / "package.json") manifest = load_json(CRM_FRONTEND / "source-manifest.json") self.assertEqual( package_json["exports"]["./setup-navigation-policy"], "./src/setup-navigation-policy.ts", ) self.assertIn( "src/setup-navigation-policy.ts", manifest["packageBuild"]["entrypoints"], ) def test_setup_policy_preserves_capability_to_page_mapping(self): source = read_text(SETUP_POLICY) self.assertEqual( parse_simple_object_entries(source, "CRM_SETUP_PAGE_CAPABILITIES"), [ {"capability": "appManager", "pageId": "apps"}, {"capability": "approvalProcesses", "pageId": "approval"}, {"capability": "connectedApps", "pageId": "connected-apps"}, {"capability": "flowList", "pageId": "flows"}, {"capability": "objectManager", "pageId": "objects"}, ], ) if __name__ == "__main__": unittest.main()