Example #1
0
    def test_ingredient_add(self):
        """ Tests the add ingredient method. """
        widget = RecipeTableWidget()

        ingredient_name_0 = random_string()
        energy_value_0 = random_energy_value()
        ingredient_mass_0 = "100"

        ingredient_name_1 = random_string()
        energy_value_1 = random_energy_value()
        ingredient_mass_1 = "100"

        widget.add_ingredient(ingredient_name_0, energy_value_0,
                              ingredient_mass_0)

        self.assertEqual(widget.rowCount(), 1)
        self._assert_table_row(widget, 0, ingredient_name_0, energy_value_0,
                               ingredient_mass_0)

        widget.add_ingredient(ingredient_name_1, energy_value_1,
                              ingredient_mass_1)

        self.assertEqual(widget.rowCount(), 2)
        self._assert_table_row(widget, 0, ingredient_name_0, energy_value_0,
                               ingredient_mass_0)
        self._assert_table_row(widget, 1, ingredient_name_1, energy_value_1,
                               ingredient_mass_1)
Example #2
0
    def test_energy_data_str_no_mass(self):
        """ Tests the energy_data_str function with no mass parameter. """

        energy_value = random_energy_value()

        energy_value_str = energy_data_str(energy_value, None)

        expected_str = _build_expected_energy_data_str(energy_value, None)

        self.assertEqual(energy_value_str, expected_str)
Example #3
0
    def test_energy_data_str_basic(self):
        """ Tests the energy_data_str function. """

        energy_value = random_energy_value()

        energy_value_str = energy_data_str(energy_value)

        expected_str = _build_expected_energy_data_str(energy_value, 100)

        self.assertEqual(energy_value_str, expected_str)
Example #4
0
    def test_energy_value(self):
        """ Tests energy_value method. """
        recipe_builder = RecipeBuilder()

        energy_value = random_energy_value()

        recipe_builder._energy_value_per_serving = energy_value

        self.assertEqual(energy_value.calories,
                         recipe_builder.energy_value().calories)
    def test_set_total(self):
        """ Tests the set total method. """
        widget = TotalEnergyValueWidget()

        energy_value = random_energy_value()

        widget.set_total(energy_value)

        self.assertEqual(widget.widget.text(),
                         energy_data_str(energy_value, product_mass=None))
    def test_set_energy_value(self):
        """ Tests the set energy value method. """
        widget = EnergyValueWidget()

        energy_value = random_energy_value()
        ingredient_mass = 100

        widget.set_energy_value(energy_value, ingredient_mass)

        self.assertEqual(widget.widget.text(),
                         energy_data_str(energy_value, ingredient_mass))
Example #7
0
    def test_recalculate(self):
        """ Tests recalculate method. """
        recipe_builder = RecipeBuilder()

        ingredient = build_ingredient("test", "g.", 100)
        energy_value = random_energy_value()

        recipe_builder._ingredients = [(ingredient, energy_value)]

        recipe_builder.recalculate()

        self.assertAlmostEqual(
            energy_value.calories,
            recipe_builder._energy_value_per_serving.calories)
Example #8
0
    def test_add_ingredient(self):
        """ Tests add_ingredient method. """
        recipe_builder = RecipeBuilder()

        ingredient = build_ingredient("test", "g.", 100)
        energy_value = random_energy_value()

        recipe_builder.add_ingredient(ingredient, energy_value)

        self.assertEqual(recipe_builder._ingredients,
                         [(ingredient, energy_value)])

        self.assertAlmostEqual(
            energy_value.calories,
            recipe_builder._energy_value_per_serving.calories)
Example #9
0
    def test_energy_data_str_scale(self):
        """ Tests the energy_data_str function with scale parameter. """

        energy_value = random_energy_value()
        ingredient_mass = 250

        energy_value_str = energy_data_str(energy_value,
                                           ingredient_mass,
                                           needs_scaling=True)

        energy_value = scale(energy_value, ingredient_mass)

        expected_str = _build_expected_energy_data_str(energy_value,
                                                       ingredient_mass)

        self.assertEqual(energy_value_str, expected_str)
Example #10
0
    def test_set_serves_changes_energy_value(self):
        """ Tests that after set_serves method energy value is recalculated. """
        recipe_builder = RecipeBuilder()

        ingredient = build_ingredient("test", "g.", 100)
        energy_value = random_energy_value()

        recipe_builder.add_ingredient(ingredient, energy_value)

        recipe_builder.set_serves(2)

        # Default is 100.0, for 2 serves it will be 50.0
        energy_value = scale(energy_value, 50.0)

        self.assertAlmostEqual(
            energy_value.calories,
            recipe_builder._energy_value_per_serving.calories)
Example #11
0
    def test_scale(self):
        """ Tests the scale function. """

        energy_value = random_energy_value()
        scale_factor = 250.0

        scaled = scale(energy_value, scale_factor)

        expected_energy_value = energy_value
        expected_energy_value.calories *= scale_factor / 100.0
        expected_energy_value.protein *= scale_factor / 100.0
        expected_energy_value.fat *= scale_factor / 100.0
        expected_energy_value.carbohydrates *= scale_factor / 100.0

        self.assertAlmostEqual(scaled.calories, expected_energy_value.calories)
        self.assertAlmostEqual(scaled.protein, expected_energy_value.protein)
        self.assertAlmostEqual(scaled.fat, expected_energy_value.fat)
        self.assertAlmostEqual(scaled.carbohydrates,
                               expected_energy_value.carbohydrates)
Example #12
0
    def test_build(self):
        """ Tests build method. """
        ingredient = build_ingredient("test", "g.", 100)
        energy_value = random_energy_value()

        # Nothing is set.
        recipe_builder = RecipeBuilder()

        with self.assertRaises(RuntimeError):
            recipe_builder.build()

        # Ingredients are not set.
        recipe_builder = RecipeBuilder()
        recipe_builder.set_recipe_name("Test")
        recipe_builder.set_recipe_text("Test")

        with self.assertRaises(RuntimeError):
            recipe_builder.build()

        # Recipe name is not set.
        recipe_builder = RecipeBuilder()
        recipe_builder.add_ingredient(ingredient, energy_value)
        recipe_builder.set_recipe_text("Test")

        with self.assertRaises(RuntimeError):
            recipe_builder.build()

        # Everything is set.
        recipe_builder = RecipeBuilder()
        recipe_builder.add_ingredient(ingredient, energy_value)
        recipe_builder.set_recipe_text("Test")
        recipe_builder.set_recipe_name("Test")
        recipe_builder.set_serves(2)

        recipe = recipe_builder.build()

        self.assertTrue(isinstance(recipe, Recipe))
        self.assertEqual(recipe.name, "Test")
        self.assertEqual(recipe.text, "Test")
        self.assertEqual(recipe.serves_amount, 2)
        self.assertEqual(recipe.ingredients, [ingredient])
        self.assertEqual(recipe.energy_value_per_serving,
                         scale(energy_value, 50.0))
class TestRecipeBuilderWidget(UsesQApplication):
    """ Tests for the recipe builder widget. """

    # This is a test, access to the private members is ok.
    # pylint: disable=protected-access

    CALORIES_DATA = {"test": random_energy_value()}

    def assert_children_type(self, widget, expected_type):
        """ Verifies that widget has a child with a given name and this child has expected type. """
        child = widget.findChild(expected_type)
        self.assertIsNotNone(child, "Expected find child with type {}, got None".format(expected_type))
        self.assertTrue(isinstance(child, expected_type))

    def test_recipe_builder_layout(self):
        """ Tests the widget layout. """
        widget = RecipeBuilderWidget(self.CALORIES_DATA)

        expected_children = [
            RecipeNameWidget,
            ServesAmountWidget,
            IngredientWidget,
            EnergyValueWidget,
            RecipeTableWidget,
            TotalEnergyValueWidget,
            RecipeTextWidget,
            SaveButtonWidget,
        ]

        for expected_type in expected_children:
            self.assert_children_type(widget, expected_type)

    def test_recipe_builder_ingredient_entered(self):
        """ Tests that when ingredient entered, the energy value string is updated. """
        widget = RecipeBuilderWidget(self.CALORIES_DATA)

        energy_value_widget = widget.findChild(EnergyValueWidget)

        widget._ingredient_entered("test", 100)

        expected_text = energy_data_str(self.CALORIES_DATA["test"], 100)
        self.assertEqual(energy_value_widget.widget.text(), expected_text)

    def test_recipe_builder_incorrected_ingredient_entered(self):
        """ Tests that when incorrect ingredient entered, nothing happens. """
        widget = RecipeBuilderWidget(self.CALORIES_DATA)

        energy_value_widget = widget.findChild(EnergyValueWidget)

        widget._ingredient_entered("wrong_value", 100)

        expected_text = ""
        self.assertEqual(energy_value_widget.widget.text(), expected_text)

    def test_recipe_builder_ingredient_finalized(self):
        """ Tests that when ingredient finalized, child widgets are updated as expected. """
        widget = RecipeBuilderWidget(self.CALORIES_DATA)

        total_energy_value_widget = widget.findChild(TotalEnergyValueWidget)
        recipe_table_widget = widget.findChild(RecipeTableWidget)

        widget._ingredient_finalized("test", 100)

        expected_text = energy_data_str(self.CALORIES_DATA["test"], None)
        self.assertEqual(total_energy_value_widget.widget.text(), expected_text)
        self.assertEqual(recipe_table_widget.rowCount(), 1)
        self.assertEqual(len(widget._recipe_builder._ingredients), 1)

    @patch("nutrition.recipe.RecipeManager.save", autospec=True)
    @patch(f"{IMPORT_PATH_PREFIX}.recipe_name.RecipeNameWidget.name", return_value="Test", autospec=True)
    @patch(f"{IMPORT_PATH_PREFIX}.recipe_text.RecipeTextWidget.get_text", return_value="Test", autospec=True)
    def test_recipe_builder_save(self, mock_save, _mock_name, _mock_get_text):
        """ Tests _on_save_button_clicked method. """
        widget = RecipeBuilderWidget(self.CALORIES_DATA)

        widget._ingredient_finalized("test", 100)

        widget._on_save_button_clicked()

        self.assertTrue(mock_save.called)