mirror of
https://github.com/Hestia-Homes/Model.git
synced 2026-06-30 13:10:47 +00:00
correct magicplan orchestration tests
This commit is contained in:
parent
174ef26075
commit
09e31c2a98
7 changed files with 410325 additions and 40 deletions
|
|
@ -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)
|
||||||
|
|
|
||||||
136742
tests/magic_plan/magicplan_api_plan_response_example.json
Normal file
136742
tests/magic_plan/magicplan_api_plan_response_example.json
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
136742
tests/magic_plan/magicplan_api_plan_response_example_3.json
Normal file
136742
tests/magic_plan/magicplan_api_plan_response_example_3.json
Normal file
File diff suppressed because one or more lines are too long
136742
tests/magic_plan/magicplan_api_plan_response_example_4.json
Normal file
136742
tests/magic_plan/magicplan_api_plan_response_example_4.json
Normal file
File diff suppressed because one or more lines are too long
39
tests/magic_plan/magicplan_api_plans_response_example.json
Normal file
39
tests/magic_plan/magicplan_api_plans_response_example.json
Normal 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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue