fix order form

This commit is contained in:
Раис Юсупалиев
2026-04-11 00:36:37 +03:00
parent 18f7e251e3
commit ab0b66e1c2
9 changed files with 269 additions and 36 deletions
+74 -3
View File
@@ -39,12 +39,12 @@ def _valid_payload() -> dict[str, object]:
"sender": {
"name": "Petr Petrov",
"email": "sender@example.com",
"phones": [{"number": "+79009876543"}],
"phone": {"number": "+79009876543"},
},
"recipient": {
"name": "Ivan Ivanov",
"email": "ivan@example.com",
"phones": [{"number": "+79001234567"}],
"phone": {"number": "+79001234567"},
},
"from_location": {
"address": "Lenina 1",
@@ -60,7 +60,7 @@ def _valid_payload() -> dict[str, object]:
"packages": [
{
"number": "1",
"weight": 1000,
"weight": 1,
"length": 20,
"width": 15,
"height": 10,
@@ -136,6 +136,30 @@ def test_post_delivery_order_rejects_sender_company_field() -> None:
assert service.calls == []
def test_post_delivery_order_rejects_sender_phones_field() -> None:
service = StubAggregatorService(response=None)
app = create_app()
_install_service_override(app, service)
invalid_payload = _valid_payload()
invalid_payload["sender"] = {
**invalid_payload["sender"], # type: ignore[arg-type]
"phones": [{"number": "+79009876543"}],
}
async def run_request() -> httpx.Response:
transport = httpx.ASGITransport(app=app)
async with httpx.AsyncClient(
transport=transport,
base_url="http://testserver",
) as client:
return await client.post("/api/v1/delivery/order", json=invalid_payload)
response = asyncio.run(run_request())
assert response.status_code == 422
assert service.calls == []
def test_post_delivery_order_rejects_recipient_company_field() -> None:
service = StubAggregatorService(response=None)
app = create_app()
@@ -160,6 +184,53 @@ def test_post_delivery_order_rejects_recipient_company_field() -> None:
assert service.calls == []
def test_post_delivery_order_rejects_recipient_phones_field() -> None:
service = StubAggregatorService(response=None)
app = create_app()
_install_service_override(app, service)
invalid_payload = _valid_payload()
invalid_payload["recipient"] = {
**invalid_payload["recipient"], # type: ignore[arg-type]
"phones": [{"number": "+79001234567"}],
}
async def run_request() -> httpx.Response:
transport = httpx.ASGITransport(app=app)
async with httpx.AsyncClient(
transport=transport,
base_url="http://testserver",
) as client:
return await client.post("/api/v1/delivery/order", json=invalid_payload)
response = asyncio.run(run_request())
assert response.status_code == 422
assert service.calls == []
def test_post_delivery_order_accepts_request_without_services() -> None:
expected_response = OrderCreateResponse(provider="cdek", order_uuid="order-uuid-1")
service = StubAggregatorService(response=expected_response)
app = create_app()
_install_service_override(app, service)
payload = _valid_payload()
del payload["services"]
async def run_request() -> httpx.Response:
transport = httpx.ASGITransport(app=app)
async with httpx.AsyncClient(
transport=transport,
base_url="http://testserver",
) as client:
return await client.post("/api/v1/delivery/order", json=payload)
response = asyncio.run(run_request())
assert response.status_code == 200
assert response.json() == expected_response.model_dump(mode="json")
assert service.calls == [OrderCreateRequest(**payload)]
def test_post_delivery_order_maps_invalid_request_to_400() -> None:
service = StubAggregatorService(
response=None,