import json import unittest from pathlib import Path ROOT = Path(__file__).resolve().parents[1] class LeadConvertCampaignMemberRelinkContractsTest(unittest.TestCase): @classmethod def setUpClass(cls): cls.flow = json.loads( (ROOT / "salesforce-crm-standard/flows/Std_RelinkLeadChildren.flow.json").read_text() ) cls.objects = json.loads( (ROOT / "salesforce-crm-standard/objects/standard_objects_spec.json").read_text() ) def test_public_parent_references_remain_non_updateable(self): campaign_member = next( item for item in self.objects if item["apiName"] == "CampaignMember" ) fields = {field["apiName"]: field for field in campaign_member["fields"]} self.assertFalse(fields["LeadId"]["updateable"]) self.assertFalse(fields["ContactId"]["updateable"]) def test_standard_action_uses_protected_prepared_update(self): updates = {item["name"]: item for item in self.flow.get("recordUpdates", [])} self.assertNotIn("RelinkCampaignMember", updates) lookups = {item["name"]: item for item in self.flow["recordLookups"]} lookup = lookups["GetLeadCampaignMembers"] self.assertEqual(lookup["object"], "CampaignMember") self.assertEqual(lookup["queriedFields"], ["Id"]) self.assertFalse(lookup["getFirstRecordOnly"]) self.assertEqual(lookup["outputReference"], "$leadCampaignMembers") self.assertEqual( lookup["filters"], [ { "field": "LeadId", "operator": "EqualTo", "value": {"elementReference": "leadId"}, } ], ) loops = {item["name"]: item for item in self.flow["loops"]} loop = loops["RelinkCampaignMembers"] self.assertEqual(loop["collectionReference"], "$leadCampaignMembers") self.assertEqual( loop["assignNextValueToReference"], "$currentLeadCampaignMember" ) self.assertEqual( loop["nextValueConnector"]["targetReference"], "PrepareCampaignMemberRelink", ) self.assertEqual( loop["noMoreValuesConnector"]["targetReference"], "RelinkOpenTasksWho" ) actions = {item["name"]: item for item in self.flow["actionCalls"]} prepare = actions["PrepareCampaignMemberRelink"] self.assertEqual(prepare["actionType"], "previewRecordUpdate") prepare_inputs = { item["name"]: item["value"] for item in prepare["inputParameters"] } self.assertEqual(prepare_inputs["object"], "CampaignMember") self.assertEqual( prepare_inputs["recordId"], {"elementReference": "$currentLeadCampaignMember.Id"}, ) self.assertEqual( prepare_inputs["internalUpdates"], { "ContactId": {"elementReference": "contactId"}, "LeadId": None, }, ) commit = actions["CommitCampaignMemberRelink"] self.assertEqual(commit["actionType"], "commitPreparedRecordUpdate") self.assertEqual( commit["connector"]["targetReference"], "RelinkCampaignMembers" ) if __name__ == "__main__": unittest.main()