add cse logs
Deploy / deploy (push) Successful in 58s

This commit is contained in:
Раис Юсупалиев
2026-06-27 17:56:03 +03:00
parent 4262b8a200
commit a2d9a243f7
5 changed files with 103 additions and 11 deletions
@@ -7,6 +7,7 @@ import pytest
from app.adapters.delivery_providers.cse import (
CSEClient,
CSEClientError,
CSEProvider,
CSERequestError,
)
@@ -314,6 +315,37 @@ def test_build_envelope_contains_credentials_and_payload() -> None:
assert "geo-2" in text
def test_save_order_envelope_serializes_properties_before_fields() -> None:
body = order_mapper.map_cse_save_order_request(
make_init_payment_request(
systemData={
"tariff": {
"provider": "cse",
"serviceName": "Экспресс",
"price": 200000,
"deliveryDaysMin": 1,
"deliveryDaysMax": 2,
"tariffCode": "ДоставкаДоДверей|tariff-guid-2|urg-exp",
},
"parcelType": "parcel",
"weight": "1.0",
"dimensions": {"length": "10", "width": "10", "height": "10"},
}
),
"order-uuid-1",
_params(),
)
text = build_envelope(
"SaveDocuments", login="test", password="2016", body=body
).decode("utf-8")
order_start = text.index("<m:Key>Order</m:Key>")
properties_index = text.index("<m:Properties>", order_start)
fields_index = text.index("<m:Fields>", order_start)
assert properties_index < fields_index
def test_parse_calc_response_round_trip() -> None:
root = parse_response(_CALC_RESPONSE, "Calc")
assert root.key == "Calc"
@@ -580,3 +612,59 @@ def test_application_error_in_response_raises_request_error() -> None:
with pytest.raises(CSERequestError):
asyncio.run(provider.get_prices(_calc_request()))
def test_server_error_logs_response_excerpt(monkeypatch: pytest.MonkeyPatch) -> None:
warning_calls: list[dict[str, Any]] = []
def capture_warning(event: str, **kwargs: Any) -> None:
warning_calls.append({"event": event, **kwargs})
monkeypatch.setattr(
"app.adapters.delivery_providers.cse.client.log.warning",
capture_warning,
)
response = httpx.Response(
500,
text="<fault>\n CSE rejected SaveDocuments because field X is invalid \n</fault>",
)
client, _ = _build_client([response])
provider = CSEProvider(client)
with pytest.raises(CSEClientError):
asyncio.run(
provider.register_order(
make_init_payment_request(
systemData={
"tariff": {
"provider": "cse",
"serviceName": "Экспресс",
"price": 200000,
"deliveryDaysMin": 1,
"deliveryDaysMax": 2,
"tariffCode": "ДоставкаДоДверей|tariff-guid-2|urg-exp",
},
"parcelType": "parcel",
"weight": "1.0",
"dimensions": {
"length": "10",
"width": "10",
"height": "10",
},
}
),
"order-uuid-1",
)
)
assert warning_calls == [
{
"event": "cse_request_server_error",
"operation": "SaveDocuments",
"status_code": 500,
"response_excerpt": (
"<fault> CSE rejected SaveDocuments because field X is invalid "
"</fault>"
),
}
]