From 5b92c3130228b87ba23bbaf877bd329f1de67a07 Mon Sep 17 00:00:00 2001 From: Daniel Roth Date: Thu, 7 May 2026 12:38:09 +0000 Subject: [PATCH] =?UTF-8?q?validate=20magicplan=20trigger=20request=20base?= =?UTF-8?q?model=20object=20=F0=9F=9F=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/magic_plan/__init__.py | 0 .../magic_plan/magic_plan_trigger_request.py | 10 +++++ backend/magic_plan/tests/__init__.py | 0 .../tests/test_magic_plan_trigger_request.py | 40 +++++++++++++++++++ 4 files changed, 50 insertions(+) create mode 100644 backend/magic_plan/__init__.py create mode 100644 backend/magic_plan/magic_plan_trigger_request.py create mode 100644 backend/magic_plan/tests/__init__.py create mode 100644 backend/magic_plan/tests/test_magic_plan_trigger_request.py diff --git a/backend/magic_plan/__init__.py b/backend/magic_plan/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/backend/magic_plan/magic_plan_trigger_request.py b/backend/magic_plan/magic_plan_trigger_request.py new file mode 100644 index 00000000..bb0151e4 --- /dev/null +++ b/backend/magic_plan/magic_plan_trigger_request.py @@ -0,0 +1,10 @@ +from typing import Optional + +from pydantic import BaseModel, ConfigDict + + +class MagicPlanTriggerRequest(BaseModel): + model_config = ConfigDict(extra="ignore") + + address: str + uprn: Optional[str] = None diff --git a/backend/magic_plan/tests/__init__.py b/backend/magic_plan/tests/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/backend/magic_plan/tests/test_magic_plan_trigger_request.py b/backend/magic_plan/tests/test_magic_plan_trigger_request.py new file mode 100644 index 00000000..46a20a37 --- /dev/null +++ b/backend/magic_plan/tests/test_magic_plan_trigger_request.py @@ -0,0 +1,40 @@ +import pytest +from pydantic import ValidationError + +from backend.magic_plan.magic_plan_trigger_request import MagicPlanTriggerRequest + + +def test_valid_payload_with_address_only() -> None: + # Arrange + payload = {"address": "123 High St London SW1A 1AA"} + # Act + req = MagicPlanTriggerRequest.model_validate(payload) + # Assert + assert req.address == "123 High St London SW1A 1AA" + assert req.uprn is None + + +def test_valid_payload_with_uprn() -> None: + # Arrange + payload = {"address": "123 High St London SW1A 1AA", "uprn": "100023336956"} + # Act + req = MagicPlanTriggerRequest.model_validate(payload) + # Assert + assert req.uprn == "100023336956" + + +def test_missing_address_raises() -> None: + # Arrange + payload = {"uprn": "100023336956"} + # Act / Assert + with pytest.raises(ValidationError): + MagicPlanTriggerRequest.model_validate(payload) + + +def test_extra_fields_ignored() -> None: + # Arrange + payload = {"address": "123 High St London SW1A 1AA", "unknown_field": "whatever"} + # Act + req = MagicPlanTriggerRequest.model_validate(payload) + # Assert + assert req.address == "123 High St London SW1A 1AA"