import json import unittest from pathlib import Path REPO_ROOT = Path(__file__).resolve().parents[1] CRM_PACK = REPO_ROOT / "salesforce-crm-standard" VALIDATION_RULES = CRM_PACK / "validation" / "standard_validation_rules.json" EXPECTED_SHARING_RULE_RULES = { "SharingRule_Target_Exactly_One": { "id": "vrule_sharing_rule_target_exactly_one", "condition": "(ISBLANK(ShareWithRoleId) && ISBLANK(ShareWithGroupId)) || (!ISBLANK(ShareWithRoleId) && !ISBLANK(ShareWithGroupId))", "errorMessage": "sharing rule must target exactly one role or group", }, "SharingRule_Criteria_Forbids_SharedFrom": { "id": "vrule_sharing_rule_criteria_forbids_shared_from", "condition": "!ISBLANK(Criteria) && (!ISBLANK(SharedFromRoleId) || !ISBLANK(SharedFromGroupId))", "errorMessage": "criteria-based sharing rules cannot define SharedFromRoleId or SharedFromGroupId", }, "SharingRule_Owner_Based_Requires_One_SharedFrom": { "id": "vrule_sharing_rule_owner_based_requires_one_shared_from", "condition": "ISBLANK(Criteria) && ((ISBLANK(SharedFromRoleId) && ISBLANK(SharedFromGroupId)) || (!ISBLANK(SharedFromRoleId) && !ISBLANK(SharedFromGroupId)))", "errorMessage": "owner-based sharing rules must define exactly one SharedFromRoleId or SharedFromGroupId", }, } def load_validation_rules(): with VALIDATION_RULES.open(encoding="utf-8") as handle: return json.load(handle)["validationRules"] class SharingRuleValidationRulesTest(unittest.TestCase): def test_sharing_rule_shape_constraints_are_pack_owned_validation_rules(self): rules = { rule["name"]: rule for rule in load_validation_rules() if rule.get("objectApiName") == "SharingRule" } self.assertEqual(set(rules), set(EXPECTED_SHARING_RULE_RULES)) for name, expected in EXPECTED_SHARING_RULE_RULES.items(): with self.subTest(rule=name): rule = rules[name] self.assertEqual(rule["id"], expected["id"]) self.assertTrue(rule["active"]) self.assertEqual(rule["condition"], expected["condition"]) self.assertEqual(rule["errorMessage"], expected["errorMessage"]) self.assertIn("SharingRule", rule["description"]) if __name__ == "__main__": unittest.main()