Files

61 lines
1.8 KiB
Python

from decimal import Decimal
import pytest
from app.adapters.delivery_providers.cdek.mapper import CDEKMappingError, map_cdek_response
def test_map_cdek_response_maps_all_tariffs_to_unified_model() -> None:
payload = {
"currency": "usd",
"tariff_codes": [
{
"tariff_code": 7,
"tariff_name": "Express",
"delivery_sum": "1234.50",
"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 [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]
assert [price.tariff_code for price in result] == ["7", "136"]
def test_map_cdek_response_returns_none_tariff_code_when_missing() -> None:
payload = {
"tariff_codes": [
{
"tariff_name": "Express",
"delivery_sum": "100.00",
"currency": "RUB",
"period_min": 1,
"period_max": 2,
}
]
}
result = map_cdek_response(payload)
assert result[0].tariff_code is None
def test_map_cdek_response_raises_for_missing_tariff_codes() -> None:
with pytest.raises(CDEKMappingError):
map_cdek_response({"tariff_codes": []})