def test_fooditemequivalent_create_with_duplicate_unittype(app_handle): """ Try to add food item equivalent with duplicate food item type """ food_item_id = random.randint(1, 10000000) food_item_equivalent_id_1 = random.randint(1, 10000000) food_item_equivalent_id_2 = random.randint(1, 10000000) # food_item_category_id = random.randint(1, 10000000) fooditem = FoodItem( id=food_item_id, # food_item_category_id=food_item_category_id, name="donkey_salt", emission_per_kg=100.0) fooditemequivalent_1 = FoodItemEquivalent(id=food_item_equivalent_id_1, food_item_id=food_item_id, unit_type=10, conversion_factor=100.0) fooditemequivalent_2 = FoodItemEquivalent(id=food_item_equivalent_id_2, food_item_id=food_item_id, unit_type=10, conversion_factor=100.0) # fooditemcategory = FoodItemCategory( # id=food_item_category_id, # name="donkey" # ) with app_handle.app_context(): db.session.add(fooditem) db.session.add(fooditemequivalent_1) db.session.add(fooditemequivalent_2) # db.session.add(fooditemcategory) with pytest.raises(IntegrityError): db.session.commit()
def test_fooditemequivalent_create(app_handle): """ Add valid fooditemequivalent """ food_item_id = random.randint(1, 10000000) food_item_equivalent_id = random.randint(1, 10000000) # food_item_category_id = random.randint(1, 10000000) fooditem = FoodItem( id=food_item_id, # food_item_category_id=food_item_category_id, name="donkey_salt", emission_per_kg=100.0) fooditemequivalent = FoodItemEquivalent(id=food_item_equivalent_id, food_item_id=food_item_id, unit_type=10, conversion_factor=100.0) # fooditemcategory = FoodItemCategory( # id=food_item_category_id, # name="donkey" # ) with app_handle.app_context(): db.session.add(fooditem) db.session.add(fooditemequivalent) # db.session.add(fooditemcategory) db.session.commit() assert FoodItem.query.count() == 1 fooditem = FoodItem.query.filter_by(id=food_item_id).first() assert fooditem.food_item_equivalents[0].id == food_item_equivalent_id
def test_ingredient_create_with_invalid_fooditem(app_handle): """ Try to add ingredient with invalid fooditem id """ recipe_id = random.randint(1, 10000000) ingredient_id = random.randint(1, 10000000) food_item_id = random.randint(1, 10000000) food_item_equivalent_id = random.randint(1, 10000000) # food_item_category_id = random.randint(1, 10000000) recipe = Recipe(id=recipe_id, name="donkey_recipe") ingredient = Ingredient(id=ingredient_id, recipe_id=recipe_id, food_item_id=food_item_id, food_item_equivalent_id=food_item_equivalent_id, quantity=10.0) fooditemequivalent = FoodItemEquivalent(id=food_item_equivalent_id, food_item_id=food_item_id, unit_type=10, conversion_factor=100.0) # fooditemcategory = FoodItemCategory( # id=food_item_category_id, # name="donkey" # ) with app_handle.app_context(): db.session.add(recipe) db.session.add(ingredient) db.session.add(fooditemequivalent) # db.session.add(fooditemcategory) with pytest.raises(IntegrityError): db.session.commit()
def post(self, food_item_id): """ Add food item equivalent """ if request.json is None: return MasonBuilder.get_error_response( 415, "Request content type must be JSON", "") food_item = FoodItem.query.filter_by(id=food_item_id).first() if food_item is None: return MasonBuilder.get_error_response( 404, "Food item not found.", "FoodItem with id {0} not found".format(food_item_id)) equivalents = FoodItemEquivalent.query.filter_by( food_item_id=food_item.id).all() keys = request.json.keys() if not set(["unit_type", "conversion_factor"]).issubset(keys): return MasonBuilder.get_error_response( 400, "Incomplete request - missing fields", "") unit_type = request.json['unit_type'] if unit_type not in [e.value for e in EquivalentUnitType]: return MasonBuilder.get_error_response( 400, "Unknown unit type", "Unknown unit type {}".format(unit_type)) if unit_type in [e.unit_type for e in equivalents]: return MasonBuilder.get_error_response( 409, "Unit type is reserved", "Food item equivalent with unit type {} already exists".format( unit_type)) conversion_factor = 0 try: conversion_factor = float(request.json['conversion_factor']) if conversion_factor < 0: raise ValueError except ValueError: return MasonBuilder.get_error_response( 400, "Conversion factor must be a positive number", "") food_item_equivalent = FoodItemEquivalent( food_item_id=food_item.id, unit_type=unit_type, conversion_factor=conversion_factor) db.session.add(food_item_equivalent) db.session.commit() headers = { "Location": api.url_for(FoodItemEquivalentResource, food_item_id=food_item.id, food_item_equivalent_id=food_item_equivalent.id) } response = Response(None, 201, headers=headers) return response
def test_fooditemequivalent_create_with_invalid_fooditem(app_handle): """ Try to add fooditemequivalent with invalid fooditem id """ food_item_id = random.randint(1, 10000000) food_item_equivalent_id = random.randint(1, 10000000) fooditemequivalent = FoodItemEquivalent(id=food_item_equivalent_id, food_item_id=food_item_id, unit_type=10, conversion_factor=100.0) with app_handle.app_context(): db.session.add(fooditemequivalent) with pytest.raises(IntegrityError): db.session.commit()
def _populate_db(): for i in range(1, 4): r = Recipe(id=i, name="test-recipe-{}".format(i)) db.session.add(r) f = FoodItem( id=i, name="test-food-item-{}".format(i), emission_per_kg=float(i), ) db.session.add(f) e = FoodItemEquivalent(id=i, food_item_id=i, unit_type="kilogram", conversion_factor=1) db.session.add(e) g = Ingredient( id=i, recipe_id=i, food_item_id=i, food_item_equivalent_id=i, quantity=1.0, ) db.session.add(g) h = FoodItem(id=4, name="lonely-food-item", emission_per_kg=5.5) db.session.add(h) j = FoodItemEquivalent(id=4, food_item_id=4, unit_type="teaspoon", conversion_factor=202.88) db.session.add(j) db.session.commit()
def test_ingredient_create(app_handle): """ Add valid ingredient """ recipe_id = random.randint(1, 10000000) ingredient_id = random.randint(1, 10000000) food_item_id = random.randint(1, 10000000) food_item_equivalent_id = random.randint(1, 10000000) # food_item_category_id = random.randint(1, 10000000) recipe = Recipe(id=recipe_id, name="donkey_recipe") ingredient = Ingredient(id=ingredient_id, recipe_id=recipe_id, food_item_id=food_item_id, food_item_equivalent_id=food_item_equivalent_id, quantity=10.0) fooditem = FoodItem( id=food_item_id, # food_item_category_id=food_item_category_id, name="donkey_salt", emission_per_kg=100.0) fooditemequivalent = FoodItemEquivalent(id=food_item_equivalent_id, food_item_id=food_item_id, unit_type=10, conversion_factor=100.0) # fooditemcategory = FoodItemCategory( # id=food_item_category_id, # name="donkey" # ) with app_handle.app_context(): db.session.add(recipe) db.session.add(ingredient) db.session.add(fooditem) db.session.add(fooditemequivalent) # db.session.add(fooditemcategory) db.session.commit() assert Ingredient.query.count() == 1 ingredient = Ingredient.query.filter_by(id=ingredient_id).first() assert ingredient.recipe.id == recipe_id assert ingredient.food_item.id == food_item_id assert ingredient.food_item_equivalent_id == food_item_equivalent_id