validate plans api response as pydantic basemodel object 🟥

This commit is contained in:
Daniel Roth 2026-05-07 12:22:04 +00:00
parent 66fc048c93
commit 79db1e2c7e
2 changed files with 61 additions and 1 deletions

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

@ -4,7 +4,7 @@ from typing import Any
import pytest
from datatypes.magicplan.api.response import MagicPlan
from datatypes.magicplan.api.response import MagicPlan, PlansListResponse
FIXTURE_DIR = Path(__file__).parents[4] / "backend" / "magic_plan"
PLAN_ID = "a7285ed1-878d-47eb-8aa6-85ef9e187516"
@ -84,3 +84,24 @@ def test_extra_fields_ignored(raw_data: dict[str, Any]):
data_with_extra = {**raw_data, "unknown_future_field": "whatever"}
# act
MagicPlan.model_validate(data_with_extra)
# --- PlansListResponse ---
@pytest.fixture(scope="module")
def plans_raw_data() -> dict[str, Any]:
payload = json.loads(
(FIXTURE_DIR / "magicplan_api_plans_response_example.json").read_text()
)
return payload["data"]
@pytest.fixture(scope="module")
def plans_response(plans_raw_data: dict[str, Any]) -> PlansListResponse:
return PlansListResponse.model_validate(plans_raw_data)
def test_plans_list_model_validate_does_not_raise(plans_raw_data: dict[str, Any]) -> None:
# act
PlansListResponse.model_validate(plans_raw_data)