From 3d2a21d9d9edb8b0d53b4b2b8403100bdb3788a0 Mon Sep 17 00:00:00 2001 From: Daniel Roth Date: Wed, 3 Jun 2026 08:49:37 +0000 Subject: [PATCH] =?UTF-8?q?All=20downloaded=20PasHub=20files=20uploaded=20?= =?UTF-8?q?to=20SharePoint=20property=20folder=20=F0=9F=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tests/test_pashub_service.py | 74 +++++++++++++++++++ 1 file changed, 74 insertions(+) diff --git a/backend/pashub_fetcher/tests/test_pashub_service.py b/backend/pashub_fetcher/tests/test_pashub_service.py index c00e12b1..522d4086 100644 --- a/backend/pashub_fetcher/tests/test_pashub_service.py +++ b/backend/pashub_fetcher/tests/test_pashub_service.py @@ -27,6 +27,7 @@ def make_request( hubspot_deal_id: Optional[str] = None, sharepoint_link: Optional[str] = None, get_other_files: bool = False, + address: Optional[str] = None, ) -> PashubToAraTriggerRequest: return PashubToAraTriggerRequest( pashub_link=pashub_link, @@ -34,6 +35,7 @@ def make_request( hubspot_deal_id=hubspot_deal_id, sharepoint_link=sharepoint_link, get_other_files=get_other_files, + address=address, ) @@ -529,6 +531,78 @@ def test_run_persists_mcs_cert_with_mcs_certificate_file_type() -> None: assert added[0].file_type == FileTypeEnum.MCS_CERTIFICATE.value +# --------------------------------------------------------------------------- +# run(): SharePoint upload +# --------------------------------------------------------------------------- + + +def test_sharepoint_uploads_all_files_to_property_folder() -> None: + # Arrange + mock_client = MagicMock(spec=PashubClient) + mock_client.get_uprn_by_job_id.return_value = None + mock_client.get_evidence_files_by_job_id.return_value = make_downloaded( + core=["/tmp/core.pdf"], + other=["/tmp/other.pdf"], + ) + + mock_sharepoint = MagicMock(spec=DomnaSharepointClient) + mock_sharepoint.get_folders_in_path.return_value = { + "value": [{"name": "123 Main St"}] + } + + service = make_service(pashub_client=mock_client, sharepoint_client=mock_sharepoint) + + # Act + with patch("backend.pashub_fetcher.pashub_service.os.remove"): + service.run( + make_request( + sharepoint_link="Retrofit/Properties", + get_other_files=True, + address="123 Main St | some deal", + ) + ) + + # Assert + mock_sharepoint.upload_file.assert_any_call( + "/tmp/core.pdf", "Retrofit/Properties/123 Main St", "core.pdf" + ) + mock_sharepoint.upload_file.assert_any_call( + "/tmp/other.pdf", "Retrofit/Properties/123 Main St", "other.pdf" + ) + + +def test_sharepoint_skips_upload_when_folder_not_found() -> None: + # Arrange + mock_client = MagicMock(spec=PashubClient) + mock_client.get_uprn_by_job_id.return_value = None + mock_client.get_evidence_files_by_job_id.return_value = make_downloaded( + core=["/tmp/core.pdf"] + ) + + mock_sharepoint = MagicMock(spec=DomnaSharepointClient) + mock_sharepoint.get_folders_in_path.return_value = { + "value": [{"name": "Different Property"}] + } + + service = make_service(pashub_client=mock_client, sharepoint_client=mock_sharepoint) + + # Act + with ( + patch("backend.pashub_fetcher.pashub_service.os.remove"), + patch("backend.pashub_fetcher.pashub_service.logger") as mock_logger, + ): + service.run( + make_request( + sharepoint_link="Retrofit/Properties", + address="No Such Property | deal", + ) + ) + + # Assert + mock_sharepoint.upload_file.assert_not_called() + mock_logger.warning.assert_called() + + def test_run_warns_and_continues_when_site_notes_parsing_fails() -> None: mock_client = MagicMock(spec=PashubClient) mock_client.get_uprn_by_job_id.return_value = None