correct magicplan orchestration tests

This commit is contained in:
Daniel Roth 2026-06-04 08:13:20 +00:00
parent 174ef26075
commit 09e31c2a98
7 changed files with 410325 additions and 40 deletions

View file

@ -22,7 +22,7 @@ def _load_fixture(name: str) -> dict[str, Any]:
def _make_client(mock_session: MagicMock) -> MagicPlanClient:
mock_session.headers = {}
with patch(
"backend.magic_plan.magic_plan_client.requests.Session",
"infrastructure.magic_plan.magic_plan_client.requests.Session",
return_value=mock_session,
):
return MagicPlanClient(customer_id=CUSTOMER_ID, api_key=API_KEY)

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,39 @@
{
"data": {
"paging": {
"page": 1,
"next_page": false,
"count": 1
},
"plans": [
{
"id": "9f9889ff-793e-4e9a-a6f0-e22f5b0f5365",
"project_id": "269422e7-45b6-4582-b124-405053dcd967",
"name": "11, Br1 3lp",
"address": {
"street": "11 Station Road",
"street_number": null,
"postal_code": "BR1 3LP",
"city": "Bromley",
"country": "GB",
"longitude": 0.01593668,
"latitude": 51.40901033
},
"creation_date": "2026-04-28T09:35:44+00:00",
"update_date": "2026-05-05T12:53:36+00:00",
"thumbnail_url": "https://s3.amazonaws.com/prod.plans.sensopia.com/9f9889ff-793e-4e9a-a6f0-e22f5b0f5365/plan.thumb",
"public_url": "https://cloud.magicplan.app/plan/9f9889ff-793e-4e9a-a6f0-e22f5b0f5365",
"cloud_url": "https://cloud.magicplan.app/projects/9f9889ff-793e-4e9a-a6f0-e22f5b0f5365",
"3d_url": "https://3d.magicplan.app/#embed/?key=MmFkZDJjNGRmYWRjM2Y5ZDAwMjEyZGRlY2I3NmJjOWFjOWRmMDdkNzIxZTViZDdhNTgxZDBiYWE1YTYzZTJmY%2FJNEogVfW%2FZwVfY25qc24oCKnfVxiF%2FupeeA7vwS8FECF0L9E7DUFE%2ByzEYzYaoVc%2FbtsZ%2FqZOSPopiR4OqD3zbCziU0QTydELS32cnSFOT",
"workgroup_id": "677d01685458a",
"team_id": null,
"created_by": {
"id": "b19771e9-1aad-45a5-9a41-f01a835172ea",
"firstname": null,
"lastname": null,
"email": "archie.ratcliff@domna.homes"
}
}
]
}
}

View file

@ -95,12 +95,14 @@ def test_run_fetches_plan_with_matched_id(
mock_client.get_plan.return_value = api_magic_plan
service = _make_service(mock_client)
with patch(
"backend.magic_plan.magic_plan_service.find_matching_plan",
"orchestration.magic_plan_orchestrator.find_matching_plan",
return_value=plan_summary,
), patch("backend.magic_plan.magic_plan_service.save_plan"), patch(
"backend.magic_plan.magic_plan_service.db_session"
), patch(
"backend.magic_plan.magic_plan_service.save_data_to_s3"
"orchestration.magic_plan_orchestrator.MagicPlanPostgresRepository"
), patch(
"orchestration.magic_plan_orchestrator.db_session"
), patch(
"orchestration.magic_plan_orchestrator.save_data_to_s3"
):
service.run(_make_request())
# Assert
@ -118,12 +120,14 @@ def test_run_returns_mapped_plan(
mock_client.get_plan.return_value = api_magic_plan
service = _make_service(mock_client)
with patch(
"backend.magic_plan.magic_plan_service.find_matching_plan",
"orchestration.magic_plan_orchestrator.find_matching_plan",
return_value=plan_summary,
), patch("backend.magic_plan.magic_plan_service.save_plan"), patch(
"backend.magic_plan.magic_plan_service.db_session"
), patch(
"backend.magic_plan.magic_plan_service.save_data_to_s3"
"orchestration.magic_plan_orchestrator.MagicPlanPostgresRepository"
), patch(
"orchestration.magic_plan_orchestrator.db_session"
), patch(
"orchestration.magic_plan_orchestrator.save_data_to_s3"
):
result = service.run(_make_request())
# Assert
@ -131,7 +135,7 @@ def test_run_returns_mapped_plan(
assert result.uid == PLAN_ID
def test_run_calls_save_plan_with_mapped_plan(
def test_run_calls_save_with_mapped_plan(
mock_client: MagicMock,
api_magic_plan: MagicPlanPlan,
plan_summary: PlanSummary,
@ -140,18 +144,21 @@ def test_run_calls_save_plan_with_mapped_plan(
mock_client.get_plans.return_value = [plan_summary]
mock_client.get_plan.return_value = api_magic_plan
service = _make_service(mock_client)
mock_repo = MagicMock()
with patch(
"backend.magic_plan.magic_plan_service.find_matching_plan",
"orchestration.magic_plan_orchestrator.find_matching_plan",
return_value=plan_summary,
), patch("backend.magic_plan.magic_plan_service.save_plan") as mock_save, patch(
"backend.magic_plan.magic_plan_service.db_session"
), patch(
"backend.magic_plan.magic_plan_service.save_data_to_s3"
"orchestration.magic_plan_orchestrator.MagicPlanPostgresRepository",
return_value=mock_repo,
), patch(
"orchestration.magic_plan_orchestrator.db_session"
), patch(
"orchestration.magic_plan_orchestrator.save_data_to_s3"
):
service.run(_make_request())
# Assert — save_plan called with a Plan whose uid matches
call_args = mock_save.call_args
saved_plan: Plan = call_args[0][1]
# Assert — save called with a Plan whose uid matches
saved_plan: Plan = mock_repo.save.call_args[0][0]
assert saved_plan.uid == PLAN_ID
@ -165,12 +172,14 @@ def test_run_accepts_uprn_without_error(
mock_client.get_plan.return_value = api_magic_plan
service = _make_service(mock_client)
with patch(
"backend.magic_plan.magic_plan_service.find_matching_plan",
"orchestration.magic_plan_orchestrator.find_matching_plan",
return_value=plan_summary,
), patch("backend.magic_plan.magic_plan_service.save_plan"), patch(
"backend.magic_plan.magic_plan_service.db_session"
), patch(
"backend.magic_plan.magic_plan_service.save_data_to_s3"
"orchestration.magic_plan_orchestrator.MagicPlanPostgresRepository"
), patch(
"orchestration.magic_plan_orchestrator.db_session"
), patch(
"orchestration.magic_plan_orchestrator.save_data_to_s3"
):
service.run(_make_request(uprn="100023336956"))
@ -188,12 +197,14 @@ def test_run_uploads_to_s3_with_uprn_key(
request = _make_request(uprn="100023336956")
service = MagicPlanService(client=mock_client, s3_bucket=S3_BUCKET)
with patch(
"backend.magic_plan.magic_plan_service.find_matching_plan",
"orchestration.magic_plan_orchestrator.find_matching_plan",
return_value=plan_summary,
), patch("backend.magic_plan.magic_plan_service.save_plan"), patch(
"backend.magic_plan.magic_plan_service.db_session"
), patch(
"backend.magic_plan.magic_plan_service.save_data_to_s3"
"orchestration.magic_plan_orchestrator.MagicPlanPostgresRepository"
), patch(
"orchestration.magic_plan_orchestrator.db_session"
), patch(
"orchestration.magic_plan_orchestrator.save_data_to_s3"
) as mock_s3:
# Act
service.run(request)
@ -216,12 +227,14 @@ def test_run_uploads_to_s3_with_deal_id_key_when_uprn_absent(
request = _make_request(hubspot_deal_id="deal-456", uprn=None)
service = MagicPlanService(client=mock_client, s3_bucket=S3_BUCKET)
with patch(
"backend.magic_plan.magic_plan_service.find_matching_plan",
"orchestration.magic_plan_orchestrator.find_matching_plan",
return_value=plan_summary,
), patch("backend.magic_plan.magic_plan_service.save_plan"), patch(
"backend.magic_plan.magic_plan_service.db_session"
), patch(
"backend.magic_plan.magic_plan_service.save_data_to_s3"
"orchestration.magic_plan_orchestrator.MagicPlanPostgresRepository"
), patch(
"orchestration.magic_plan_orchestrator.db_session"
), patch(
"orchestration.magic_plan_orchestrator.save_data_to_s3"
) as mock_s3:
# Act
service.run(request)
@ -248,12 +261,14 @@ def test_run_creates_uploaded_file_record(
service = MagicPlanService(client=mock_client, s3_bucket=S3_BUCKET)
mock_session = MagicMock()
with patch(
"backend.magic_plan.magic_plan_service.find_matching_plan",
"orchestration.magic_plan_orchestrator.find_matching_plan",
return_value=plan_summary,
), patch("backend.magic_plan.magic_plan_service.save_plan"), patch(
"backend.magic_plan.magic_plan_service.db_session"
), patch(
"orchestration.magic_plan_orchestrator.MagicPlanPostgresRepository"
), patch(
"orchestration.magic_plan_orchestrator.db_session"
) as mock_db, patch(
"backend.magic_plan.magic_plan_service.save_data_to_s3"
"orchestration.magic_plan_orchestrator.save_data_to_s3"
):
mock_db.return_value.__enter__.return_value = mock_session
# Act
@ -276,7 +291,7 @@ def test_run_creates_uploaded_file_record(
assert uploaded_file.hubspot_deal_id == "deal-789"
def test_run_passes_flushed_uploaded_file_id_to_save_plan(
def test_run_passes_flushed_uploaded_file_id_to_save(
mock_client: MagicMock,
plan_summary: PlanSummary,
) -> None:
@ -294,18 +309,22 @@ def test_run_passes_flushed_uploaded_file_id_to_save_plan(
obj.id = 42
mock_session.flush.side_effect = simulate_flush
mock_repo = MagicMock()
with patch(
"backend.magic_plan.magic_plan_service.find_matching_plan",
"orchestration.magic_plan_orchestrator.find_matching_plan",
return_value=plan_summary,
), patch("backend.magic_plan.magic_plan_service.save_plan") as mock_save, patch(
"backend.magic_plan.magic_plan_service.db_session"
), patch(
"orchestration.magic_plan_orchestrator.MagicPlanPostgresRepository",
return_value=mock_repo,
), patch(
"orchestration.magic_plan_orchestrator.db_session"
) as mock_db, patch(
"backend.magic_plan.magic_plan_service.save_data_to_s3"
"orchestration.magic_plan_orchestrator.save_data_to_s3"
):
mock_db.return_value.__enter__.return_value = mock_session
# Act
service.run(_make_request())
# Assert
assert mock_save.call_args[0][2] == 42
# Assert — save called with the flushed uploaded_file_id
assert mock_repo.save.call_args[0][1] == 42