This commit is contained in:
@@ -10,6 +10,8 @@ from app.services.waybill_email_sender import WaybillEmailSenderService
|
||||
class StoredOrder:
|
||||
order_uuid: str
|
||||
account_email: str
|
||||
provider: str = "cdek"
|
||||
provider_waybill_id: str | None = None
|
||||
provider_waybill_url: str | None = None
|
||||
waybill_email_sent_at: datetime | None = None
|
||||
|
||||
@@ -41,7 +43,10 @@ class StubRepository:
|
||||
return [
|
||||
order
|
||||
for order in self._orders.values()
|
||||
if order.provider_waybill_url is not None
|
||||
if (
|
||||
order.provider_waybill_url is not None
|
||||
or order.provider_waybill_id is not None
|
||||
)
|
||||
and order.waybill_email_sent_at is None
|
||||
]
|
||||
|
||||
@@ -68,9 +73,11 @@ class StubDownloader:
|
||||
self._results = results
|
||||
self.calls: list[str] = []
|
||||
|
||||
async def download_waybill_pdf(self, url: str) -> bytes:
|
||||
self.calls.append(url)
|
||||
result = self._results[url]
|
||||
async def download_waybill_pdf(self, order: StoredOrder) -> bytes:
|
||||
locator = order.provider_waybill_url or order.provider_waybill_id
|
||||
assert locator is not None
|
||||
self.calls.append(locator)
|
||||
result = self._results[locator]
|
||||
if isinstance(result, Exception):
|
||||
raise result
|
||||
return result
|
||||
@@ -114,7 +121,7 @@ def _make_service(
|
||||
) -> WaybillEmailSenderService:
|
||||
return WaybillEmailSenderService(
|
||||
order_repository=repository,
|
||||
waybill_downloader=downloader or StubDownloader({}),
|
||||
waybill_downloaders={"cdek": downloader or StubDownloader({})},
|
||||
email_sender=email_sender or StubEmailSender(),
|
||||
batch_size=10,
|
||||
datetime_now=lambda: _SENT_AT,
|
||||
@@ -151,6 +158,35 @@ def test_poll_once_downloads_pdf_sends_email_and_marks_sent() -> None:
|
||||
assert order.waybill_email_sent_at == _SENT_AT
|
||||
|
||||
|
||||
def test_poll_once_sends_cse_waybill_pdf_without_url() -> None:
|
||||
order = StoredOrder(
|
||||
order_uuid="o-1",
|
||||
provider="cse",
|
||||
account_email="client@example.com",
|
||||
provider_waybill_id="496-AA-1676378",
|
||||
)
|
||||
repo = StubRepository([order])
|
||||
downloader = StubDownloader({"496-AA-1676378": b"%PDF"})
|
||||
email_sender = StubEmailSender()
|
||||
service = WaybillEmailSenderService(
|
||||
order_repository=repo,
|
||||
waybill_downloaders={"cse": downloader},
|
||||
email_sender=email_sender,
|
||||
batch_size=10,
|
||||
datetime_now=lambda: _SENT_AT,
|
||||
)
|
||||
|
||||
summary = asyncio.run(service.poll_once())
|
||||
|
||||
assert summary.processed == 1
|
||||
assert summary.succeeded == 1
|
||||
assert downloader.calls == ["496-AA-1676378"]
|
||||
assert len(email_sender.calls) == 1
|
||||
assert "https://" not in email_sender.calls[0]["body"]
|
||||
assert email_sender.calls[0]["attachment_bytes"] == b"%PDF"
|
||||
assert order.waybill_email_sent_at == _SENT_AT
|
||||
|
||||
|
||||
def test_poll_once_download_error_keeps_order_pending_and_skips_send() -> None:
|
||||
order = StoredOrder(
|
||||
order_uuid="o-1",
|
||||
|
||||
Reference in New Issue
Block a user