@@ -173,7 +173,14 @@ def _latest_status_code(statuses: object) -> str | None:
|
|||||||
|
|
||||||
|
|
||||||
def _extract_waybill(payload: dict[str, Any]) -> tuple[str | None, str | None]:
|
def _extract_waybill(payload: dict[str, Any]) -> tuple[str | None, str | None]:
|
||||||
related_entities = payload.get("related_entities")
|
entity = payload.get("entity")
|
||||||
|
related_entities = (
|
||||||
|
entity.get("related_entities")
|
||||||
|
if isinstance(entity, dict)
|
||||||
|
else None
|
||||||
|
)
|
||||||
|
if not isinstance(related_entities, list):
|
||||||
|
related_entities = payload.get("related_entities")
|
||||||
if not isinstance(related_entities, list):
|
if not isinstance(related_entities, list):
|
||||||
return None, None
|
return None, None
|
||||||
for entry in related_entities:
|
for entry in related_entities:
|
||||||
|
|||||||
@@ -64,10 +64,10 @@ def test_get_order_parses_status_and_waybill_uuid() -> None:
|
|||||||
"statuses": [
|
"statuses": [
|
||||||
{"code": "ACCEPTED", "date_time": "2026-05-24T10:00:00+0000"}
|
{"code": "ACCEPTED", "date_time": "2026-05-24T10:00:00+0000"}
|
||||||
],
|
],
|
||||||
|
"related_entities": [
|
||||||
|
{"type": "waybill", "uuid": "waybill-uuid-1"}
|
||||||
|
],
|
||||||
},
|
},
|
||||||
"related_entities": [
|
|
||||||
{"type": "waybill", "uuid": "waybill-uuid-1"}
|
|
||||||
],
|
|
||||||
},
|
},
|
||||||
request=httpx.Request("GET", "https://api.cdek.test/v2/orders/cdek-order-uuid"),
|
request=httpx.Request("GET", "https://api.cdek.test/v2/orders/cdek-order-uuid"),
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -42,15 +42,17 @@ def test_map_cdek_order_response_extracts_order_uuid_without_waybill() -> None:
|
|||||||
def test_map_cdek_order_response_extracts_waybill_from_related_entities() -> None:
|
def test_map_cdek_order_response_extracts_waybill_from_related_entities() -> None:
|
||||||
result = map_cdek_order_response(
|
result = map_cdek_order_response(
|
||||||
{
|
{
|
||||||
"entity": {"uuid": "cdek-order-uuid"},
|
"entity": {
|
||||||
"related_entities": [
|
"uuid": "cdek-order-uuid",
|
||||||
{"type": "delivery", "uuid": "ignored"},
|
"related_entities": [
|
||||||
{
|
{"type": "delivery", "uuid": "ignored"},
|
||||||
"type": "waybill",
|
{
|
||||||
"uuid": "waybill-uuid-1",
|
"type": "waybill",
|
||||||
"url": "https://cdek.test/waybill/1.pdf",
|
"uuid": "waybill-uuid-1",
|
||||||
},
|
"url": "https://cdek.test/waybill/1.pdf",
|
||||||
],
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -61,6 +63,26 @@ def test_map_cdek_order_response_extracts_waybill_from_related_entities() -> Non
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def test_map_cdek_order_response_supports_root_related_entities() -> None:
|
||||||
|
result = map_cdek_order_response(
|
||||||
|
{
|
||||||
|
"entity": {"uuid": "cdek-order-uuid"},
|
||||||
|
"related_entities": [
|
||||||
|
{
|
||||||
|
"type": "waybill",
|
||||||
|
"uuid": "waybill-uuid-legacy",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
assert result == CDEKOrderRegistrationResult(
|
||||||
|
order_uuid="cdek-order-uuid",
|
||||||
|
waybill_uuid="waybill-uuid-legacy",
|
||||||
|
waybill_url=None,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def test_map_cdek_existing_order_response_returns_waybill_for_duplicate() -> None:
|
def test_map_cdek_existing_order_response_returns_waybill_for_duplicate() -> None:
|
||||||
result = map_cdek_existing_order_response(
|
result = map_cdek_existing_order_response(
|
||||||
{
|
{
|
||||||
@@ -224,10 +246,10 @@ def test_map_cdek_order_info_response_picks_latest_status_by_date_time() -> None
|
|||||||
{"code": "ACCEPTED", "date_time": "2026-05-24T10:00:00+0000"},
|
{"code": "ACCEPTED", "date_time": "2026-05-24T10:00:00+0000"},
|
||||||
{"code": "INVALID", "date_time": "2026-05-24T10:00:05+0000"},
|
{"code": "INVALID", "date_time": "2026-05-24T10:00:05+0000"},
|
||||||
],
|
],
|
||||||
|
"related_entities": [
|
||||||
|
{"type": "waybill", "uuid": "waybill-uuid-1"}
|
||||||
|
],
|
||||||
},
|
},
|
||||||
"related_entities": [
|
|
||||||
{"type": "waybill", "uuid": "waybill-uuid-1"}
|
|
||||||
],
|
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user