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