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 iter_active_formula_fields(): specs = load_json(CRM_PACK / "objects" / "standard_objects_spec.json") for spec in specs: for field in spec.get("fields", []): if field.get("formula"): yield spec["apiName"], field class CRMStandardFormulaFieldShapesTest(unittest.TestCase): EXPECTED_RETURN_TYPES = { "Task.IsClosed": "boolean", "CampaignMember.Name": "string", "CampaignMember.FirstName": "string", "CampaignMember.LastName": "string", "CampaignMember.Title": "string", "CampaignMember.Street": "string", "CampaignMember.City": "string", "CampaignMember.State": "string", "CampaignMember.PostalCode": "string", "CampaignMember.Country": "string", "CampaignMember.Email": "email", "CampaignMember.Phone": "phone", "CampaignMember.Fax": "phone", "CampaignMember.MobilePhone": "phone", "CampaignMember.Description": "textarea", "CampaignMember.DoNotCall": "boolean", "CampaignMember.HasOptedOutOfEmail": "boolean", "CampaignMember.CompanyOrAccount": "string", "OpportunityLineItem.TotalPrice": "currency", } def test_all_active_formula_fields_use_formula_type(self): offenders = [] for object_api_name, field in iter_active_formula_fields(): if field.get("type") != "formula": offenders.append(f"{object_api_name}.{field.get('apiName')}") self.assertEqual(offenders, []) def test_migrated_formula_fields_preserve_return_type(self): actual = { f"{object_api_name}.{field.get('apiName')}": field.get("returnType") for object_api_name, field in iter_active_formula_fields() if f"{object_api_name}.{field.get('apiName')}" in self.EXPECTED_RETURN_TYPES } self.assertEqual(actual, self.EXPECTED_RETURN_TYPES) if __name__ == "__main__": unittest.main()