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"