import json import unittest from pathlib import Path REPO_ROOT = Path(__file__).resolve().parents[1] CRM_PACK = REPO_ROOT / "salesforce-crm-standard" def load_json(path: Path): with path.open(encoding="utf-8") as handle: return json.load(handle) def object_spec(api_name: str): for spec in load_json(CRM_PACK / "objects" / "standard_objects_spec.json"): if spec.get("apiName") == api_name: return spec raise AssertionError(f"{api_name} object spec missing") def field_spec(spec: dict, api_name: str): for field in spec.get("fields", []): if field.get("apiName") == api_name: return field raise AssertionError(f"{spec.get('apiName')}.{api_name} field spec missing") class CampaignMemberStatusContractsTest(unittest.TestCase): def test_default_status_is_exclusive_within_campaign(self): status = object_spec("CampaignMemberStatus") self.assertEqual( status.get("exclusiveSiblingFields"), [ { "fieldApiName": "IsDefault", "partitionFieldApiName": "CampaignId", } ], ) default_field = field_spec(status, "IsDefault") self.assertEqual(default_field.get("type"), "boolean") self.assertTrue(default_field.get("required")) partition_field = field_spec(status, "CampaignId") self.assertEqual(partition_field.get("type"), "reference") self.assertEqual(partition_field.get("referenceTo"), ["Campaign"]) self.assertTrue(partition_field.get("required")) def test_has_responded_is_not_exclusive(self): status = object_spec("CampaignMemberStatus") self.assertNotIn( "HasResponded", { declaration.get("fieldApiName") for declaration in status.get("exclusiveSiblingFields", []) }, ) responded = field_spec(status, "HasResponded") self.assertEqual(responded.get("type"), "boolean") self.assertTrue(responded.get("required")) def test_sort_order_defaults_to_next_value_within_campaign(self): status = object_spec("CampaignMemberStatus") sort_order = field_spec(status, "SortOrder") self.assertEqual(sort_order.get("type"), "integer") self.assertEqual(sort_order.get("siblingMaxParentField"), "CampaignId") if __name__ == "__main__": unittest.main()