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 load_manifest(): return load_json(CRM_PACK / "pack.json") def iter_last_activity_date_fields(): specs = load_json(CRM_PACK / "objects" / "standard_objects_spec.json") for spec in specs: for field in spec.get("fields", []): if field.get("apiName") == "LastActivityDate": yield spec.get("apiName"), field class LastActivityDateContractsTest(unittest.TestCase): def test_account_and_contact_declare_read_only_last_activity_date(self): manifest_paths = { component.get("path") for component in load_manifest().get("components", []) if component.get("kind") == "object_spec" } self.assertIn("objects/standard_objects_spec.json", manifest_paths) declarations = list(iter_last_activity_date_fields()) self.assertEqual(len(declarations), 2) actual = {object_api_name: field for object_api_name, field in declarations} expected = { "apiName": "LastActivityDate", "label": "Last Activity", "type": "date", "createable": False, "updateable": False, } self.assertEqual(actual["Account"], expected) self.assertEqual(actual["Contact"], expected) def test_last_activity_date_declarations_do_not_introduce_custom_payload(self): declarations = list(iter_last_activity_date_fields()) self.assertEqual(len(declarations), 2) by_object = dict(declarations) self.assertEqual(set(by_object.keys()), {"Account", "Contact"}) for object_api_name, field in declarations: with self.subTest(object=object_api_name): self.assertFalse(object_api_name.endswith("__c")) self.assertFalse(field["apiName"].endswith("__c")) if __name__ == "__main__": unittest.main()