import json import unittest from pathlib import Path ROOT = Path(__file__).resolve().parents[1] OBJECT_SPEC = ROOT / "salesforce-crm-standard/objects/standard_objects_spec.json" RELINK_FLOW = ROOT / "salesforce-crm-standard/flows/Std_RelinkLeadChildren.flow.json" class CampaignMemberLeadConversionContractsTest(unittest.TestCase): @classmethod def setUpClass(cls): objects = json.loads(OBJECT_SPEC.read_text(encoding="utf-8")) campaign_member = next( item for item in objects if item["apiName"] == "CampaignMember" ) cls.fields = { field["apiName"]: field for field in campaign_member["fields"] } cls.relink_flow = json.loads(RELINK_FLOW.read_text(encoding="utf-8")) def test_relationship_keys_do_not_block_standard_lead_conversion(self): for field_name in ("CampaignId", "ContactId", "LeadId"): with self.subTest(field=field_name): field = self.fields[field_name] self.assertTrue(field.get("createable", True)) self.assertFalse(field["updateable"]) self.assertNotIn("writeProtectionPolicy", field) def test_lead_conversion_relinks_campaign_members_as_internal_updates(self): prepare = next( action for action in self.relink_flow["actionCalls"] if action["name"] == "PrepareCampaignMemberRelink" ) inputs = { parameter["name"]: parameter["value"] for parameter in prepare["inputParameters"] } self.assertEqual(inputs["object"], "CampaignMember") self.assertEqual( inputs["internalUpdates"], { "ContactId": {"elementReference": "contactId"}, "LeadId": None, }, ) if __name__ == "__main__": unittest.main()