コード例 #1
0
ファイル: db_test.py プロジェクト: tokuosma/PWP2020
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()
コード例 #2
0
ファイル: db_test.py プロジェクト: tokuosma/PWP2020
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
コード例 #3
0
ファイル: db_test.py プロジェクト: tokuosma/PWP2020
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()
コード例 #4
0
    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
コード例 #5
0
ファイル: db_test.py プロジェクト: tokuosma/PWP2020
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()
コード例 #6
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()
コード例 #7
0
ファイル: db_test.py プロジェクト: tokuosma/PWP2020
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