示例#1
0
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
示例#2
0
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
示例#3
0
def order_fixture():
    o = Order()
    o.add_main(burger)
    o.add_others(side, 1)
    o.add_others(drink, 1)

    return o
示例#4
0
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
示例#6
0
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
示例#7
0
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
示例#8
0
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
示例#10
0
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
示例#11
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
示例#12
0
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
示例#13
0
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
示例#14
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
示例#15
0
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
示例#16
0
    # 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":
示例#17
0
def test_del_main_correct_input():
    order = Order(1)
    main = order.add_main('burger')
    order.del_main(main)
    assert not order.mains
示例#18
0
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)
示例#19
0
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
示例#20
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'
示例#21
0
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)