import json import unittest from pathlib import Path ROOT = Path(__file__).resolve().parents[1] / "salesforce-crm-standard" def load_json(path: Path): return json.loads(path.read_text()) class CustomPermissionComponentsTest(unittest.TestCase): def test_official_action_permissions_have_one_first_class_owner(self): manifest = load_json(ROOT / "pack.json") actions = load_json( ROOT / "actions" / "invocable_standard_actions.json" ) expected = { "SkipOpportunityOnConvert": { "schema": "nexuscrm.custom-permission/v1", "label": "Skip Opportunity on Convert", "description": ( "Allows users to skip Opportunity creation during Lead Convert. " "Grant through permission sets." ), "active": True, }, "SendRecordEmail": { "schema": "nexuscrm.custom-permission/v1", "label": "Send Record Email", "description": ( "Allows sending a record email through the standard CRM action." ), "active": True, }, } components = { component["businessKey"]: component for component in manifest["components"] if component["kind"] == "custom_permission" } self.assertEqual(set(components), set(expected)) for api_name, payload in expected.items(): component = components[api_name] self.assertEqual(component["manageability"], "locked") self.assertEqual( load_json(ROOT / component["path"]), payload, ) action_component = next( component for component in manifest["components"] if component["kind"] == "invocable_action" and component["businessKey"] == "bootstrap_standard_actions" ) dependencies = [ (dependency["kind"], dependency["businessKey"]) for dependency in action_component["dependsOn"] ] for api_name in expected: self.assertEqual( dependencies.count(("custom_permission", api_name)), 1, ) for action in actions: self.assertNotIn("customPermissions", action, action["name"]) by_name = {action["name"]: action for action in actions} self.assertEqual( by_name["sendRecordEmail"]["requiredPermissions"], ["SendRecordEmail"], ) self.assertIn( "SkipOpportunityOnConvert", { guard.get("requiredPermission") for guard in by_name["convertLead"]["inputGuards"] }, ) if __name__ == "__main__": unittest.main()