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
@@ -59,12 +59,12 @@ def _make_order_request(**overrides: object) -> OrderCreateRequest:
"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",
@@ -80,7 +80,7 @@ def _make_order_request(**overrides: object) -> OrderCreateRequest:
"packages": [
{
"number": "1",
"weight": 1000,
"weight": 1,
"length": 20,
"width": 15,
"height": 10,
@@ -160,6 +160,70 @@ def test_provider_register_order_posts_cdek_contract_payload_and_maps_response()
]
def test_provider_register_order_omits_services_when_none_and_converts_package_weights() -> None:
response = httpx.Response(
200,
json={"entity": {"uuid": "cdek-order-uuid"}},
request=httpx.Request("POST", "https://api.cdek.test/v2/orders"),
)
http_client = SequenceHTTPClient([response])
provider = CDEKProvider(
CDEKClient(
http_client=http_client, # type: ignore[arg-type]
auth_client=StubAuthClient(), # type: ignore[arg-type]
base_url="https://api.cdek.test/v2",
timeout_seconds=7.5,
retry_attempts=0,
)
)
request = _make_order_request(
services=None,
packages=[
{
"number": "1",
"weight": 1,
"length": 20,
"width": 15,
"height": 10,
"comment": "Package 1",
},
{
"number": "2",
"weight": 2,
"length": 25,
"width": 18,
"height": 12,
"comment": "Package 2",
},
],
)
asyncio.run(provider.register_order(request))
payload = http_client.calls[0]["json"]
assert "services" not in payload
assert payload["sender"]["phones"] == [{"number": "+79009876543"}]
assert payload["recipient"]["phones"] == [{"number": "+79001234567"}]
assert payload["packages"] == [
{
"number": "1",
"weight": 1000,
"length": 20,
"width": 15,
"height": 10,
"comment": "Package 1",
},
{
"number": "2",
"weight": 2000,
"length": 25,
"width": 18,
"height": 12,
"comment": "Package 2",
},
]
def test_cdek_client_register_order_maps_4xx_to_request_error() -> None:
rejected_response = httpx.Response(
422,