Убрал company из sender и recipient
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
|
||||
from typing import Literal
|
||||
|
||||
from pydantic import BaseModel, Field
|
||||
from pydantic import BaseModel, Field, model_validator
|
||||
|
||||
|
||||
class OrderPhone(BaseModel):
|
||||
@@ -10,11 +10,17 @@ class OrderPhone(BaseModel):
|
||||
|
||||
|
||||
class OrderParty(BaseModel):
|
||||
company: str | None = None
|
||||
name: str = Field(min_length=1)
|
||||
email: str = Field(min_length=1)
|
||||
phones: list[OrderPhone] = Field(min_length=1)
|
||||
|
||||
@model_validator(mode="before")
|
||||
@classmethod
|
||||
def reject_company_field(cls, value: object) -> object:
|
||||
if isinstance(value, dict) and "company" in value:
|
||||
raise ValueError("company is not allowed")
|
||||
return value
|
||||
|
||||
|
||||
class OrderLocation(BaseModel):
|
||||
address: str = Field(min_length=1)
|
||||
|
||||
@@ -22,7 +22,6 @@ Content-Type: application/json
|
||||
"tariff_code": 535,
|
||||
"comment": "Тестовый заказ",
|
||||
"sender": {
|
||||
"company": "ООО Ромашка",
|
||||
"name": "Петр Петров",
|
||||
"email": "sender@example.com",
|
||||
"phones": [
|
||||
|
||||
+3
-3
@@ -31,10 +31,10 @@
|
||||
| 022 | DONE | 2026-03-25 | Add address suggestion endpoint | `spec/tasks/022_add_address_suggestion_endpoint.md` |
|
||||
| 023 | DONE | 2026-03-29 | Add Yandex Geosuggest address suggestion adapter and CIS routing | `spec/tasks/023_add_yandex_geosuggest_address_suggestion_adapter.md` |
|
||||
| 024 | DONE | 2026-03-29 | Add TomTom address suggestion adapter and Europe routing | `spec/tasks/024_add_tomtom_address_suggestion_adapter.md` |
|
||||
| 025 | TODO | 2026-04-03 | Remove company from Create Delivery Order parties | `spec/tasks/025_remove_company_from_create_delivery_order.md` |
|
||||
| 025 | DONE | 2026-04-03 | Remove company from Create Delivery Order parties | `spec/tasks/025_remove_company_from_create_delivery_order.md` |
|
||||
|
||||
## Summary
|
||||
|
||||
- Total: **26**
|
||||
- TODO: **1**
|
||||
- DONE: **25**
|
||||
- TODO: **0**
|
||||
- DONE: **26**
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
---
|
||||
id: 025
|
||||
title: Remove company from Create Delivery Order parties
|
||||
status: TODO
|
||||
status: DONE
|
||||
created: 2026-04-03
|
||||
---
|
||||
|
||||
|
||||
@@ -57,7 +57,6 @@ def _make_order_request(**overrides: object) -> OrderCreateRequest:
|
||||
"tariff_code": 535,
|
||||
"comment": "Test order",
|
||||
"sender": {
|
||||
"company": "Romashka LLC",
|
||||
"name": "Petr Petrov",
|
||||
"email": "sender@example.com",
|
||||
"phones": [{"number": "+79009876543"}],
|
||||
@@ -123,7 +122,6 @@ def test_provider_register_order_posts_cdek_contract_payload_and_maps_response()
|
||||
"tariff_code": 535,
|
||||
"comment": "Test order",
|
||||
"sender": {
|
||||
"company": "Romashka LLC",
|
||||
"name": "Petr Petrov",
|
||||
"email": "sender@example.com",
|
||||
"phones": [{"number": "+79009876543"}],
|
||||
|
||||
@@ -37,7 +37,6 @@ def _valid_payload() -> dict[str, object]:
|
||||
"tariff_code": 535,
|
||||
"comment": "Test order",
|
||||
"sender": {
|
||||
"company": "Romashka LLC",
|
||||
"name": "Petr Petrov",
|
||||
"email": "sender@example.com",
|
||||
"phones": [{"number": "+79009876543"}],
|
||||
@@ -113,6 +112,54 @@ def test_post_delivery_order_rejects_invalid_payload() -> None:
|
||||
assert service.calls == []
|
||||
|
||||
|
||||
def test_post_delivery_order_rejects_sender_company_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]
|
||||
"company": "Romashka LLC",
|
||||
}
|
||||
|
||||
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()
|
||||
_install_service_override(app, service)
|
||||
invalid_payload = _valid_payload()
|
||||
invalid_payload["recipient"] = {
|
||||
**invalid_payload["recipient"], # type: ignore[arg-type]
|
||||
"company": "Romashka LLC",
|
||||
}
|
||||
|
||||
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_maps_invalid_request_to_400() -> None:
|
||||
service = StubAggregatorService(
|
||||
response=None,
|
||||
|
||||
@@ -37,7 +37,6 @@ def _make_order_request(**overrides: object) -> OrderCreateRequest:
|
||||
"tariff_code": 535,
|
||||
"comment": "Test order",
|
||||
"sender": {
|
||||
"company": "Romashka LLC",
|
||||
"name": "Petr Petrov",
|
||||
"email": "sender@example.com",
|
||||
"phones": [{"number": "+79009876543"}],
|
||||
|
||||
Reference in New Issue
Block a user