From 2d8f31d3d9e3b1dcb504bc5c2b5b454033ce806d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A0=D0=B0=D0=B8=D1=81=20=D0=AE=D1=81=D1=83=D0=BF=D0=B0?= =?UTF-8?q?=D0=BB=D0=B8=D0=B5=D0=B2?= Date: Fri, 26 Jun 2026 20:59:27 +0300 Subject: [PATCH] =?UTF-8?q?=D0=BE=D1=86=D0=B5=D0=BD=D0=BE=D1=87=D0=BD?= =?UTF-8?q?=D0=B0=D1=8F=20=D1=81=D1=82=D0=BE=D0=B8=D0=BC=D0=BE=D1=81=D1=82?= =?UTF-8?q?=D1=8C=20=D0=BE=D1=82=D0=BF=D1=80=D0=B0=D0=B2=D0=BB=D1=8F=D0=B5?= =?UTF-8?q?=D1=82=D1=81=D1=8F=20=D0=B2=20cdek?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../delivery_providers/cdek/order_mapper.py | 16 ++++++++++++++++ .../cdek/test_order_mapper.py | 17 +++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/app/adapters/delivery_providers/cdek/order_mapper.py b/app/adapters/delivery_providers/cdek/order_mapper.py index 8b3320f..ce911e9 100644 --- a/app/adapters/delivery_providers/cdek/order_mapper.py +++ b/app/adapters/delivery_providers/cdek/order_mapper.py @@ -20,6 +20,7 @@ class CDEKOrderMappingError(ValueError): _CDEK_WAYBILL_PRINT_TYPE = "WAYBILL" _CDEK_WAYBILL_RELATED_ENTITY_TYPE = "waybill" +_CDEK_INSURANCE_SERVICE_CODE = "INSURANCE" @dataclass(frozen=True) @@ -56,6 +57,9 @@ def map_cdek_order_request( "to_location": _map_location(request.receiver_address), "packages": [_map_package(request, order_uuid)], } + services = _map_services(request) + if services: + payload["services"] = services if request.content.description: payload["comment"] = request.content.description return payload @@ -328,6 +332,18 @@ def _map_package(request: InitPaymentRequest, order_uuid: str) -> dict[str, Any] return package +def _map_services(request: InitPaymentRequest) -> list[dict[str, Any]]: + declared_value = request.content.declared_value + if declared_value <= 0: + return [] + return [ + { + "code": _CDEK_INSURANCE_SERVICE_CODE, + "parameter": declared_value, + } + ] + + def _map_dimensions(dimensions: Dimensions) -> dict[str, int]: return { "length": centimeters_string_to_int(dimensions.length, "length"), diff --git a/tests/adapters/delivery_providers/cdek/test_order_mapper.py b/tests/adapters/delivery_providers/cdek/test_order_mapper.py index 3aea988..882f426 100644 --- a/tests/adapters/delivery_providers/cdek/test_order_mapper.py +++ b/tests/adapters/delivery_providers/cdek/test_order_mapper.py @@ -29,6 +29,23 @@ def test_order_payload_requests_waybill_print() -> None: assert payload["print"] == "WAYBILL" +def test_order_payload_maps_declared_value_to_insurance_service() -> None: + payload = map_cdek_order_request(make_init_payment_request(), "order-uuid-1") + + assert payload["services"] == [{"code": "INSURANCE", "parameter": 50000}] + + +def test_order_payload_omits_insurance_service_for_zero_declared_value() -> None: + payload = map_cdek_order_request( + make_init_payment_request( + content={"description": "Docs", "declared_value": 0} + ), + "order-uuid-1", + ) + + assert "services" not in payload + + def test_map_cdek_order_response_extracts_order_uuid_without_waybill() -> None: result = map_cdek_order_response({"entity": {"uuid": "cdek-order-uuid"}})