Revision fc7747df7177f2f610c55c9709a81e7b0b618806 authored by Jochen Kupperschmidt on 03 January 2026, 00:21:02 UTC, committed by Jochen Kupperschmidt on 03 January 2026, 00:21:02 UTC
1 parent 2e587a4
test_order_state.py
"""
:Copyright: 2014-2025 Jochen Kupperschmidt
:License: Revised BSD (see `LICENSE` file for details)
"""
from datetime import datetime
from moneyed import EUR
import pytest
from byceps.services.shop.order import (
order_checkout_service,
order_helper_service,
)
from byceps.services.shop.order.models.checkout import IncomingOrder
from byceps.services.shop.order.models.number import OrderNumber
from byceps.services.shop.order.models.order import (
Order,
Orderer,
OrderID,
OrderState,
PaymentState,
)
from byceps.services.shop.shop.models import ShopID
from byceps.services.shop.storefront.models import StorefrontID
from tests.helpers import generate_uuid
PROCESSING_REQUIRED = True
PROCESSED = True
# fmt: off
@pytest.mark.parametrize(
('payment_state', 'processing_required', 'processed', 'expected'),
[
(PaymentState.open , not PROCESSING_REQUIRED, not PROCESSED, OrderState.open ),
(PaymentState.open , PROCESSING_REQUIRED, not PROCESSED, OrderState.open ),
(PaymentState.open , PROCESSING_REQUIRED, PROCESSED, OrderState.open ),
(PaymentState.canceled_before_paid, not PROCESSING_REQUIRED, not PROCESSED, OrderState.canceled),
(PaymentState.canceled_before_paid, PROCESSING_REQUIRED, not PROCESSED, OrderState.canceled),
(PaymentState.canceled_before_paid, PROCESSING_REQUIRED, PROCESSED, OrderState.canceled),
(PaymentState.canceled_after_paid , not PROCESSING_REQUIRED, not PROCESSED, OrderState.canceled),
(PaymentState.canceled_after_paid , PROCESSING_REQUIRED, not PROCESSED, OrderState.canceled),
(PaymentState.canceled_after_paid , PROCESSING_REQUIRED, PROCESSED, OrderState.canceled),
(PaymentState.paid , not PROCESSING_REQUIRED, not PROCESSED, OrderState.complete),
(PaymentState.paid , PROCESSING_REQUIRED, not PROCESSED, OrderState.open ),
(PaymentState.paid , PROCESSING_REQUIRED, PROCESSED, OrderState.complete),
],
)
# fmt: on
def test_order_state(
orderer: Orderer,
payment_state: PaymentState,
processing_required: bool,
processed: bool,
expected: OrderState,
):
order = create_order(orderer, payment_state, processing_required, processed)
assert order.state == expected
# helpers
def create_order(
orderer: Orderer,
payment_state: PaymentState,
processing_required: bool,
processed: bool,
) -> Order:
order_number = OrderNumber('ORDER-42')
created_at = datetime.utcnow()
incoming_order = IncomingOrder(
id=OrderID(generate_uuid()),
created_at=created_at,
shop_id=ShopID('shop-123'),
storefront_id=StorefrontID('storefront-123'),
orderer=orderer,
line_items=[],
total_amount=EUR.zero,
processing_required=processing_required,
)
db_order = order_checkout_service._build_db_order(
incoming_order, order_number
)
db_order.payment_state = payment_state
db_order.processing_required = incoming_order.processing_required
db_order.processed_at = created_at if processed else None
return order_helper_service.to_order(db_order, orderer.user)

Computing file changes ...