def test_ten_percent_discount(): catalog = FakeCatalog() toothbrush = Product("toothbrush", ProductUnit.EACH) catalog.add_product(toothbrush, 0.99) apples = Product("apples", ProductUnit.KILO) catalog.add_product(apples, 1.99) teller = Teller(catalog) teller.add_special_offer(SpecialOfferType.TEN_PERCENT_DISCOUNT, toothbrush, 10.0) cart = ShoppingCart() cart.add_item_quantity(apples, 2.5) receipt = teller.checks_out_articles_from(cart) assert 4.975 == pytest.approx(receipt.total_price(), 0.01) assert [] == receipt.discounts assert 1 == len(receipt.items) receipt_item = receipt.items[0] assert apples == receipt_item.product assert 1.99 == receipt_item.price assert 2.5 * 1.99 == pytest.approx(receipt_item.total_price, 0.01) assert 2.5 == receipt_item.quantity
def test_shopping_cart_handle_offers_ten_percent_discount(self): catalog = FakeCatalog() toothbrush = Product("toothbrush", ProductUnit.EACH) apples = Product("apples", ProductUnit.KILO) catalog.add_product(toothbrush, 0.99) catalog.add_product(apples, 1.99) # teller special offers 10% discount on toothbrush teller = Teller(catalog) teller.add_special_offer(SpecialOfferType.TEN_PERCENT_DISCOUNT, toothbrush, 10.0) #offers = teller.offers #discount = Discount(product, "2 for " + str(offer.argument), discount_n) # add apples to shopping cart cart = ShoppingCart() cart.add_item_quantity(apples, 2.5) #cart.add_item_quantity(toothbrush, 2) receipt = teller.checks_out_articles_from(cart) # add apples to shopping cart : check no discounts and 1 item self.assertEqual([], receipt.discounts) self.assertEqual(len(cart.items), len(receipt.items)) receipt_item = receipt.items[0] self.assertEqual(apples, receipt_item.product) self.assertEqual(catalog.unit_price(apples), receipt_item.price) self.assertEqual(cart.product_quantities[apples], receipt_item.quantity) self.assertAlmostEqual( cart.product_quantities[apples] * catalog.unit_price(apples), receipt.total_price(), 0.01)
def test_shopping_cart_add_item_quantity(self): cart = ShoppingCart() apples = Product("apples", ProductUnit.KILO) cart.add_item_quantity(apples, 2.5) self.assertEqual(2.5, cart.product_quantities[apples]) cart.add_item_quantity(apples, 1.2) self.assertEqual(3.7, cart.product_quantities[apples])