def test_shipped_orders_cannot_be_shipped_again(self): initialOrder = Order() initialOrder.set_id(1) initialOrder.set_status(OrderStatus.SHIPPED) self.order_repository.add_order(initialOrder) request = OrderShipmentRequest() request.set_order_id(1) assert_that( calling(self.use_case.run).with_args(request), raises(OrderCannotBeShippedTwiceError)) assert_that(self.order_repository.get_saved_order(), is_(none())) assert_that(self.shipment_service.get_shipped_order(), is_(none()))
def test_shipped_orders_cannot_be_rejected(self): initial_order = Order() initial_order.set_status(OrderStatus.SHIPPED) initial_order.set_id(1) self.order_repository.add_order(initial_order) request = OrderApprovalRequest() request.set_order_id(1) request.set_approved(False) assert_that( calling(self.use_case.run).with_args(request), raises(ShippedOrdersCannotBeChangedError)) assert_that(self.order_repository.get_saved_order(), is_(none()))
def test_cannot_approve_rejected_order(self): initial_order = Order() initial_order.set_status(OrderStatus.REJECTED) initial_order.set_id(1) self.order_repository.add_order(initial_order) request = OrderApprovalRequest() request.set_order_id(1) request.set_approved(True) assert_that( calling(self.use_case.run).with_args(request), raises(RejectedOrderCannotBeApprovedError)) assert_that(self.order_repository.get_saved_order(), is_(none()))
def test_rejected_existing_order(self): initial_order = Order() initial_order.set_status(OrderStatus.CREATED) initial_order.set_id(1) self.order_repository.add_order(initial_order) request = OrderApprovalRequest() request.set_order_id(1) request.set_approved(False) self.use_case.run(request) saved_order = self.order_repository.get_saved_order() assert_that(saved_order.get_status(), is_(OrderStatus.REJECTED))
def test_ship_approved_order(self): initial_order = Order() initial_order.set_id(1) initial_order.set_status(OrderStatus.APPROVED) self.order_repository.add_order(initial_order) request = OrderShipmentRequest() request.set_order_id(1) self.use_case.run(request) assert_that(self.order_repository.get_saved_order().get_status(), is_(OrderStatus.SHIPPED)) assert_that(self.shipment_service.get_shipped_order(), is_(initial_order))
def run(self, request: SellItemsRequest): order = Order() order.set_status(OrderStatus.CREATED) order.set_items([]) order.set_currency("EUR") order.set_total(Decimal("0.00")) order.set_tax(Decimal("0.00")) for item_request in request.get_requests(): product = self.product_catalog.get_by_name( item_request.get_product_name()) if product is None: raise UnknownProductError() else: unitary_tax = Decimal( product.get_price() / Decimal(100) * product.get_category().get_tax_percentage()).quantize( Decimal('0.01'), rounding=ROUND_HALF_UP) unitary_taxed_amount = Decimal(product.get_price() + unitary_tax).quantize( Decimal('0.01'), rounding=ROUND_HALF_UP) taxed_amount = Decimal( unitary_taxed_amount * Decimal(item_request.get_quantity())).quantize( Decimal('0.01'), rounding=ROUND_HALF_UP) tax_amount = unitary_tax * (Decimal( item_request.get_quantity())) orderItem = OrderItem() orderItem.set_product(product) orderItem.set_quantity(item_request.get_quantity()) orderItem.set_tax(tax_amount) orderItem.set_taxed_amount(taxed_amount) order.get_items().append(orderItem) order.set_total(order.get_total() + taxed_amount) order.set_tax(order.get_tax() + tax_amount) self.order_repository.save(order)