This commit is contained in:
@@ -7,12 +7,14 @@ from app.adapters.delivery_providers.cdek.order_mapper import (
|
||||
CDEKOrderInfo,
|
||||
CDEKWaybillInfo,
|
||||
)
|
||||
from app.adapters.delivery_providers.cse.order_mapper import CSEOrderInfo
|
||||
from app.services.waybill_poller import WaybillPollerService
|
||||
|
||||
|
||||
@dataclass
|
||||
class StoredOrder:
|
||||
order_uuid: str
|
||||
provider: str = "cdek"
|
||||
provider_order_id: str | None = None
|
||||
provider_order_status: str | None = None
|
||||
provider_waybill_id: str | None = None
|
||||
@@ -129,6 +131,9 @@ class StubWaybillInfoAdapter:
|
||||
|
||||
|
||||
_POLLED_AT = datetime(2026, 5, 24, 12, 0, tzinfo=timezone.utc)
|
||||
_CSE_WAYBILL_CREATED_STATUS = (
|
||||
"На основании заказа оформлена накладная."
|
||||
)
|
||||
|
||||
|
||||
def _make_service(
|
||||
@@ -139,8 +144,8 @@ def _make_service(
|
||||
) -> WaybillPollerService:
|
||||
return WaybillPollerService(
|
||||
order_repository=repository,
|
||||
order_info_adapter=order_info or StubOrderInfoAdapter({}),
|
||||
waybill_info_adapter=waybill_info or StubWaybillInfoAdapter({}),
|
||||
order_info_adapters={"cdek": order_info or StubOrderInfoAdapter({})},
|
||||
waybill_info_adapters={"cdek": waybill_info or StubWaybillInfoAdapter({})},
|
||||
batch_size=10,
|
||||
datetime_now=lambda: _POLLED_AT,
|
||||
)
|
||||
@@ -194,6 +199,39 @@ def test_poll_once_fetches_waybill_info_when_waybill_uuid_is_present() -> None:
|
||||
assert order.provider_polled_at == _POLLED_AT
|
||||
|
||||
|
||||
def test_poll_once_fetches_cse_waybill_number_from_order_tracking() -> None:
|
||||
order = StoredOrder(
|
||||
order_uuid="o",
|
||||
provider="cse",
|
||||
provider_order_id="CSE-000123",
|
||||
)
|
||||
repo = StubRepository([order])
|
||||
order_info = StubOrderInfoAdapter(
|
||||
{
|
||||
"CSE-000123": CSEOrderInfo(
|
||||
order_number="CSE-000123",
|
||||
status_code=_CSE_WAYBILL_CREATED_STATUS,
|
||||
waybill_number="496-AA-1676378",
|
||||
)
|
||||
}
|
||||
)
|
||||
service = WaybillPollerService(
|
||||
order_repository=repo,
|
||||
order_info_adapters={"cse": order_info},
|
||||
waybill_info_adapters={},
|
||||
batch_size=10,
|
||||
datetime_now=lambda: _POLLED_AT,
|
||||
)
|
||||
|
||||
summary = asyncio.run(service.poll_once())
|
||||
|
||||
assert summary.processed == 1 and summary.succeeded == 1 and summary.failed == 0
|
||||
assert order_info.calls == ["CSE-000123"]
|
||||
assert order.provider_order_status == _CSE_WAYBILL_CREATED_STATUS
|
||||
assert order.provider_waybill_id == "496-AA-1676378"
|
||||
assert order.provider_polled_at == _POLLED_AT
|
||||
|
||||
|
||||
def test_poll_once_records_terminal_status_without_waybill() -> None:
|
||||
order = StoredOrder(order_uuid="o", provider_order_id="cdek-o")
|
||||
repo = StubRepository([order])
|
||||
|
||||
Reference in New Issue
Block a user