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: def _make_client(mock_session: MagicMock) -> MagicPlanClient:
mock_session.headers = {} mock_session.headers = {}
with patch( with patch(
"backend.magic_plan.magic_plan_client.requests.Session", "infrastructure.magic_plan.magic_plan_client.requests.Session",
return_value=mock_session, return_value=mock_session,
): ):
return MagicPlanClient(customer_id=CUSTOMER_ID, api_key=API_KEY) 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 mock_client.get_plan.return_value = api_magic_plan
service = _make_service(mock_client) service = _make_service(mock_client)
with patch( with patch(
"backend.magic_plan.magic_plan_service.find_matching_plan", "orchestration.magic_plan_orchestrator.find_matching_plan",
return_value=plan_summary, return_value=plan_summary,
), patch("backend.magic_plan.magic_plan_service.save_plan"), patch(
"backend.magic_plan.magic_plan_service.db_session"
), patch( ), 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()) service.run(_make_request())
# Assert # Assert
@ -118,12 +120,14 @@ def test_run_returns_mapped_plan(
mock_client.get_plan.return_value = api_magic_plan mock_client.get_plan.return_value = api_magic_plan
service = _make_service(mock_client) service = _make_service(mock_client)
with patch( with patch(
"backend.magic_plan.magic_plan_service.find_matching_plan", "orchestration.magic_plan_orchestrator.find_matching_plan",
return_value=plan_summary, return_value=plan_summary,
), patch("backend.magic_plan.magic_plan_service.save_plan"), patch(
"backend.magic_plan.magic_plan_service.db_session"
), patch( ), 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()) result = service.run(_make_request())
# Assert # Assert
@ -131,7 +135,7 @@ def test_run_returns_mapped_plan(
assert result.uid == PLAN_ID 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, mock_client: MagicMock,
api_magic_plan: MagicPlanPlan, api_magic_plan: MagicPlanPlan,
plan_summary: PlanSummary, 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_plans.return_value = [plan_summary]
mock_client.get_plan.return_value = api_magic_plan mock_client.get_plan.return_value = api_magic_plan
service = _make_service(mock_client) service = _make_service(mock_client)
mock_repo = MagicMock()
with patch( with patch(
"backend.magic_plan.magic_plan_service.find_matching_plan", "orchestration.magic_plan_orchestrator.find_matching_plan",
return_value=plan_summary, 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( ), 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()) service.run(_make_request())
# Assert — save_plan called with a Plan whose uid matches # Assert — save called with a Plan whose uid matches
call_args = mock_save.call_args saved_plan: Plan = mock_repo.save.call_args[0][0]
saved_plan: Plan = call_args[0][1]
assert saved_plan.uid == PLAN_ID 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 mock_client.get_plan.return_value = api_magic_plan
service = _make_service(mock_client) service = _make_service(mock_client)
with patch( with patch(
"backend.magic_plan.magic_plan_service.find_matching_plan", "orchestration.magic_plan_orchestrator.find_matching_plan",
return_value=plan_summary, return_value=plan_summary,
), patch("backend.magic_plan.magic_plan_service.save_plan"), patch(
"backend.magic_plan.magic_plan_service.db_session"
), patch( ), 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")) service.run(_make_request(uprn="100023336956"))
@ -188,12 +197,14 @@ def test_run_uploads_to_s3_with_uprn_key(
request = _make_request(uprn="100023336956") request = _make_request(uprn="100023336956")
service = MagicPlanService(client=mock_client, s3_bucket=S3_BUCKET) service = MagicPlanService(client=mock_client, s3_bucket=S3_BUCKET)
with patch( with patch(
"backend.magic_plan.magic_plan_service.find_matching_plan", "orchestration.magic_plan_orchestrator.find_matching_plan",
return_value=plan_summary, return_value=plan_summary,
), patch("backend.magic_plan.magic_plan_service.save_plan"), patch(
"backend.magic_plan.magic_plan_service.db_session"
), patch( ), 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: ) as mock_s3:
# Act # Act
service.run(request) 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) request = _make_request(hubspot_deal_id="deal-456", uprn=None)
service = MagicPlanService(client=mock_client, s3_bucket=S3_BUCKET) service = MagicPlanService(client=mock_client, s3_bucket=S3_BUCKET)
with patch( with patch(
"backend.magic_plan.magic_plan_service.find_matching_plan", "orchestration.magic_plan_orchestrator.find_matching_plan",
return_value=plan_summary, return_value=plan_summary,
), patch("backend.magic_plan.magic_plan_service.save_plan"), patch(
"backend.magic_plan.magic_plan_service.db_session"
), patch( ), 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: ) as mock_s3:
# Act # Act
service.run(request) service.run(request)
@ -248,12 +261,14 @@ def test_run_creates_uploaded_file_record(
service = MagicPlanService(client=mock_client, s3_bucket=S3_BUCKET) service = MagicPlanService(client=mock_client, s3_bucket=S3_BUCKET)
mock_session = MagicMock() mock_session = MagicMock()
with patch( with patch(
"backend.magic_plan.magic_plan_service.find_matching_plan", "orchestration.magic_plan_orchestrator.find_matching_plan",
return_value=plan_summary, return_value=plan_summary,
), patch("backend.magic_plan.magic_plan_service.save_plan"), patch( ), patch(
"backend.magic_plan.magic_plan_service.db_session" "orchestration.magic_plan_orchestrator.MagicPlanPostgresRepository"
), patch(
"orchestration.magic_plan_orchestrator.db_session"
) as mock_db, patch( ) 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 mock_db.return_value.__enter__.return_value = mock_session
# Act # Act
@ -276,7 +291,7 @@ def test_run_creates_uploaded_file_record(
assert uploaded_file.hubspot_deal_id == "deal-789" 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, mock_client: MagicMock,
plan_summary: PlanSummary, plan_summary: PlanSummary,
) -> None: ) -> None:
@ -294,18 +309,22 @@ def test_run_passes_flushed_uploaded_file_id_to_save_plan(
obj.id = 42 obj.id = 42
mock_session.flush.side_effect = simulate_flush mock_session.flush.side_effect = simulate_flush
mock_repo = MagicMock()
with patch( with patch(
"backend.magic_plan.magic_plan_service.find_matching_plan", "orchestration.magic_plan_orchestrator.find_matching_plan",
return_value=plan_summary, return_value=plan_summary,
), patch("backend.magic_plan.magic_plan_service.save_plan") as mock_save, patch( ), patch(
"backend.magic_plan.magic_plan_service.db_session" "orchestration.magic_plan_orchestrator.MagicPlanPostgresRepository",
return_value=mock_repo,
), patch(
"orchestration.magic_plan_orchestrator.db_session"
) as mock_db, patch( ) 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 mock_db.return_value.__enter__.return_value = mock_session
# Act # Act
service.run(_make_request()) service.run(_make_request())
# Assert # Assert — save called with the flushed uploaded_file_id
assert mock_save.call_args[0][2] == 42 assert mock_repo.save.call_args[0][1] == 42