From 01e61a62753fa2301e692c6821d19cb04efb1669 Mon Sep 17 00:00:00 2001 From: Daniel Roth Date: Mon, 6 Jul 2026 13:27:04 +0000 Subject: [PATCH] =?UTF-8?q?Each=20tenancy=20signatory=20gets=20its=20own?= =?UTF-8?q?=20deal=20contact,=20with=20blank=20fields=20omitted=20?= =?UTF-8?q?=F0=9F=9F=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Fable 5 --- ..._getscstenantdata_multitenant_response.xml | 8 ++ .../test_tenant_data_sync_orchestrator.py | 76 +++++++++++++++++++ 2 files changed, 84 insertions(+) create mode 100644 tests/abri/abri_relay_getscstenantdata_multitenant_response.xml diff --git a/tests/abri/abri_relay_getscstenantdata_multitenant_response.xml b/tests/abri/abri_relay_getscstenantdata_multitenant_response.xml new file mode 100644 index 000000000..d95e3ce81 --- /dev/null +++ b/tests/abri/abri_relay_getscstenantdata_multitenant_response.xml @@ -0,0 +1,8 @@ + + 10071650064015400721609261195827 + + 400721509286114923 + 02769674129 + + + diff --git a/tests/orchestration/test_tenant_data_sync_orchestrator.py b/tests/orchestration/test_tenant_data_sync_orchestrator.py index 771abdb9d..3ed1272aa 100644 --- a/tests/orchestration/test_tenant_data_sync_orchestrator.py +++ b/tests/orchestration/test_tenant_data_sync_orchestrator.py @@ -136,3 +136,79 @@ def test_run_creates_an_associated_deal_contact_per_signatory_and_returns_a_summ ) ], ) + + +def test_run_creates_a_separate_contact_for_each_signatory( + orchestrator: TenantDataSyncOrchestrator, + mock_session: MagicMock, + sdk_client: MagicMock, +) -> None: + # Arrange + mock_session.post.return_value.content = _load_fixture( + "abri_relay_getscstenantdata_multitenant_response.xml" + ) + sdk_client.crm.contacts.basic_api.create.side_effect = [ + MagicMock(id="60123"), + MagicMock(id="60124"), + ] + + # Act + result = orchestrator.run(PLACE_REF, deal_id=DEAL_ID) + + # Assert + assert result == TenantDataSyncSummary( + tenancy_reference="10071650064015", + contact_ids=("60123", "60124"), + vulnerable_contact_count=0, + ) + created_properties = [ + call.kwargs["simple_public_object_input_for_create"].properties + for call in sdk_client.crm.contacts.basic_api.create.call_args_list + ] + assert created_properties == [ + { + "firstname": "Harper", + "lastname": "Solecka", + "mobilephone": "09261195827", + "is_vulnerable": "false", + }, + { + "firstname": "Naoimh", + "lastname": "Malyar", + "mobilephone": "09286114923", + "phone": "02769674129", + "is_vulnerable": "false", + }, + ] + associated_contact_ids = [ + call.kwargs["to_object_id"] + for call in sdk_client.crm.associations.v4.basic_api.create.call_args_list + ] + assert associated_contact_ids == ["60123", "60124"] + + +def test_run_still_creates_a_contact_for_an_all_blank_signatory( + orchestrator: TenantDataSyncOrchestrator, + mock_session: MagicMock, + sdk_client: MagicMock, +) -> None: + # Arrange + mock_session.post.return_value.content = _tenancy_response( + '4007216' + '' + ) + + # Act + result = orchestrator.run(PLACE_REF, deal_id=DEAL_ID) + + # Assert + assert result == TenantDataSyncSummary( + tenancy_reference="10042020051017", + contact_ids=("60123",), + vulnerable_contact_count=0, + ) + sdk_client.crm.contacts.basic_api.create.assert_called_once_with( + simple_public_object_input_for_create=SimplePublicObjectInputForCreate( + properties={"is_vulnerable": "false"} + ) + )