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": []})