def test_order_with_varied_line_items(self): order = OrderFactory.build() order.add_line_item("PROD000", 1, 100.00, 0.10) order.add_line_item("PROD001", 1, 10.00, 0.00) self.assertEquals(2, len(order.line_items), "Both line items were not added correctly") self.assertEquals(100.00, order.total_amount(), "Incorrect order amount calculated")
def test_order_adds_line_item(self): order = OrderFactory.build() order.add_line_item("PROD000", 1, 100.00, 0.10) self.assertEquals(1, len(order.line_items), "Line item was not added to order correctly") self.assertEquals(90.00, order.total_amount(), "Incorrect order amount calculated")
def test_order_is_accepted(self): order = OrderFactory.build() self.assertIsNotNone(order.order_id, "Order ID was not set") self.assertIsNotNone(order.order_date, "Order date was not set") self.assertFalse(order.is_acknowledged(), "Order should not have been acknowledged") order.acknowledge(datetime.now()) self.assertTrue(order.is_acknowledged(), "Order should not have been acknowledged")
def test_order_with_invalid_discount_line_item(self): order = OrderFactory.build() order.add_line_item("PROD000", 1, 1.00, 2.0) # 200% discount self.assertEquals(0.0, order.total_amount(), "Order amount should be zero, not negative")
def setUp(self): customer = CustomerFactory.build(name="Customer") customer.orders = ["ORD001", "ORD002", "ORD00X"] self.customer_repository = Mock() self.customer_repository.find = Mock(return_value=customer) tax_rate = Mock() tax_rate.rate = 0.1 self.tax_repository = Mock() self.tax_repository.find = Mock(return_value=tax_rate) order1 = OrderFactory.build(order_id="ORD001", customer_reference="CUST-PO001") order1.customer = "Customer" order1.add_line_item("PROD001", 1, 100.00, 0.10) order1.add_line_item("PROD002", 3, 10.00, 0.00) order1.is_acknowledged = Mock(return_value=True) order2 = OrderFactory.build(order_id="ORD002", customer_reference="CUST-PO002") order2.customer = "Customer" order2.add_line_item("PROD001", 2, 100.00, 0.10) order2.add_line_item("PROD002", 4, 10.00, 0.00) order2.is_acknowledged = Mock(return_value=True) order3 = OrderFactory.build(order_id="ORD003", customer_reference="CUST-PO003") order3.customer = "Customer" order3.add_line_item("PROD004", 1, 100.00, 0.10) order3.is_acknowledged = Mock(return_value=True) orderx = OrderFactory.build(order_id="ORD00X", customer_reference="CUST-PO00X") orderx.customer = "Fake Customer" orderx.is_acknowledged = Mock(return_value=False) self.orders = { "ORD001": order1, "ORD002": order2, "ORD003": order3, "ORD00X": orderx, # An unacknowledged order with bad customer } self.order_repository = Mock() self.order_repository.find = Mock(side_effect=lambda order_id: self.orders.get(order_id)) prod1 = InventoryItemFactory.build(sku="PROD001") prod1.enter_stock_on_hand(10) prod1.commit(1, "ORD001") prod1.commit(2, "ORD002") prod2 = InventoryItemFactory.build(sku="PROD002") prod2.enter_stock_on_hand(10) prod2.commit(3, "ORD001") prod2.commit(4, "ORD002") # Product with no commitments prod3 = InventoryItemFactory.build(sku="PROD003") prod3.enter_stock_on_hand(10) # Always failing commitment fulfillment prod4 = InventoryItemFactory.build(sku="PROD004") prod4.enter_stock_on_hand(10) prod4.commit(3, "ORD003") prod4.fulfill_commitment = Mock(side_effect=lambda x, y, z: False) inventory = { "PROD001": prod1, "PROD002": prod2, "PROD003": prod3, "PROD004": prod4, } self.inventory_repository = Mock() self.inventory_repository.find = Mock(side_effect=lambda sku: inventory.get(sku)) self.invoice_repository = Mock() invoice_ids = ["INV002", "INV001"] self.invoice_repository.next_id = Mock(side_effect=lambda: invoice_ids.pop()) self.order_descriptors = { "ORD001": [ {"sku": "PROD001", "quantity": 1}, {"sku": "PROD002", "quantity": 3} ], "ORD002": [ {"sku": "PROD001", "quantity": 2}, {"sku": "PROD002", "quantity": 2}, {"sku": "PROD002", "quantity": 2} ], "ORD003": [ {"sku": "PROD004", "quantity": 3}, ], "ORD00X": [ {"sku": "PROD001", "quantity": 1}, ] }