def test_stock_shortage(self): # set stock levels to the minimum ammount required to order all sides and drinks on the menu items = [] items += self.system.sides items += self.system.drinks for item in items: item.increment(1) for item in items: if item.name == "Large Fries": item.stock = item.stock - 1 if item.name == "Large Orange Juice": item.stock = item.stock - 1 self.order_id = self.system.create_new_order() order = self.system.get_order_by_id(self.order_id) try: order.set_sides(self.system.sides) except OutOfStockError as e: assert "Large Fries" in e.msg try: order.set_drinks(self.system.drinks) except OutOfStockError as e: assert "Large Orange Juice" in e.msg
def test_successful_order(self): # making an order of every item on the menu items = [] items += self.system.sides items += self.system.drinks for item in items: item.increment(item.quantity_per_serving) # creating the order self.order_id = self.system.create_new_order() order = self.system.get_order_by_id(self.order_id) print(self.system._stock_levels) order.set_sides(self.system.sides) order.set_drinks(self.system.drinks) assert order.price == sum([item.price for item in items]) assert order.status == "selection" assert order.sides == tuple(self.system.sides) assert order.drinks == tuple(self.system.drinks) GourmetBurgerSystem.checkout(order) assert order.status == "being prepared" #checking the stock levels after placing order for (key, (value, units)) in self.system._stock_levels.items(): assert value == 0
def test_two_orders_with_stock(self): items = [] items += self.system.sides items += self.system.drinks for item in items: item.increment(item.quantity_per_serving) item.increment(item.quantity_per_serving) self.order_id = self.system.create_new_order() order1 = self.system.get_order_by_id(self.order_id) self.order_id = self.system.create_new_order() order2 = self.system.get_order_by_id(self.order_id) assert order1 != order2 # placing order 1 - valid order1.set_sides(self.system.sides) order1.set_drinks(self.system.drinks) assert order1.price == sum([item.price for item in items]) assert order1.status == "selection" assert order1.sides == tuple(self.system.sides) assert order1.drinks == tuple(self.system.drinks) GourmetBurgerSystem.checkout(order1) assert order1.status == "being prepared" # placing order 2 - valid order2.set_sides(self.system.sides) order2.set_drinks(self.system.drinks) assert order2.price == sum([item.price for item in items]) assert order2.status == "selection" assert order2.sides == tuple(self.system.sides) assert order2.drinks == tuple(self.system.drinks) GourmetBurgerSystem.checkout(order2) assert order2.status == "being prepared"
def test_confirmation_print_out(self): items = [] items += self.system.sides for item in items: item.increment(item.quantity_per_serving) self.order_id = self.system.create_new_order() order = self.system.get_order_by_id(self.order_id) # print(self.system._stock_levels) order.set_sides(self.system.sides) GourmetBurgerSystem.checkout(order) self.system.print_order(self.order_id)
def test_two_orders_when_stock_runs_out(self): items = [] items += self.system.sides items += self.system.drinks for item in items: item.increment(item.quantity_per_serving) self.order_id = self.system.create_new_order() order1 = self.system.get_order_by_id(self.order_id) self.order_id = self.system.create_new_order() order2 = self.system.get_order_by_id(self.order_id) assert order1 != order2 # placing order 1 - valid order1.set_sides(self.system.sides) order1.set_drinks(self.system.drinks) assert order1.price == sum([item.price for item in items]) assert order1.status == "selection" assert order1.sides == tuple(self.system.sides) assert order1.drinks == tuple(self.system.drinks) GourmetBurgerSystem.checkout(order1) assert order1.status == "being prepared" # placing order 2 - not valid try: order2.set_sides(self.system.sides) except OutOfStockError as e: assert "Large Fries" in e.msg try: order2.set_drinks(self.system.drinks) except OutOfStockError as e: assert "Large Orange Juice" in e.msg assert order2.status == "selection"
def _increment_all(cls, sign, items): for item in items: item.increment(sign * item.quantity_per_serving)