예제 #1
0
    def test_remove_item(self):
        '''Tests if remove_item does what is says
        '''

        pizza1 = Pizza("pepperoni_pizza", 5.0, "small")
        pizza2 = Pizza("vegetarian_pizza", 5.0, "medium")
        pizza3 = Pizza("margherita_pizza", 5.0, "large")
        PP.order_fac.create_new_order()
        PP.order_fac.add_to_order(1, [pizza1, pizza2, pizza3])

        # Tests if it will remove an item
        data = {'order_number': 1, 'item_number': 2}
        response = self.client.post('/remove_item', data=data)
        assert response.status_code == 200
        assert "delete" in str(response.data)
        assert '2 ' in str(response.data)
        assert ' 1' in str(response.data)

        assert "vegetarian_pizza" not in str(PP.order_fac.orders[0].items[1])

        # Tests if it will ignore nonexistent items
        data = {'order_number': 1, 'item_number': 4}
        response = self.client.post('/remove_item', data=data)
        assert response.status_code == 200
        assert "invalid" in str(response.data).lower()

        assert "margherita_pizza" in str(PP.order_fac.orders[0].items[1])
예제 #2
0
    def test_update_pizza(self):
        '''Tests if update_pizza does as its name implies
        '''

        pizza1 = Pizza(
            "pepperoni_pizza", 5.0,
            "medium")  #, toppings = ['pepperoni','tomatoes','mushroom'])
        pizza2 = Pizza("custom_pizza",
                       5.0,
                       "medium",
                       toppings=['olives', 'tomatoes', 'tomatoes'])
        drink1 = Drink("drink", 0, "Coke")
        PP.order_fac.create_new_order()
        PP.order_fac.add_to_order(1, [pizza1])
        PP.order_fac.create_new_order()
        PP.order_fac.add_to_order(2, [pizza2])
        PP.order_fac.create_new_order()
        PP.order_fac.add_to_order(3, [drink1, pizza2])

        # Tests if it updates the type of an existing pizza
        data = {
            'order_number': 1,
            'item_number': 1,
            'type': 'vegetarian_pizza'
        }
        response = self.client.post('/update_pizza/type', data=data)
        assert response.status_code == 200
        assert 'vegetarian' in PP.order_fac.orders[0].get_item_by_id(1)

        # Tests if it updates the size of an existing pizza
        data = {'order_number': 1, 'item_number': 1, 'pizza_size': 'large'}
        response = self.client.post('/update_pizza/size', data=data)
        assert response.status_code == 200
        assert 'large' in PP.order_fac.orders[0].get_item_by_id(1)

        # Tests if it updates the toppings of an existing pizza
        data = {
            'order_number': 1,
            'item_number': 1,
            'toppings': ['jalapenos', 'tomatoes', 'mushroom'],
            'add_or_remove': 'add'
        }
        response = self.client.post('/update_pizza/toppings', data=data)
        assert response.status_code == 200
        assert 'jalapenos' in PP.order_fac.orders[0].get_item_by_id(1)

        data = {
            'order_number': 1,
            'item_number': 1,
            'toppings': ['jalapenos', 'jalapenos', 'jalapenos', 'tomatoes'],
            'add_or_remove': 'remove'
        }
        response = self.client.post('/update_pizza/toppings', data=data)
        assert response.status_code == 200
        assert 'jalapenos' not in PP.order_fac.orders[0].get_item_by_id(1)
예제 #3
0
    def test_get_toppings(self):
        '''Tests if get_toppings gives the toppings of the given pizza
        '''

        pizza1 = Pizza("pepperoni_pizza",
                       5.0,
                       "medium",
                       toppings=['pepperoni', 'tomatoes', 'mushroom'])
        pizza2 = Pizza("custom_pizza",
                       5.0,
                       "medium",
                       toppings=['olives', 'tomatoes', 'tomatoes'])
        drink1 = Drink("drink", 0, "Coke")
        PP.order_fac.create_new_order()

        PP.order_fac.create_new_order()
        PP.order_fac.add_to_order(2, [pizza1])
        PP.order_fac.create_new_order()
        PP.order_fac.add_to_order(3, [drink1, pizza2])

        # Tests if it returns the right dict for a pizza
        response = self.client.get('/get_toppings/2/1')
        assert response.status_code == 200
        toppings = {'pepperoni': 1, 'tomatoes': 1, 'mushroom': 1}
        for key in toppings:
            assert key.encode('utf-8') in response.data
            assert str(toppings[key]).encode('utf-8') in response.data

        # Tests if it returns the right dict for a pizza with multiples
        response = self.client.get('/get_toppings/3/2')
        assert response.status_code == 200
        toppings = {'olives': 1, 'tomatoes': 2}
        for key in toppings:
            assert key.encode('utf-8') in response.data
            assert str(toppings[key]).encode('utf-8') in response.data

        # Tests if it returns None when the item is a drink
        response = self.client.get('/get_toppings/3/1')
        assert response.status_code == 200
        assert ("None").encode('utf-8') in response.data

        # Tests if it returns None when the order does not exist
        response = self.client.get('/get_toppings/4/1')
        assert response.status_code == 200
        assert ("None").encode('utf-8') in response.data

        # Tests if it returns None when the product does not exist
        response = self.client.get('/item_type/1/1')
        assert response.status_code == 200
        assert ("None").encode('utf-8') in response.data
예제 #4
0
    def test_cancel_order(self):
        '''Tests if cancel_order cancels the right order
        '''

        pizza1 = Pizza("pepperoni_pizza", 5.0, "medium")
        PP.order_fac.create_new_order()

        PP.order_fac.create_new_order()
        PP.order_fac.add_to_order(2, [pizza1])
        PP.order_fac.create_new_order()

        # Tests if cancel_order rejects invalid ids
        response = self.client.get('/cancel_order/4')
        assert response.status_code == 200
        assert ("invalid").encode('utf-8') in response.data

        # Tests if cancel_order removes the order, regardless of formatting
        response = self.client.get('/cancel_order/2')
        assert "invalid" in PP.order_fac.get_order(2)
        assert response.status_code == 200
        assert ("2").encode('utf-8') in response.data

        # Tests if cancel_order rejects invalid ids, including previous ids
        response = self.client.get('/cancel_order/2')
        assert response.status_code == 200
        assert ("invalid").encode('utf-8') in response.data
예제 #5
0
    def test_is_pizza(self):
        '''Tests if is_pizza gives meaningful info about the Product type
        '''

        pizza1 = Pizza("pepperoni_pizza", 5.0, "medium")
        drink1 = Drink("drink", 0, "Coke")
        PP.order_fac.create_new_order()

        PP.order_fac.create_new_order()
        PP.order_fac.add_to_order(2, [pizza1])
        PP.order_fac.create_new_order()
        PP.order_fac.add_to_order(3, [drink1])

        # Tests if it returns True when it is a pizza
        response = self.client.get('/item_type/2/1')
        assert response.status_code == 200
        assert ("True").encode('utf-8') in response.data

        # Tests if it returns False when it is a drink
        response = self.client.get('/item_type/3/1')
        assert response.status_code == 200
        assert ("False").encode('utf-8') in response.data

        # Tests if it returns None when the order does not exist
        response = self.client.get('/item_type/4/1')
        assert response.status_code == 200
        assert ("None").encode('utf-8') in response.data

        # Tests if it returns None when the product does not exist
        response = self.client.get('/item_type/1/1')
        assert response.status_code == 200
        assert ("None").encode('utf-8') in response.data
예제 #6
0
 def test_update_total(self):
     order = Order(1)
     assert order.order_total == 0
     pizza = Pizza("vegetarian_pizza", 0, "small")
     order.add_item(pizza)
     order.update_total()
     assert order.order_total == 9.99
예제 #7
0
 def test_remove_item(self):
     order = Order(1)
     pizza = Pizza("vegetarian_pizza", 0, "small")
     order.add_item(pizza)
     order.remove_item(1)
     assert 1 not in order.ids_to_items
     assert len(order.items) == 0
예제 #8
0
 def test_add_item(self):
     order = Order(1)
     pizza = Pizza("vegetarian_pizza", 0, "small")
     order.add_item(pizza)
     assert pizza.id == 1
     assert 1 in order.ids_to_items
     assert order.ids_to_items[1] == pizza
     assert len(order.items) == 1
예제 #9
0
    def test_create_delivery(self):
        '''Tests if create_delivery does as it says, and no more
        '''

        pizza1 = Pizza("pepperoni_pizza", 5.0, "medium")
        PP.order_fac.create_new_order()

        PP.order_fac.create_new_order()
        PP.order_fac.add_to_order(2, [pizza1])

        PP.order_fac.create_new_order()
        PP.order_fac.add_to_order(3, [pizza1])

        PP.order_fac.create_new_order()
        PP.order_fac.add_to_order(3, [pizza1])

        address = '321 qwert'

        # Tests if it returns a relevent message for pickup
        data = {'address': '321 qwert', 'delivery_type': 'pickup'}
        response = self.client.post('/create_delivery/1', data=data)
        assert response.status_code == 200
        assert ("pickup").encode('utf-8') in response.data

        # Tests if it returns a relevent message for PP delivery
        data = {'address': address, 'delivery_type': 'pizzaparlour'}
        response = self.client.post('/create_delivery/2', data=data)
        assert response.status_code == 200
        assert ("We").encode('utf-8') in response.data
        assert ("deliver").encode('utf-8') in response.data

        # Tests if it returns a relevent message for ubereats delivery, and makes a json file
        data = {'address': address, 'delivery_type': 'ubereats'}
        response = self.client.post('/create_delivery/3', data=data)
        assert response.status_code == 200
        assert ("Uber Eats").encode('utf-8') in response.data
        assert ("deliver").encode('utf-8') in response.data
        with open('delivery.json') as f:
            info = json.load(f)
            assert info['Address'] == address
            assert info['Order Number'] == 3

        # Tests if it returns a relevent message for foodora delivery, and makes a csv file
        data = {'address': address, 'delivery_type': 'foodora'}
        response = self.client.post('/create_delivery/4', data=data)
        assert response.status_code == 200
        assert ("Foodora").encode('utf-8') in response.data
        assert ("deliver").encode('utf-8') in response.data
        with open('delivery.csv') as f:
            info = f.read()
            assert address in info
            assert '4' in info

        # Tests if it rejects invalid ids
        data = {'address': address, 'delivery_type': 'pickup'}
        response = self.client.post('/create_delivery/5', data=data)
        assert response.status_code == 200
        assert ("deliver").encode('utf-8') not in response.data
예제 #10
0
    def test_set_price(self):
        '''Tests if set_price changes the price of the given product
        '''

        pizza1 = Pizza("pepperoni_pizza", 5.0, "small")
        PP.order_fac.create_new_order()
        PP.order_fac.add_to_order(1, [pizza1])

        # Tests if it will change a price
        data = {'product_name': 'pepperoni_pizza', 'price': 9.0}
        response = self.client.post('/set_price', data=data)
        assert response.status_code == 200
        assert "price set" in str(response.data)
        assert 'pepperoni_pizza' in str(response.data)
        assert '9.0' in str(response.data)

        assert PP.order_fac.orders[0].order_total == 9.0

        # Tests if it will change a price back
        data = {'product_name': 'pepperoni_pizza', 'price': 9.3}
        response = self.client.post('/set_price', data=data)
        assert response.status_code == 200
        assert "price set" in str(response.data)
        assert 'pepperoni_pizza' in str(response.data)
        assert '9.3' in str(response.data)

        # Create a new order with the old pizza and a new order with a new pizza. All should have the new price.
        PP.order_fac.create_new_order()
        PP.order_fac.add_to_order(2, [pizza1])

        PP.order_fac.create_new_order()
        pizza2 = Pizza("pepperoni_pizza", 5.0, "small")
        PP.order_fac.add_to_order(3, [pizza2])

        assert PP.order_fac.orders[2].order_total == 9.3
        assert PP.order_fac.orders[1].order_total == 9.3
        assert PP.order_fac.orders[0].order_total == 9.3

        # Tests if it will do nothing on a faulty price
        data = {'product_name': 'pepperoni_pizza', 'price': 'a'}
        response = self.client.post('/set_price', data=data)
        assert response.status_code == 200
        assert 'failure' in str(response.data).lower()

        assert PP.order_fac.orders[0].order_total == 9.3
def create_pizza():
    ''' Edits the item indicated in the update_type way using the provided data.
    '''

    if request.method == 'POST':
        order_number = request.form.get('order_number',type=int)
        quantity = request.form.get('quantity',type=int)
        pizza_type = request.form.get('pizza_type',type=str)
        pizza_size = request.form.get('pizza_size',type=str)
        toppings = request.form.getlist('toppings',type=str)
        if len(toppings) == 0:
            toppings = None
        items = []
        for i in range(0, int(quantity)):
            try:
                items.append(Pizza(pizza_type, 0, pizza_size, toppings))
            except KeyError:
                return("This pizza is invalid")
            
        return(order_fac.add_to_order(order_number, items))
예제 #12
0
    def test_get_item(self):
        '''Tests if get_item gives expected output
        '''
        pizza1 = Pizza("pepperoni_pizza", 5.0, "medium")
        PP.order_fac.create_new_order()
        PP.order_fac.add_to_order(1, [pizza1])
        PP.order_fac.create_new_order()

        # Tests if get_item returns string representation
        response = self.client.get('/get_item/1/1')
        assert response.status_code == 200
        assert response.data == (str(pizza1)).encode('utf-8')

        # Tests if get_item rejects invalid ids
        response = self.client.get('/get_item/3/1')
        assert response.status_code == 200
        assert response.data == ("None").encode('utf-8')
        response = self.client.get('/get_item/1/2')
        assert response.status_code == 200
        assert response.data == ("None").encode('utf-8')
예제 #13
0
    def test_get_order(self):
        '''Tests if get_order returns info about the right order
        '''
        pizza1 = Pizza("pepperoni_pizza", 5.0, "medium")
        PP.order_fac.create_new_order()

        PP.order_fac.create_new_order()
        PP.order_fac.add_to_order(2, [pizza1])

        # Tests if get_order returns vital info, regardless of formatting
        response = self.client.get('/get_order/2')
        assert response.status_code == 200
        assert ("2").encode('utf-8') in response.data
        assert ("pepperoni_pizza").encode('utf-8') in response.data
        assert ("tomatoes").encode('utf-8') in response.data

        # Tests if get_item rejects invalid ids
        response = self.client.get('/get_order/3')
        assert response.status_code == 200
        assert ("3").encode('utf-8') not in response.data
        assert ("valid").encode('utf-8') in response.data
예제 #14
0
    def test_get_all_orders(self):
        '''Tests if get_all_orders does as it says, and no more
        '''

        pizza1 = Pizza("pepperoni_pizza", 5.0, "medium")
        PP.order_fac.create_new_order()

        PP.order_fac.create_new_order()
        PP.order_fac.add_to_order(2, [pizza1])
        PP.order_fac.create_new_order()

        # Tests if it returns all current orders, regardless of formatting
        response = self.client.get('/get_order_list')
        assert response.status_code == 200
        assert ("1 ").encode('utf-8') in response.data
        assert ("2 ").encode('utf-8') in response.data
        assert ("3 ").encode('utf-8') in response.data
        assert ("4 ").encode('utf-8') not in response.data

        # Tests if it continues to work once an order is removed
        PP.order_fac.cancel_order(2)
        response = self.client.get('/get_order_list')
        assert response.status_code == 200
        assert ("1 ").encode('utf-8') in response.data
        assert ("2 ").encode('utf-8') not in response.data
        assert ("3 ").encode('utf-8') in response.data
        assert ("4 ").encode('utf-8') not in response.data

        # Tests if it continues to work once an order is added
        PP.order_fac.create_new_order()
        response = self.client.get('/get_order_list')
        assert response.status_code == 200
        assert ("1 ").encode('utf-8') in response.data
        assert ("2 ").encode('utf-8') not in response.data
        assert ("3 ").encode('utf-8') in response.data
        assert ("4 ").encode('utf-8') in response.data
        assert ("5 ").encode('utf-8') not in response.data
예제 #15
0
 def test_update_item_size(self):
     order = Order(1)
     pizza = Pizza("pepperoni_pizza", 0, "small")
     order.add_item(pizza)
     order.update_item(1, "size", "medium")
     assert pizza.size == "medium"
예제 #16
0
 def test_update_item_type(self):
     order = Order(1)
     pizza = Pizza("pepperoni_pizza", 0, "small")
     order.add_item(pizza)
     order.update_item(1, "type", "vegetarian_pizza")
     assert pizza.get_type() == "vegetarian_pizza"
예제 #17
0
 def test_get_toppings(self):
     order = Order(1)
     pizza = Pizza("pepperoni_pizza", 0, "small")
     order.add_item(pizza)
     order.get_toppings(1) == {"pepperoni": 1, "tomatoes": 1}
예제 #18
0
 def test_process_toppings(self):
     pizza = Pizza("vegetarian_pizza", 0, "small")
     value = pizza.process_toppings(["olives", "chicken", "olives"])
     assert value == {"chicken": 1, "olives": 2}
예제 #19
0
 def test_is_pizza(self):
     order = Order(1)
     pizza = Pizza("vegetarian_pizza", 0, "small")
     order.add_item(pizza)
     assert order.is_pizza(1) == "True"
예제 #20
0
 def test_get_item_by_id(self):
     order = Order(1)
     pizza = Pizza("vegetarian_pizza", 0, "small")
     order.add_item(pizza)
     assert order.get_item_by_id(1) != "None"
예제 #21
0
 def test_update_prices(self):
     pizza = Pizza("pepperoni_pizza", 0, "small")
     pizza.set_type("vegetarian_pizza")
     pizza.toppings = pizza.set_up_toppings()
     pizza.update_prices()
     assert pizza.get_price() == 9.99
예제 #22
0
 def test_update_toppings_add(self):
     pizza = Pizza("pepperoni_pizza", 0, "small")
     pizza.update_toppings("add", ["olives"])
     assert pizza.toppings == {'pepperoni': 1, 'tomatoes': 1, 'olives': 1}
예제 #23
0
 def test_update_toppings_remove(self):
     pizza = Pizza("pepperoni_pizza", 0, "small")
     pizza.update_toppings("remove", ["tomatoes"])
     assert pizza.toppings == {'pepperoni': 1}
예제 #24
0
 def test_set_id(self):
     pizza = Pizza("vegetarian_pizza", 0, "small")
     pizza.set_id(1)
     assert pizza.id == 1
예제 #25
0
 def test_update_pizza_size(self):
     pizza = Pizza("pepperoni_pizza", 0, "small")
     pizza.update_pizza_size("medium")
     assert pizza.size == "medium"
예제 #26
0
 def test_update_item_toppings(self):
     order = Order(1)
     pizza = Pizza("pepperoni_pizza", 0, "small")
     order.add_item(pizza)
     order.update_item(1, "toppings", ["olives"], "add")
     assert pizza.toppings == {"pepperoni": 1, "tomatoes": 1, "olives": 1}
예제 #27
0
 def test_create_pizza(self):
     pizza = Pizza("vegetarian_pizza", 0, "small")
     assert isinstance(pizza, Pizza)
예제 #28
0
 def test_set_up_toppings(self):
     pizza = Pizza("pepperoni_pizza", 0, "small")
     pizza.set_up_toppings()
     pizza.get_toppings() == {"pepperoni": 1, "tomatoes": 1}