def test_retail_volume_price_different_products(self): terminal = PointOfSaleTerminal() set_pricing(terminal) for code in "ABCDABA": terminal.scan(code) result = terminal.calculate_total() self.assertEqual(result, 13.25)
def test_retail_price(self): terminal = PointOfSaleTerminal() set_pricing(terminal) for code in "ABCD": terminal.scan(code) result = terminal.calculate_total() self.assertEqual(result, 7.25)
def test_set_volume_quantity_one(self): terminal = PointOfSaleTerminal() terminal.set_volume_price("A", 1.0, 1) product = terminal.available_products.get_product("A") self.assertEqual(product.volume_price, None) self.assertEqual(product.retail_price.value, 1.0)
def test_both_prices(self): terminal = PointOfSaleTerminal() set_pricing(terminal) for code in "CCCCCCC": terminal.scan(code) result = terminal.calculate_total() self.assertEqual(result, 6)
def test_set_retail_price(self): terminal = PointOfSaleTerminal() terminal.set_retail_price( "A", 1.0, ) product = terminal.available_products.get_product("A") self.assertEqual(product.retail_price.value, 1.0)
def test_set_retail_price_for_unavailable_product(self): terminal = PointOfSaleTerminal() terminal.set_retail_price("A", 1.0) self.assertRaises(AttributeError, partial(terminal.scan, "B"))
def test_set_negative_quantity(self): terminal = PointOfSaleTerminal() terminal.set_retail_price("A", 1.0) self.assertRaises(AttributeError, partial(terminal.set_volume_price, "A", 1.0, -2))
def main(): terminal = PointOfSaleTerminal() set_pricing(terminal) cases = ["ABCDABA", "CCCCCCC", "ABCD"] for case in cases: terminal.create_new_order() for code in case: terminal.scan(code) result = terminal.calculate_total() print(f"Case: {case}\nResult: {result}\n\n") case = "BBBAAA" terminal.registered_discount_cards.register_card("special_card", 1500) terminal.create_new_order() for code in case: terminal.scan(code) terminal.scan_discount_card("special_card") result, card = terminal.finish_order() print(f"Case: {case}\nResult: {result}\n{card}\n")
def set_pricing(terminal: PointOfSaleTerminal): terminal.set_retail_price("A", 1.25) terminal.set_volume_price("A", 3.0, 3) terminal.set_retail_price("B", 4.25) terminal.set_retail_price("C", 1.0) terminal.set_volume_price("C", 5.0, 6) terminal.set_retail_price("D", 0.75)