diff --git a/src/main/java/mi/hdm/recipes/CategoryManager.java b/src/main/java/mi/hdm/recipes/CategoryManager.java index a526d9fd6494cf2d9d6c8ecb3a5911ae43508999..ab3b6d967b42148751ff0e1a06535c7614e62fb2 100644 --- a/src/main/java/mi/hdm/recipes/CategoryManager.java +++ b/src/main/java/mi/hdm/recipes/CategoryManager.java @@ -1,5 +1,6 @@ package mi.hdm.recipes; +import mi.hdm.exceptions.InvalidCategoryException; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -40,19 +41,19 @@ public class CategoryManager { } public boolean deleteCategory(Category c) { - log.info("Category {} deleted successfully."); + log.info("Category {} deleted successfully.", c.getName()); return allCategories.remove(c); } public boolean deleteCategory(String name) { - Category c = getCategoryByName(name).orElseThrow(() -> new NullPointerException("Category not found.")); - log.info("Category {} deleted successfully."); + Category c = getCategoryByName(name).orElseThrow(() -> new InvalidCategoryException("Category not found.")); + log.info("Category {} deleted successfully.", name); return allCategories.remove(c); } - public List<Category> getAllCategories(){ + public List<Category> getAllCategories() { return allCategories; } diff --git a/src/main/java/mi/hdm/recipes/NutritionCalculator.java b/src/main/java/mi/hdm/recipes/NutritionCalculator.java index f0e21c538969b2e80f122198197a0656d7de3ef4..c10bf68e347bdd59918dccd02720e64f1e623bc1 100644 --- a/src/main/java/mi/hdm/recipes/NutritionCalculator.java +++ b/src/main/java/mi/hdm/recipes/NutritionCalculator.java @@ -1,14 +1,15 @@ package mi.hdm.recipes; import mi.hdm.mealPlan.MealPlan; - -import java.util.Map; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import java.util.Map; + public class NutritionCalculator { private static final Logger log = LogManager.getLogger(NutritionCalculator.class); + /** * Method to calculate the nutrition table for a recipe out of its ingredients. * @@ -30,6 +31,7 @@ public class NutritionCalculator { for (RecipeComponent entry : ingredients.keySet()) { final Map<Nutrition, Double> nutritionTable = entry.getNutritionTable().getTable(); + //TODO: This doesnt apply if the measurement is PIECE or PINCH! FIX! totalCals += nutritionTable.get(Nutrition.CALORIES) * ingredients.get(entry) / 100; totalCarbs += nutritionTable.get(Nutrition.CARBS) * ingredients.get(entry) / 100; totalFats += nutritionTable.get(Nutrition.FAT) * ingredients.get(entry) / 100; @@ -41,7 +43,7 @@ public class NutritionCalculator { return new NutritionTable(totalCals, totalCarbs, totalFats, totalProteins, totalFibers, totalSalt); } - //TODO: implement calcuating nutrition table from meal plan + //TODO: implement calcuating nutrition table from meal plan and List<Recipe> public static NutritionTable calculateNutritionTable(MealPlan mealPlan) { return null; } diff --git a/src/main/java/mi/hdm/recipes/RecipeManager.java b/src/main/java/mi/hdm/recipes/RecipeManager.java index edcae9976d7577d32a750134055639e25314a160..25f05ea4c1d678266097b37d932d82244b17d5aa 100644 --- a/src/main/java/mi/hdm/recipes/RecipeManager.java +++ b/src/main/java/mi/hdm/recipes/RecipeManager.java @@ -4,6 +4,7 @@ import mi.hdm.exceptions.InvalidRecipeException; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import java.util.ArrayList; import java.util.List; import java.util.Optional; @@ -11,36 +12,43 @@ public class RecipeManager { private final List<Recipe> recipes; private final CategoryManager categories; private final IngredientManager ingredients; - private final NutritionCalculator nutritionCalculator; private static final Logger log = LogManager.getLogger(RecipeManager.class); - public RecipeManager(List<Recipe> recipes, CategoryManager categories, IngredientManager ingredients, NutritionCalculator nutritionCalculator) { + public RecipeManager(List<Recipe> recipes, CategoryManager categories, IngredientManager ingredients) { this.recipes = recipes; this.categories = categories; this.ingredients = ingredients; - this.nutritionCalculator = nutritionCalculator; } - public void addRecipe(Recipe recipe){ + public RecipeManager() { + recipes = new ArrayList<>(); + categories = CategoryManager.getInstance(); + ingredients = IngredientManager.getInstance(); + } + public void addRecipe(Recipe recipe) { if (getRecipeByName(recipe.getName()).isEmpty()) { recipes.add(recipe); - log.info("Recipe {} added successfully."); + log.info("Recipe {} added successfully.", recipe.getName()); } else { - log.error("Recipe {} not added because it already exists."); + log.error("Recipe {} not added because it already exists.", recipe.getName()); throw new InvalidRecipeException("Recipe name already exists"); } - //TODO: Exception or false? } public Recipe deleteRecipe(int i) { - log.info("Recipe {} deleted successfully."); + log.info("Recipe {} deleted successfully.", recipes.get(i).getName()); return recipes.remove(i); } public boolean deleteRecipe(String name) { - Recipe r = getRecipeByName(name).orElseThrow(); - log.info("Recipe {} deleted successfully."); + Recipe r = getRecipeByName(name).orElseThrow(() -> new InvalidRecipeException("A recipe with this name does not exist")); + log.info("Recipe {} deleted successfully.", name); + return recipes.remove(r); + } + + //TODO: this returns false, other methods throw an exception. whats the best approach? + public boolean deleteRecipe(Recipe r) { return recipes.remove(r); } @@ -53,4 +61,7 @@ public class RecipeManager { return Optional.empty(); } + public List<Recipe> getRecipes() { + return recipes; + } } diff --git a/src/test/java/mi/hdm/recipes/RecipeManagerTest.java b/src/test/java/mi/hdm/recipes/RecipeManagerTest.java new file mode 100644 index 0000000000000000000000000000000000000000..0feea92272939e5470fdb4fa4ad08ac176dd1d08 --- /dev/null +++ b/src/test/java/mi/hdm/recipes/RecipeManagerTest.java @@ -0,0 +1,57 @@ +package mi.hdm.recipes; + +import mi.hdm.exceptions.InvalidRecipeException; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.util.List; + +import static org.junit.jupiter.api.Assertions.*; + +class RecipeManagerTest { + private RecipeManager underTest; + private final Recipe recipeOne = ValidObjectsPool.getValidRecipeOne(); + private final Recipe recipeTwo = ValidObjectsPool.getValidRecipeTwo(); + + @BeforeEach + public void setup() { + underTest = new RecipeManager(); + } + + @Test + public void shouldAddRecipeWhenNotDuplicate() { + //when + underTest.addRecipe(recipeOne); + + //expect + List<Recipe> expected = List.of(recipeOne); + assertEquals(expected, underTest.getRecipes()); + } + + @Test + public void shouldNotAddDuplicateRecipe() { + //given + underTest.addRecipe(recipeOne); + + //expect + assertThrows(InvalidRecipeException.class, () -> underTest.addRecipe(recipeOne)); + } + + @Test + public void canDeleteRecipeByName() { + //given + underTest.addRecipe(recipeOne); + + //when + underTest.deleteRecipe(recipeOne.getName()); + + //expect + assertEquals(List.of(), underTest.getRecipes()); + } + + @Test + public void removingInvalidRecipes() { + assertFalse(underTest.deleteRecipe(recipeOne)); + assertThrows(InvalidRecipeException.class, () -> underTest.deleteRecipe("This recipe does not exist")); + } +} diff --git a/src/test/java/mi/hdm/recipes/RecipeTest.java b/src/test/java/mi/hdm/recipes/RecipeTest.java index 4caf9090d59fb3dc3c35f0c7cadba3be4b3741a6..8fdc169495b8c1c104d0812da9ff6084b6f7e773 100644 --- a/src/test/java/mi/hdm/recipes/RecipeTest.java +++ b/src/test/java/mi/hdm/recipes/RecipeTest.java @@ -43,6 +43,12 @@ class RecipeTest { assertThrows(InvalidRecipeException.class, () -> new Recipe("Valid name", recipeMap, "Description!", List.of(), null, 100)); } + @Test + @DisplayName("Test invalid prep time: Recipes with an invalid preparation time (number is negative) should not be created") + void shouldNotCreateRecipeWithInvalidPrepTime() { + assertThrows(InvalidRecipeException.class, () -> new Recipe("Valid name", recipeMap, "Description!", null, null, -1)); + } + @Test void getNutritionTableWhenSetManually() { //given @@ -103,4 +109,4 @@ class RecipeTest { underTest.getCategories() ); } -} \ No newline at end of file +} diff --git a/src/test/java/mi/hdm/recipes/ValidObjectsPool.java b/src/test/java/mi/hdm/recipes/ValidObjectsPool.java index c9a1bd0f86bc8e22083cb056f341b30aa4335b1e..013cdf977b0be94d1f4f5124911cf524c772d261 100644 --- a/src/test/java/mi/hdm/recipes/ValidObjectsPool.java +++ b/src/test/java/mi/hdm/recipes/ValidObjectsPool.java @@ -1,6 +1,7 @@ package mi.hdm.recipes; import java.util.List; +import java.util.Map; public class ValidObjectsPool { private final static Category categoryOne = new Category("Frühstück", 0xFF0000); @@ -9,6 +10,8 @@ public class ValidObjectsPool { private final static NutritionTable nutritionTableTwo = new NutritionTable(263.1, 25.2, 0.2, 0.0, 0.0, 0.8); private final static Ingredient ingredientOne = new Ingredient(Measurement.GRAM, "Zucker", nutritionTableOne); private final static Ingredient ingredientTwo = new Ingredient(Measurement.PIECE, "Apple", nutritionTableTwo); + private final static Recipe recipeOne = new Recipe("Valid recipe 1", Map.of(ingredientOne, 100, ingredientTwo, 200), "Description for this recipe", List.of("step one", "step two"), List.of(categoryOne), 15); + private final static Recipe recipeTwo = new Recipe("Apfelkuchen", Map.of(ingredientOne, 250), "Mein liebster APfelkuchen", List.of("mjam mjam", "ich liebe kochen"), List.of(categoryTwo, categoryOne), 25); public static NutritionTable getValidNutritionTableOne() { return nutritionTableOne; @@ -41,4 +44,12 @@ public class ValidObjectsPool { public static List<Category> getValidCategoryList() { return List.of(categoryOne, categoryTwo); } + + public static Recipe getValidRecipeOne() { + return recipeOne; + } + + public static Recipe getValidRecipeTwo() { + return recipeTwo; + } }