mirror of
https://github.com/Hestia-Homes/Model.git
synced 2026-06-08 11:17:27 +00:00
validate plans api response as pydantic basemodel object 🟥
This commit is contained in:
parent
66fc048c93
commit
79db1e2c7e
2 changed files with 61 additions and 1 deletions
39
backend/magic_plan/magicplan_api_plans_response_example.json
Normal file
39
backend/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"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue