def test_add_main_success(): o = Order() o.add_main(burger) assert len(o) == 1 assert len(o.mains) == 1 assert len(o.others) == 0 assert o.total_price == 44
def test_invalid_order_main(os): # ===== ORDERS A BURGER WITH TOO MANY BUNS ===== b_ingres = [] x1 = Ingredient("sesame", "bun", "sesame bun", 1000, 1.5) x2 = Ingredient("lettuce", "vegetable", 2, 0.5) b_ingres.append(x1) b_ingres.append(x2) order1 = Order() bunQ = ing_quantity("sesame", "bun") m1 = Main("Burger", b_ingres) order1.add_main(m1) # ===== MAKES SURE THE ERROR IS CATCHED AND THE CORRECT MESSAGE IS DISPLAYED ===== try: os.add_order(order1) assert False except Exception as err: assert str(err) == "Not enough ingredients available." assert True # ===== MAKE SURE INVENTORY WASN'T UPDATED ===== assert ing_quantity("sesame", "bun") == bunQ # ASSERT NO ORDER LOGGED assert len(os._orders) == 0
def order_fixture(): o = Order() o.add_main(burger) o.add_others(side, 1) o.add_others(drink, 1) return o
def test_del_main_incorrect_input(): order = Order(1) order.add_main('burger') wrong_main = Main('wrap') with pytest.raises(DevError) as e: order.del_main(wrong_main) assert "main that you're trying to delete doesn't exist in this order" in str(e.value)
def test_checkout_all(self, restaurant_fixture): order = Order() #adding a burger burger = Burger() bun = restaurant_fixture.menu.get_item("Bun") patty = restaurant_fixture.menu.get_item("Patty") cheese = restaurant_fixture.menu.get_item("Cheese") burger.add_item(bun, 2) burger.add_item(patty, 1) burger.add_item(cheese, 1) order.add_main(burger) #adding sides and drinks coke = restaurant_fixture.menu.get_item("Canned Coke") nugget = restaurant_fixture.menu.get_item("Small Chicken Nugget") order.add_others(coke, 1) order.add_others(nugget, 1) #placing the order and checking out restaurant_fixture.place_order(order) restaurant_fixture.checkout(1) assert restaurant_fixture.inventory.items[0].quantity == 98 assert restaurant_fixture.inventory.items[1].quantity == 99 assert restaurant_fixture.inventory.items[2].quantity == 99 assert restaurant_fixture.inventory.items[3].quantity == 99 assert restaurant_fixture.inventory.items[4].quantity == 94 assert len(restaurant_fixture.orders) == 1
def bootstrap_system(): system = OrderingSystem() order1 = Order() custom_ingredients = deepcopy(g_ingredients) custom_ingredients = [x for x in custom_ingredients if x.i_type != "wrap"] for i in custom_ingredients: i.amount = 1 main1 = Main("burger", custom_ingredients) order1.add_main(main1) nuggets1 = Nuggets(6) order1.add_side(nuggets1) fries1 = Fries("large") order1.add_side(fries1) drink1 = Drink("pepsi", "can", 2) order1.add_drink(drink1) system.add_order(order1) order2 = Order() order2.add_main(main1) order2.add_side(nuggets1) order2.add_side(fries1) order2.add_drink(drink1) system.add_order(order2) return system
def test_make_full_order(os): # ===== MAKE A LIST OF INGREDIENTS AND MAKE A MAIN ===== w_ingres = [] x1 = Ingredient("plain", "wrap", "plain wrap", 1, 2) x2 = Ingredient("lettuce", "vegetable", "lettuce", 2, 0.5) x3 = Ingredient("tomato", "vegetable", "tomato", 2, 1) x4 = Ingredient("cheddar", "cheese", "cheddar cheese", 4, 1) for x in [x1, x2, x3, x4]: w_ingres.append(x) m1 = Main("wrap", w_ingres) # ===== STORE INVENTORY LEVELS ===== wrapQ = ing_quantity("plain", "wrap") letQ = ing_quantity("lettuce", "vegetable") tomQ = ing_quantity("tomato", "vegetable") cheQ = ing_quantity("cheddar", "cheese") ojQ = drink_quantity("orange juice", "") pepsi_q = drink_quantity("pepsi", "can") nuggetQ = side_quantity(Nuggets(6)) friesQ = side_quantity(Fries("")) # ===== ADD MAIN, DRINK AND SIDES TO ORDER ===== order1 = Order() order1.add_main(m1) order1.add_drink(Drink("orange juice", "small", 250)) order1.add_drink(Drink("pepsi", "can", 2)) order1.add_side(Fries("large")) order1.add_side(Nuggets(6)) # ===== ADD ORDER TO ORDERING SYSTEM ===== assert os.add_order(order1) == True # ===== ASSERT ORDER WAS LOGGED ===== assert len(os._orders) == 1 # ===== CHECK PRICE ===== assert order1.calculate_price() == 21 # ===== MAKE SURE CORRECT NUMBER OF ITEMS HAVE BEEN PUT INTO THE ORDER ===== assert len(order1.mains) == 1 assert len(order1.sides) == 2 assert len(order1.drinks) == 2 assert len(order1.mains[0]._ingredients) == 4 # ===== MAKE SURE INVENTORY LEVELS WERE UPDATED CORRECTLY ===== assert ing_quantity("plain", "wrap") == wrapQ - 1 assert ing_quantity("lettuce", "vegetable") == letQ - 2 assert ing_quantity("tomato", "vegetable") == tomQ - 2 assert ing_quantity("cheddar", "cheese") == cheQ - 4 assert side_quantity(Nuggets(6)) == nuggetQ - 6 assert side_quantity(Fries("")) == friesQ - 640 assert drink_quantity("orange juice", "") == ojQ - 250 assert drink_quantity("pepsi", "can") == pepsi_q - 2
def test_cancel_main(os): # ===== MAKE LIST OF INGREDIENTS ===== b_ingres = [] x1 = Ingredient("sesame", "bun", "sesame bun", 3, 1.5) x2 = Ingredient("beef", "patty", "beef patty", 2, 3.0) x3 = Ingredient("tomato", "vegetable", "tomato", 2, 0.5) x4 = Ingredient("cheddar", "cheese", "cheddar cheese", 2, 1) x5 = Ingredient("tomato", "sauce", "tomato sauce", 2, 0.5) for x in [x1, x2, x3, x4, x5]: b_ingres.append(x) # ===== STORE CURRENT INVENTORY LEVELS ===== bunQ = ing_quantity("sesame", "bun") pattyQ = ing_quantity("beef", "patty") vegQ = ing_quantity("tomato", "vegetable") cheQ = ing_quantity("cheddar", "cheese") sauQ = ing_quantity("tomato", "sauce") # ===== ORDER A MAIN ===== order1 = Order() m1 = Main("burger", b_ingres) order1.add_main(m1) os.add_order(order1) assert len(os._orders) == 1 assert order1.calculate_price() == 14.5 assert len(order1.mains) == 1 assert len(order1.mains[0]._ingredients) == 5 # ===== MAKE SURE INVENTORY UPDATED CORRECTLY ===== assert ing_quantity("sesame", "bun") == bunQ - 3 assert ing_quantity("beef", "patty") == pattyQ - 2 assert ing_quantity("tomato", "vegetable") == vegQ - 2 assert ing_quantity("cheddar", "cheese") == cheQ - 2 assert ing_quantity("tomato", "sauce") == sauQ - 2 os.cancel_order(order1._order_id) # ===== IF AN ORDER IS CANCELLED MAKE SURE THE INGREDIENTS ARE PUT BACK IN THE INVENTORY SYSTEM ===== assert ing_quantity("sesame", "bun") == bunQ assert ing_quantity("beef", "patty") == pattyQ assert ing_quantity("tomato", "vegetable") == vegQ assert ing_quantity("cheddar", "cheese") == cheQ assert ing_quantity("tomato", "sauce") == sauQ
def test_checkout_burger_only(self, restaurant_fixture): order = Order() burger = Burger() bun = restaurant_fixture.menu.get_item("Bun") patty = restaurant_fixture.menu.get_item("Patty") cheese = restaurant_fixture.menu.get_item("Cheese") burger.add_item(bun, 2) burger.add_item(patty, 1) burger.add_item(cheese, 1) order.add_main(burger) restaurant_fixture.place_order(order) print(order.id) restaurant_fixture.checkout(1) assert restaurant_fixture.inventory.items[0].quantity == 98 assert restaurant_fixture.inventory.items[1].quantity == 99 assert restaurant_fixture.inventory.items[2].quantity == 99 assert len(restaurant_fixture.orders) == 1
def test_calc_price(): order = Order(1) main = order.add_main('burger') ing1 = QuantityIngredient(1, 'sesame bun', 'm', 20, 1.00) main.addIngredient(ing1, 2, None) ing2 = WeightIngredient(2, 'fries', 's', 2000, 60, 100, 140, 2, 2.8, 3.4) order.add_sideDrink(ing2, 1, None) assert order.calc_price() == 5.0
def test_completed(os): # ===== CREATING 3 ORDERS ===== order1 = Order() m = Main("burger", b_ingres) order1.add_main(m) os.add_order(order1) order2 = Order() order2.add_main(m) os.add_order(order2) order3 = Order() order3.add_main(m) os.add_order(order3) assert len(os._orders) == 3 # ===== COMPLETING ORDERS ===== os.complete_order(order1._order_id) assert len(os._orders) == 2 assert len(os._completed_orders) == 1 os.complete_order(order3._order_id) assert len(os._orders) == 1 assert len(os._completed_orders) == 2 os.complete_order(order2._order_id) assert len(os._orders) == 0 assert len(os._completed_orders) == 3
def test_order_status(os): # ===== CREATING 3 ORDERS ===== order1 = Order() m = Main("burger", b_ingres) order1.add_main(m) os.add_order(order1) order2 = Order() order2.add_main(m) os.add_order(order2) order3 = Order() order3.add_main(m) os.add_order(order3) # ===== COMPLETING ORDERS ===== assert order3._completed == False os.complete_order(order1._order_id) assert len(os._orders) == 2 assert len(os._completed_orders) == 1 assert order1._completed == True assert order3._completed == False os.complete_order(order3._order_id) assert len(os._orders) == 1 assert len(os._completed_orders) == 2 assert order3._completed == True assert order2._completed == False os.complete_order(order2._order_id) assert len(os._orders) == 0 assert len(os._completed_orders) == 3 assert order2._completed == True
def test_cancel(os): # ===== CREATING 3 ORDERS ===== order1 = Order() m = Main("burger", b_ingres) order1.add_main(m) os.add_order(order1) order2 = Order() order2.add_main(m) os.add_order(order2) order3 = Order() order3.add_main(m) os.add_order(order3) # ==== CANCELLING 3 ORDERS ==== os.cancel_order(order1._order_id) assert len(os._orders) == 2 assert len(os._completed_orders) == 0 os.cancel_order(order3._order_id) assert len(os._orders) == 1 assert len(os._completed_orders) == 0 os.cancel_order(order2._order_id) assert len(os._orders) == 0 assert len(os._completed_orders) == 0
def test_order_two(os): b_ingres = [] x1 = Ingredient("sesame", "bun", "sesame bun", 3, 1.5) x2 = Ingredient("beef", "patty", "beef patty", 2, 3.0) x3 = Ingredient("tomato", "vegetable", "tomato", 2, 0.5) x4 = Ingredient("cheddar", "cheese", "cheddar cheese", 2, 1) for x in [x1, x2, x3, x4]: b_ingres.append(x) # ===== ORDER 1ST MAIN ===== order1 = Order() m1 = Main("burger", b_ingres) order1.add_main(m1) assert os.add_order(order1) == True assert len(os._orders) == 1 assert order1.calculate_price() == 13.5 # ===== MAKE SURE ONLY 1 MAIN WITH 4 INGREDIENTS ADDED ===== assert len(order1.mains) == 1 assert len(order1.sides) == 0 assert len(order1.drinks) == 0 assert len(order1.mains[0]._ingredients) == 4 w_ingres = [] x1 = Ingredient("plain", "wrap", "plain wrap", 1, 2) x2 = Ingredient("lettuce", "vegetable", "lettuce", 2, 0.5) x3 = Ingredient("tomato", "vegetable", "tomato", 2, 1) x4 = Ingredient("cheddar", "cheese", "cheddar cheese", 4, 1) for x in [x1, x2, x3, x4]: w_ingres.append(x) # ===== STORE CURRENT INVENTORY LEVELS ===== wrapQ = ing_quantity("plain", "wrap") letQ = ing_quantity("lettuce", "vegetable") tomQ = ing_quantity("tomato", "vegetable") cheQ = ing_quantity("cheddar", "cheese") # ===== ORDER 2ND MAIN ===== order2 = Order() m2 = Main("wrap", w_ingres) order2.add_main(m2) assert os.add_order(order2) == True assert len(os._orders) == 2 assert order2.calculate_price() == 9 # ===== MAKE SURE ONLY 1 MAIN WITH 4 INGREDIENTS ADDED ===== assert len(order2.mains) == 1 assert len(order2.sides) == 0 assert len(order2.drinks) == 0 assert len(order2.mains[0]._ingredients) == 4 # ===== MAKE SURE INVENTORY UPDATED CORRECTLY ===== assert ing_quantity("plain", "wrap") == wrapQ - 1 assert ing_quantity("lettuce", "vegetable") == letQ - 2 assert ing_quantity("tomato", "vegetable") == tomQ - 2 assert ing_quantity("cheddar", "cheese") == cheQ - 4
def test_many_invalid_order_main(os): ingres1 = [] x1 = Ingredient("sesame", "bun", "sesame bun", 3, 1.5) x2 = Ingredient("beef", "patty", "beef patty", 40, 3.0) x3 = Ingredient("tomato", "vegetable", "tomato", 15, 0.5) x4 = Ingredient("cheddar", "cheese", "cheddar cheese", 2, 1) for x in [x1, x2, x3, x4]: ingres1.append(x) # ===== ORDERING 1 BURGER ===== order1 = Order() m1 = Main("Burger", ingres1) order1.add_main(m1) assert os.add_order(order1) == True assert len(os._orders) == 1 ingres2 = [] x1 = Ingredient("plain", "wrap", "plain wrap", 3, 1.5) x2 = Ingredient("beef", "patty", "beef patty", 2, 3.0) x3 = Ingredient("tomato", "vegetable", "tomato", 2, 0.5) x4 = Ingredient("cheddar", "cheese", "cheddar cheese", 2, 1) for x in [x1, x2, x3, x4]: ingres2.append(x) # ===== ORDERING A WRAP ===== order2 = Order() m2 = Main("wrap", ingres2) order2.add_main(m2) assert os.add_order(order2) == True assert len(os._orders) == 2 # ===== ORDERING ANOTHER BURGER - INVALID ===== ingres3 = [] x1 = Ingredient("plain", "wrap", "plain wrap", 30, 1.5) x2 = Ingredient("beef", "patty", "beef patty", 4000, 3.0) x3 = Ingredient("tomato", "vegetable", "tomato", 20, 0.5) x4 = Ingredient("cheddar", "cheese", "cheddar cheese", 200, 1) for x in [x1, x2, x3, x4]: ingres3.append(x) m3 = Main("burger", ingres3) order3 = Order() order3.add_main(m3) # ===== MAKES SURE THE ERROR IS CATCHED AND THE CORRECT MESSAGE IS DISPLAYED===== try: os.add_order(order3) print(ing_quantity("beef", "patty")) assert False except Exception as err: assert str(err) == "Not enough ingredients available." assert True # ASSERT ONLY 2 ORDERS HAVE BEEN LOGGED assert len(os._orders) == 2
# Testing # print([str(x) for x in g_ingredients]) # print([str(x) for x in g_sides]) # print([str(x) for x in g_drinks]) order1 = Order() main = int( input( "Type the number of the item you would like to order:\n1. Burger\n2. Wrap\nI would like to order: " )) if main == 1: m1 = createMain("burger") order1.add_main(m1) elif main == 2: m1 = createMain("wrap") order1.add_main(m1) else: raise Exception("Please enter a valid number") # Order sides sides = input("Would you like to order additional sides? (y/n): ") if sides.lower() == "y": fries = input("Would you like fries (y/n)? ") if fries.lower() == "y":
def test_del_main_correct_input(): order = Order(1) main = order.add_main('burger') order.del_main(main) assert not order.mains
def test_add_main_incorrect_type_of_Main(): order = Order(1) with pytest.raises(DevError) as e: order.add_main('hamburger') assert 'type should be either "burger" or "wrap"' in str(e.value)
def test_add_main_none(): o = Order() with pytest.raises(TypeError) as e: o.add_main(None) assert len(o) == 0 assert len(o.mains) == 0
def test_add_main_correct_input(): order = Order(1) order.add_main('burger') order.add_main('wrap') assert order.mains[0].type == 'burger' assert order.mains[1].type == 'wrap'
def new_order(): # TODO this is gonna be sloppy as f**k, will fix later # first get the type of burger then display the available list of ingredients # for that type of main.. Then just display the rest LOL # validate burger and wrap option if request.method == "GET": if request.args.get('amount') is None: return render_template('new_order_amount.html') else: return render_template('new_order_type.html') else: if request.form.get('first_try') == 'true': return render_template('new_order_main.html', ingredients=g_ingredients, sides=g_sides, drinks=g_drinks) form = OrderForm(request.form) if form.is_valid: order = Order() if int(form.get_raw_data('amount')) > 0: for x in range(int(form.get_raw_data('amount'))): # i_type = 'burger' or 'wrap' i_type = form.get_raw_data('main_' + str(x)) ingredients = deepcopy(g_ingredients) custom_ingredients = [] for ingredient in ingredients: if i_type == 'burger' and ingredient.i_type != 'wrap': ingredient.amount = int( form.get_raw_data('main_' + str(x) + '_' + str(ingredient.inv_id))) custom_ingredients.append(ingredient) elif i_type == 'wrap' and ingredient.i_type != 'bun': ingredient.amount = int( form.get_raw_data('main_' + str(x) + '_' + str(ingredient.inv_id))) custom_ingredients.append(ingredient) else: continue main = Main(i_type, custom_ingredients) order.add_main(main) if int(form.get_raw_data('sundae_small')) > 0: for x in range(int(form.get_raw_data('sundae_small'))): sundae_small = Sundae("chocolate", "small", 1) order.add_sundae(sundae_small) if int(form.get_raw_data('sundae_medium')) > 0: for x in range(int(form.get_raw_data('sundae_medium'))): sundae_small = Sundae("chocolate", "medium", 1) order.add_sundae(sundae_small) if int(form.get_raw_data('sundae_large')) > 0: for x in range(int(form.get_raw_data('sundae_large'))): sundae_small = Sundae("chocolate", "large", 1) order.add_sundae(sundae_small) if int(form.get_raw_data('nuggets_3')) > 0: for x in range(int(form.get_raw_data('nuggets_3'))): nuggets_3 = Nuggets(3) order.add_side(nuggets_3) if int(form.get_raw_data('nuggets_6')) > 0: for x in range(int(form.get_raw_data('nuggets_6'))): nuggets_6 = Nuggets(6) order.add_side(nuggets_6) if int(form.get_raw_data('fries_small')) > 0: for x in range(int(form.get_raw_data('fries_small'))): fries_small = Fries('small') order.add_side(fries_small) if int(form.get_raw_data('fries_medium')) > 0: for x in range(int(form.get_raw_data('fries_medium'))): fries_medium = Fries('medium') order.add_side(fries_medium) if int(form.get_raw_data('fries_large')) > 0: for x in range(int(form.get_raw_data('fries_large'))): fries_large = Fries('large') order.add_side(fries_large) if int(form.get_raw_data('sprite_can')) > 0: for x in range(int(form.get_raw_data('sprite_can'))): sprite_can = Drink('sprite', 'can', 1) order.add_drink(sprite_can) if int(form.get_raw_data('sprite_bottle')) > 0: for x in range(int(form.get_raw_data('sprite_bottle'))): sprite_bottle = Drink('sprite', 'bottle', 1) order.add_drink(sprite_bottle) if int(form.get_raw_data('pepsi_can')) > 0: for x in range(int(form.get_raw_data('pepsi_can'))): pepsi_can = Drink('pepsi', 'can', 1) order.add_drink(pepsi_can) if int(form.get_raw_data('pepsi_bottle')) > 0: for x in range(int(form.get_raw_data('pepsi_bottle'))): pepsi_bottle = Drink('pepsi', 'bottle', 1) order.add_drink(pepsi_bottle) if int(form.get_raw_data('orange_juice_small')) > 0: for x in range(int(form.get_raw_data('orange_juice_small'))): orange_juice_small = Drink('orange juice', 'small', 250) order.add_drink(orange_juice_small) if int(form.get_raw_data('orange_juice_medium')) > 0: for x in range(int(form.get_raw_data('orange_juice_medium'))): orange_juice_medium = Drink('orange juice', 'medium', 450) order.add_drink(orange_juice_medium) if int(form.get_raw_data('orange_juice_large')) > 0: for x in range(int(form.get_raw_data('orange_juice_large'))): orange_juice_large = Drink('orange juice', 'large', 650) order.add_drink(orange_juice_large) if 'confirm' in request.form: system.add_order(order) return redirect(url_for('order', order_id=order.order_id)) else: if order.calculate_price() > 0: return render_template('new_order_main.html', ingredients=g_ingredients, sides=g_sides, drinks=g_drinks, confirm=True, fee='{:0,.2f}'.format( order.calculate_price())) else: return render_template('new_order_main.html', ingredients=g_ingredients, sides=g_sides, drinks=g_drinks, fee=0) else: errors = {} for field in form.fields: errors[field.name] = field.error return render_template('new_order_main.html', ingredients=g_ingredients, sides=g_sides, drinks=g_drinks, errors=errors) return render_template('new_order_main.html', ingredients=g_ingredients, sides=g_sides, drinks=g_drinks)