Добавлен заказ накладной
This commit is contained in:
@@ -10,6 +10,7 @@ from sqlalchemy.ext.asyncio import create_async_engine
|
||||
|
||||
from app.repositories.order import OrderData, OrderRepository
|
||||
from app.repositories.order.models import Base, Order
|
||||
from tests.payment_fixtures import make_init_payment_payload
|
||||
|
||||
|
||||
def _make_order_data(**overrides: object) -> OrderData:
|
||||
@@ -17,40 +18,9 @@ def _make_order_data(**overrides: object) -> OrderData:
|
||||
"order_uuid": "order-uuid-1",
|
||||
"payment_url": "https://pay.test/payment/1",
|
||||
"price": 125000,
|
||||
"delivery_type": 2,
|
||||
"tariff_code": 535,
|
||||
"comment": "Test payment",
|
||||
"sender": {
|
||||
"name": "Petr Petrov",
|
||||
"email": "sender@example.com",
|
||||
"phone": {"number": "+79009876543"},
|
||||
},
|
||||
"recipient": {
|
||||
"name": "Ivan Ivanov",
|
||||
"email": "ivan@example.com",
|
||||
"phone": {"number": "+79001234567"},
|
||||
},
|
||||
"from_location": {
|
||||
"address": "Lenina 1",
|
||||
"city": "Moscow",
|
||||
"country_code": "RU",
|
||||
},
|
||||
"to_location": {
|
||||
"address": "Pushkina 10",
|
||||
"city": "Novosibirsk",
|
||||
"country_code": "RU",
|
||||
},
|
||||
"services": [{"code": "INSURANCE", "parameter": "1000"}],
|
||||
"packages": [
|
||||
{
|
||||
"number": "1",
|
||||
"weight": 1,
|
||||
"length": 20,
|
||||
"width": 15,
|
||||
"height": 10,
|
||||
"comment": "Package 1",
|
||||
}
|
||||
],
|
||||
"account_email": "client@example.com",
|
||||
"payload": make_init_payment_payload(),
|
||||
}
|
||||
payload.update(overrides)
|
||||
return OrderData(**payload)
|
||||
@@ -92,46 +62,20 @@ def test_create_order_persists_all_required_fields() -> None:
|
||||
assert persisted_order.order_uuid == "order-uuid-1"
|
||||
assert persisted_order.payment_url == "https://pay.test/payment/1"
|
||||
assert persisted_order.price == 125000
|
||||
assert persisted_order.delivery_type == 2
|
||||
assert persisted_order.tariff_code == 535
|
||||
assert persisted_order.sender == order_data.sender
|
||||
assert persisted_order.recipient == order_data.recipient
|
||||
assert persisted_order.from_location == order_data.from_location
|
||||
assert persisted_order.to_location == order_data.to_location
|
||||
assert persisted_order.packages == order_data.packages
|
||||
assert persisted_order.services == order_data.services
|
||||
assert persisted_order.comment == "Test payment"
|
||||
assert persisted_order.account_email == "client@example.com"
|
||||
assert persisted_order.payload == order_data.payload
|
||||
assert persisted_order.payment_status is None
|
||||
assert persisted_order.tbank_payment_id is None
|
||||
assert persisted_order.cdek_order_uuid is None
|
||||
assert persisted_order.cdek_waybill_uuid is None
|
||||
assert persisted_order.cdek_waybill_url is None
|
||||
assert persisted_order.created_at is not None
|
||||
assert persisted_order.updated_at is not None
|
||||
|
||||
asyncio.run(_with_repository(run))
|
||||
|
||||
|
||||
def test_create_order_persists_nullable_services_and_comment() -> None:
|
||||
async def run(
|
||||
repository: OrderRepository,
|
||||
session_factory: async_sessionmaker[AsyncSession],
|
||||
) -> None:
|
||||
order_data = _make_order_data(services=None, comment=None)
|
||||
|
||||
async with repository.session() as session:
|
||||
await repository.create_order(session, order_data)
|
||||
|
||||
async with session_factory() as session:
|
||||
result = await session.execute(
|
||||
select(Order).where(Order.order_uuid == "order-uuid-1")
|
||||
)
|
||||
persisted_order = result.scalar_one()
|
||||
|
||||
assert persisted_order.services is None
|
||||
assert persisted_order.comment is None
|
||||
|
||||
asyncio.run(_with_repository(run))
|
||||
|
||||
|
||||
def test_create_order_rejects_duplicate_order_uuid() -> None:
|
||||
async def run(
|
||||
repository: OrderRepository,
|
||||
@@ -229,7 +173,7 @@ def test_mark_payment_status_returns_none_for_missing_order() -> None:
|
||||
asyncio.run(_with_repository(run))
|
||||
|
||||
|
||||
def test_mark_cdek_order_registered_persists_cdek_order_uuid() -> None:
|
||||
def test_mark_cdek_order_registered_persists_cdek_order_and_waybill() -> None:
|
||||
async def run(
|
||||
repository: OrderRepository,
|
||||
session_factory: async_sessionmaker[AsyncSession],
|
||||
@@ -242,6 +186,8 @@ def test_mark_cdek_order_registered_persists_cdek_order_uuid() -> None:
|
||||
session,
|
||||
"order-uuid-1",
|
||||
"cdek-order-uuid-1",
|
||||
"waybill-uuid-1",
|
||||
"https://cdek.test/waybill/1.pdf",
|
||||
)
|
||||
|
||||
async with session_factory() as session:
|
||||
@@ -252,6 +198,36 @@ def test_mark_cdek_order_registered_persists_cdek_order_uuid() -> None:
|
||||
|
||||
assert order is not None
|
||||
assert persisted_order.cdek_order_uuid == "cdek-order-uuid-1"
|
||||
assert persisted_order.cdek_waybill_uuid == "waybill-uuid-1"
|
||||
assert persisted_order.cdek_waybill_url == "https://cdek.test/waybill/1.pdf"
|
||||
|
||||
asyncio.run(_with_repository(run))
|
||||
|
||||
|
||||
def test_mark_cdek_order_registered_allows_missing_waybill_fields() -> None:
|
||||
async def run(
|
||||
repository: OrderRepository,
|
||||
session_factory: async_sessionmaker[AsyncSession],
|
||||
) -> None:
|
||||
async with repository.session() as session:
|
||||
await repository.create_order(session, _make_order_data())
|
||||
|
||||
async with repository.session() as session:
|
||||
await repository.mark_cdek_order_registered(
|
||||
session,
|
||||
"order-uuid-1",
|
||||
"cdek-order-uuid-1",
|
||||
)
|
||||
|
||||
async with session_factory() as session:
|
||||
result = await session.execute(
|
||||
select(Order).where(Order.order_uuid == "order-uuid-1")
|
||||
)
|
||||
persisted_order = result.scalar_one()
|
||||
|
||||
assert persisted_order.cdek_order_uuid == "cdek-order-uuid-1"
|
||||
assert persisted_order.cdek_waybill_uuid is None
|
||||
assert persisted_order.cdek_waybill_url is None
|
||||
|
||||
asyncio.run(_with_repository(run))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user