Пример #1
0
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
Пример #2
0
def test_fooditemequivalent_create_with_invalid_conversion(app_handle):
    """
    Try to add fooditemequivalent with invalid conversion factor
    """
    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)
        with pytest.raises(IntegrityError):
            db.session.commit()
Пример #3
0
def test_ingredient_create_with_invalid_fooditemequivalent(app_handle):
    """
    Try to add ingredient with invalid fooditemequivalent 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)
    fooditem = FoodItem(
        id=food_item_id,
        # food_item_category_id=food_item_category_id,
        name="donkey_salt",
        emission_per_kg=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(fooditemcategory)
        with pytest.raises(IntegrityError):
            db.session.commit()
Пример #4
0
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()
Пример #5
0
def test_fooditem_create_with_invalid_emission(app_handle):
    """
    Try to add fooditem with negative emission per kg
    """
    food_item_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)
    # fooditemcategory = FoodItemCategory(
    #     id=food_item_category_id,
    #     name="donkey"
    # )
    with app_handle.app_context():
        db.session.add(fooditem)
        # db.session.add(fooditemcategory)
        with pytest.raises(IntegrityError):
            db.session.commit()
Пример #6
0
def test_fooditem_create(app_handle):
    """
    Add valid fooditem
    """
    food_item_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)
    # fooditemcategory = FoodItemCategory(
    #     id=food_item_category_id,
    #     name="donkey"
    # )
    with app_handle.app_context():
        db.session.add(fooditem)
        # db.session.add(fooditemcategory)
        db.session.commit()
        assert FoodItem.query.count() == 1
        fooditem = FoodItem.query.filter_by(id=food_item_id).first()
Пример #7
0
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
Пример #8
0
    def post(self):
        if request.json is None:
            return MasonBuilder.get_error_response(
                415, "Request content type must be JSON", "")

        required = FoodItemBuilder.food_item_schema()['required']

        missing = []

        for field in required:
            if field not in request.json.keys():
                missing.append(field)

        if len(missing) > 0:
            details = []
            for field in missing:
                details.append("Missing field:{0}".format(field))
            return MasonBuilder.get_error_response(
                400, "Incomplete request - missing fields", details)

        name = request.json['name']
        if len(name) < 1:
            return MasonBuilder.get_error_response(400, "Name is too short",
                                                   "")
        elif len(name) > 128:
            return MasonBuilder.get_error_response(400, "Name is too long", "")

        raw_emission_per_kg = request.json['emission_per_kg']
        emission_per_kg = 0.0
        try:
            emission_per_kg = float(raw_emission_per_kg)
        except ValueError:
            return MasonBuilder.get_error_response(
                400, "emission_per_kg must be a number", "")
        if emission_per_kg < 0:
            return MasonBuilder.get_error_response(
                400, "emission_per_kg must be a positive number", "")

        vegan = False
        if 'vegan' in request.json.keys(
        ) and request.json['vegan'] is not None:
            vegan = request.json['vegan']

        organic = False
        if 'organic' in request.json.keys(
        ) and request.json['organic'] is not None:
            organic = request.json['organic']

        domestic = False
        if 'domestic' in request.json.keys(
        ) and request.json['domestic'] is not None:
            domestic = request.json['domestic']

        food_item = FoodItem(name=name,
                             emission_per_kg=emission_per_kg,
                             vegan=vegan,
                             organic=organic,
                             domestic=domestic)
        db.session.add(food_item)
        db.session.commit()
        headers = {
            "Location": api.url_for(FoodItemResource,
                                    food_item_id=food_item.id)
        }
        response = Response(status=201, headers=headers)
        return response