@@ -306,6 +306,16 @@ def _map_package(request: InitPaymentRequest, order_uuid: str) -> dict[str, Any]
|
||||
"number": order_uuid,
|
||||
"weight": weight_grams,
|
||||
"comment": description,
|
||||
"items": [
|
||||
{
|
||||
"name": description,
|
||||
"ware_key": order_uuid,
|
||||
"payment": {"value": 0},
|
||||
"cost": request.content.declared_value,
|
||||
"amount": 1,
|
||||
"weight": weight_grams,
|
||||
}
|
||||
],
|
||||
}
|
||||
if system_data.parcel_type == "parcel" and system_data.dimensions is not None:
|
||||
package.update(_map_dimensions(system_data.dimensions))
|
||||
|
||||
@@ -127,6 +127,7 @@ def map_cse_save_order_request(
|
||||
make_field("TypeOfCargo", resolve_type_of_cargo(system_data.parcel_type)),
|
||||
make_field("Weight", system_data.weight, "float"),
|
||||
make_field("CargoPackageQty", "1", "float"),
|
||||
make_field("CargoCost", str(request.content.declared_value), "float"),
|
||||
]
|
||||
if delivery_type:
|
||||
fields.append(make_field("DeliveryOfCargo", delivery_type))
|
||||
|
||||
@@ -75,6 +75,7 @@ class Contact(_CamelModel):
|
||||
|
||||
class Content(_CamelModel):
|
||||
description: str | None = None
|
||||
declared_value: int = Field(alias="declared_value", strict=True)
|
||||
|
||||
|
||||
class SystemDataTariff(_CamelModel):
|
||||
|
||||
@@ -143,7 +143,7 @@ def test_order_payload_for_parcel_includes_dimensions() -> None:
|
||||
|
||||
def test_order_payload_for_doc_omits_dimensions() -> None:
|
||||
request = make_init_payment_request(
|
||||
content={"description": "Docs"},
|
||||
content={"description": "Docs", "declared_value": 25000},
|
||||
systemData={
|
||||
"tariff": {
|
||||
"provider": "СДЭК",
|
||||
@@ -198,20 +198,33 @@ def test_order_payload_includes_company_requisites_for_legal_entity() -> None:
|
||||
assert sender["kpp"] == "770701001"
|
||||
|
||||
|
||||
def test_order_payload_propagates_description_to_comments_without_items() -> None:
|
||||
def test_order_payload_maps_content_to_comments_and_declared_value_item() -> None:
|
||||
payload = map_cdek_order_request(make_init_payment_request(), "order-uuid-1")
|
||||
|
||||
assert payload["comment"] == "Headphones"
|
||||
assert payload["packages"][0]["comment"] == "Headphones"
|
||||
assert "items" not in payload["packages"][0]
|
||||
assert payload["packages"][0]["items"] == [
|
||||
{
|
||||
"name": "Headphones",
|
||||
"ware_key": "order-uuid-1",
|
||||
"payment": {"value": 0},
|
||||
"cost": 50000,
|
||||
"amount": 1,
|
||||
"weight": 1000,
|
||||
}
|
||||
]
|
||||
|
||||
|
||||
def test_order_payload_falls_back_package_comment_to_order_uuid() -> None:
|
||||
payload = map_cdek_order_request(
|
||||
make_init_payment_request(content={"description": None}), "order-uuid-1"
|
||||
make_init_payment_request(
|
||||
content={"description": None, "declared_value": 50000}
|
||||
),
|
||||
"order-uuid-1",
|
||||
)
|
||||
|
||||
assert payload["packages"][0]["comment"] == "order-uuid-1"
|
||||
assert payload["packages"][0]["items"][0]["name"] == "order-uuid-1"
|
||||
|
||||
|
||||
def test_order_payload_includes_company_for_individual_sender_as_full_name() -> None:
|
||||
|
||||
@@ -124,7 +124,7 @@ def test_provider_get_payment_price_omits_dimensions_for_doc() -> None:
|
||||
)
|
||||
)
|
||||
request = make_init_payment_request(
|
||||
content={"description": "Docs"},
|
||||
content={"description": "Docs", "declared_value": 25000},
|
||||
systemData={
|
||||
"tariff": {
|
||||
"provider": "СДЭК",
|
||||
|
||||
@@ -276,6 +276,7 @@ def test_save_order_request_uses_selected_tariff_urgency() -> None:
|
||||
assert order.field_value("DeliveryOfCargo") == "ДоставкаДоДверей"
|
||||
assert order.field_value("Payer") == "payer-1"
|
||||
assert order.field_value("ShippingMethod") == "sm-1"
|
||||
assert order.field_value("CargoCost") == "50000"
|
||||
|
||||
|
||||
def test_application_error_in_response_raises_request_error() -> None:
|
||||
|
||||
@@ -164,6 +164,47 @@ def test_post_init_payment_rejects_non_integer_price() -> None:
|
||||
assert service.calls == []
|
||||
|
||||
|
||||
def test_post_init_payment_rejects_missing_declared_value() -> None:
|
||||
service = StubAggregatorService(response=None)
|
||||
app = create_app()
|
||||
_install_service_override(app, service)
|
||||
invalid_payload = make_init_payment_payload()
|
||||
del invalid_payload["content"]["declared_value"]
|
||||
|
||||
response = _post(app, invalid_payload)
|
||||
|
||||
assert response.status_code == 422
|
||||
assert service.calls == []
|
||||
|
||||
|
||||
def test_post_init_payment_rejects_non_integer_declared_value() -> None:
|
||||
service = StubAggregatorService(response=None)
|
||||
app = create_app()
|
||||
_install_service_override(app, service)
|
||||
invalid_payload = make_init_payment_payload()
|
||||
invalid_payload["content"]["declared_value"] = "50000"
|
||||
|
||||
response = _post(app, invalid_payload)
|
||||
|
||||
assert response.status_code == 422
|
||||
assert service.calls == []
|
||||
|
||||
|
||||
def test_post_init_payment_rejects_camel_case_declared_value() -> None:
|
||||
service = StubAggregatorService(response=None)
|
||||
app = create_app()
|
||||
_install_service_override(app, service)
|
||||
invalid_payload = make_init_payment_payload()
|
||||
invalid_payload["content"]["declaredValue"] = invalid_payload["content"].pop(
|
||||
"declared_value"
|
||||
)
|
||||
|
||||
response = _post(app, invalid_payload)
|
||||
|
||||
assert response.status_code == 422
|
||||
assert service.calls == []
|
||||
|
||||
|
||||
def test_post_init_payment_requires_company_fields_when_is_company_true() -> None:
|
||||
service = StubAggregatorService(response=None)
|
||||
app = create_app()
|
||||
|
||||
@@ -49,6 +49,7 @@ def make_init_payment_payload(**overrides: Any) -> dict[str, Any]:
|
||||
},
|
||||
"content": {
|
||||
"description": "Headphones",
|
||||
"declared_value": 50000,
|
||||
},
|
||||
"pickupDate": "2026-05-15T10:00:00.000Z",
|
||||
"deliveryDate": "2026-05-18T18:00:00.000Z",
|
||||
|
||||
Reference in New Issue
Block a user