017 fix returning all tariffs

This commit is contained in:
Раис Юсупалиев
2026-03-16 00:05:10 +03:00
parent 9b9cca0a7c
commit 54160a0e38
11 changed files with 188 additions and 81 deletions
@@ -1,4 +1,5 @@
import asyncio
from decimal import Decimal
from typing import Any
import httpx
@@ -134,6 +135,13 @@ class RecordingHTTPClient:
"currency": "RUB",
"period_min": 1,
"period_max": 2,
},
{
"tariff_name": "Economy",
"delivery_sum": "499.00",
"currency": "RUB",
"period_min": 3,
"period_max": 5,
}
]
},
@@ -341,13 +349,15 @@ observability:
adapter_config=settings.adapter,
)
result = asyncio.run(provider.get_price(_make_request()))
result = asyncio.run(provider.get_prices(_make_request()))
assert provider.cache_ttl_seconds == 777
assert http_client.auth_timeouts == [7.5]
assert http_client.city_lookup_timeouts == [7.5, 7.5]
assert http_client.tariff_timeouts == [7.5]
assert result.provider == "cdek"
assert [price.provider for price in result] == ["cdek", "cdek"]
assert [price.service_name for price in result] == ["Express", "Economy"]
assert [price.price for price in result] == [Decimal("899.00"), Decimal("499.00")]
def test_provider_uses_default_adapter_timeout_and_cache_ttl() -> None:
@@ -361,9 +371,10 @@ def test_provider_uses_default_adapter_timeout_and_cache_ttl() -> None:
adapter_config=adapter_config,
)
asyncio.run(provider.get_price(_make_request()))
result = asyncio.run(provider.get_prices(_make_request()))
assert provider.cache_ttl_seconds == 900
assert http_client.auth_timeouts == [10.0]
assert http_client.city_lookup_timeouts == [10.0, 10.0]
assert http_client.tariff_timeouts == [10.0]
assert len(result) == 2
@@ -5,8 +5,9 @@ import pytest
from app.adapters.delivery_providers.cdek.mapper import CDEKMappingError, map_cdek_response
def test_map_cdek_response_maps_first_tariff_to_unified_model() -> None:
def test_map_cdek_response_maps_all_tariffs_to_unified_model() -> None:
payload = {
"currency": "usd",
"tariff_codes": [
{
"tariff_name": "Express",
@@ -14,18 +15,24 @@ def test_map_cdek_response_maps_first_tariff_to_unified_model() -> None:
"currency": "rub",
"period_min": 2,
"period_max": 4,
},
{
"tariff_code": 136,
"delivery_sum": "999.00",
"period_min": 5,
"period_max": 7,
}
]
}
result = map_cdek_response(payload)
assert result.provider == "cdek"
assert result.service_name == "Express"
assert result.price == Decimal("1234.50")
assert result.currency == "RUB"
assert result.delivery_days_min == 2
assert result.delivery_days_max == 4
assert [price.provider for price in result] == ["cdek", "cdek"]
assert [price.service_name for price in result] == ["Express", "136"]
assert [price.price for price in result] == [Decimal("1234.50"), Decimal("999.00")]
assert [price.currency for price in result] == ["RUB", "USD"]
assert [price.delivery_days_min for price in result] == [2, 5]
assert [price.delivery_days_max for price in result] == [4, 7]
def test_map_cdek_response_raises_for_missing_tariff_codes() -> None: