From abe9750b9f404b72e67c9b0627ea8c4e77fbabc4 Mon Sep 17 00:00:00 2001 From: Mei Chang van der Werff Date: Thu, 22 Jan 2026 14:45:20 +0100 Subject: [PATCH 1/6] Ingredients in the ingredient view are alphabetically ordered --- .../main/java/commons/FormalIngredient.java | 44 ++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/commons/src/main/java/commons/FormalIngredient.java b/commons/src/main/java/commons/FormalIngredient.java index 88d713a..4fb1eed 100644 --- a/commons/src/main/java/commons/FormalIngredient.java +++ b/commons/src/main/java/commons/FormalIngredient.java @@ -55,8 +55,50 @@ public class FormalIngredient extends RecipeIngredient implements Scalable unit = Unit.fromString(unitSuffix); + if (unit.isEmpty() || !unit.get().isFormal() || unit.get().conversionFactor <= 0) { + return amount + unitSuffix; + } + + Unit currentUnit = unit.get(); + double baseAmount = amount * currentUnit.conversionFactor; + + if(currentUnit == Unit.GRAMME){ + if(baseAmount >= Unit.TONNE.conversionFactor){ + return baseAmount /Unit.TONNE.conversionFactor + Unit.TONNE.suffix; + } + if(baseAmount >=Unit.KILOGRAMME.conversionFactor) { + return baseAmount / Unit.KILOGRAMME.conversionFactor + Unit.KILOGRAMME.suffix; + } + } + + if (currentUnit == Unit.MILLILITRE && baseAmount >= Unit.LITRE.conversionFactor) { + return baseAmount /Unit.LITRE.conversionFactor + Unit.LITRE.suffix; + } + + + if(currentUnit == Unit.TABLESPOON){ + if(amount>=32){ + return amount/32 + Unit.POUND.suffix; + } + if(amount>=16){ + return amount /16 + Unit.CUP.suffix; + } + if(amount>=2){ + return amount /2 + Unit.OUNCE.suffix; + } + } + if (currentUnit == Unit.OUNCE && baseAmount >= 16) { + return amount / 16 + Unit.POUND.suffix; + } + + return amount + currentUnit.suffix; + } + public String toString() { - return amount + unitSuffix + " of " + ingredient.name; + return normalisedUnit()+ " of " + ingredient.name; } @Override From 8238e9b4624eec139e69862ebe6083faad8d3d7d Mon Sep 17 00:00:00 2001 From: Mei Chang van der Werff Date: Thu, 22 Jan 2026 14:50:48 +0100 Subject: [PATCH 2/6] fix: magic numbers --- .../main/java/commons/FormalIngredient.java | 23 ++++++++++++------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/commons/src/main/java/commons/FormalIngredient.java b/commons/src/main/java/commons/FormalIngredient.java index 4fb1eed..b977ab3 100644 --- a/commons/src/main/java/commons/FormalIngredient.java +++ b/commons/src/main/java/commons/FormalIngredient.java @@ -15,6 +15,11 @@ public class FormalIngredient extends RecipeIngredient implements Scalable=32){ - return amount/32 + Unit.POUND.suffix; + if(amount>=tbspToPoundConvert){ + return amount/tbspToPoundConvert + Unit.POUND.suffix; } - if(amount>=16){ - return amount /16 + Unit.CUP.suffix; + if(amount>=tbspToCupConvert){ + return amount /tbspToCupConvert + Unit.CUP.suffix; } - if(amount>=2){ - return amount /2 + Unit.OUNCE.suffix; + if(amount>=tbspToOunceConvert){ + return amount /tbspToOunceConvert + Unit.OUNCE.suffix; } } - if (currentUnit == Unit.OUNCE && baseAmount >= 16) { - return amount / 16 + Unit.POUND.suffix; + if (currentUnit == Unit.OUNCE && baseAmount >= OunceToPoundConvert) { + return amount / OunceToPoundConvert + Unit.POUND.suffix; } return amount + currentUnit.suffix; From 37fd3b18be69f6c98dd39560b1f0127a8ecc12fe Mon Sep 17 00:00:00 2001 From: Mei Chang van der Werff Date: Thu, 22 Jan 2026 15:06:30 +0100 Subject: [PATCH 3/6] added tests --- .../java/commons/FormalIngredientTest.java | 58 +++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 commons/src/test/java/commons/FormalIngredientTest.java diff --git a/commons/src/test/java/commons/FormalIngredientTest.java b/commons/src/test/java/commons/FormalIngredientTest.java new file mode 100644 index 0000000..deeeb46 --- /dev/null +++ b/commons/src/test/java/commons/FormalIngredientTest.java @@ -0,0 +1,58 @@ +package commons; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class FormalIngredientTest { + + @Test + void normaliseGramsToTest(){ + Ingredient ingredient = new Ingredient("Bread", 1, 2, 3); + FormalIngredient toKg = new FormalIngredient(ingredient,1_000,"g"); + FormalIngredient toTonne = new FormalIngredient(ingredient,1_000_000,"g"); + + + assertEquals(toKg.normalisedUnit(),"1.0kg"); + assertEquals(toTonne.normalisedUnit(),"1.0t"); + } + + @Test + void normaliseMillilitresToLitresTest(){ + Ingredient ingredient = new Ingredient("Bread", 1, 2, 3); + FormalIngredient toKg = new FormalIngredient(ingredient,1_000,"ml"); + + assertEquals(toKg.normalisedUnit(),"1.0l"); + } + + @Test + void normaliseOunceToPoundTest(){ + Ingredient ingredient = new Ingredient("Bread", 1, 2, 3); + FormalIngredient toPound = new FormalIngredient(ingredient,16,"oz"); + + assertEquals(toPound.normalisedUnit(),"1.0lb"); + } + + @Test + void normaliseTablespoonToTest(){ + Ingredient ingredient = new Ingredient("Bread", 1, 2, 3); + FormalIngredient toCup = new FormalIngredient(ingredient,16,"tbsp"); + FormalIngredient toPound = new FormalIngredient(ingredient,32,"tbsp"); + FormalIngredient toOunce = new FormalIngredient(ingredient,2,"tbsp"); + + assertEquals(toCup.normalisedUnit(),"1.0cup(s)"); + assertEquals(toPound.normalisedUnit(),"1.0lb"); + assertEquals(toOunce.normalisedUnit(),"1.0oz"); + } + + + @Test + void noNormaliseTest(){ + Ingredient ingredient = new Ingredient("Bread", 1, 2, 3); + FormalIngredient informal = new FormalIngredient(ingredient,10,""); + FormalIngredient toSmall = new FormalIngredient(ingredient,10,"g"); + + assertEquals(informal.normalisedUnit(),"10.0"); + assertEquals(toSmall.normalisedUnit(),"10.0g"); + } +} \ No newline at end of file From 3ca526e0f1c7da28f8458169973ea0a91bbd2f56 Mon Sep 17 00:00:00 2001 From: Mei Chang van der Werff Date: Thu, 22 Jan 2026 19:07:26 +0100 Subject: [PATCH 4/6] switched to switch case --- .../main/java/commons/FormalIngredient.java | 56 ++++++++++--------- 1 file changed, 30 insertions(+), 26 deletions(-) diff --git a/commons/src/main/java/commons/FormalIngredient.java b/commons/src/main/java/commons/FormalIngredient.java index b977ab3..58f3c76 100644 --- a/commons/src/main/java/commons/FormalIngredient.java +++ b/commons/src/main/java/commons/FormalIngredient.java @@ -72,35 +72,39 @@ public class FormalIngredient extends RecipeIngredient implements Scalable= Unit.TONNE.conversionFactor){ - return baseAmount /Unit.TONNE.conversionFactor + Unit.TONNE.suffix; + switch (currentUnit){ + case GRAMME -> { + if(baseAmount >= Unit.TONNE.conversionFactor){ + return baseAmount /Unit.TONNE.conversionFactor + Unit.TONNE.suffix; + }if(baseAmount >=Unit.KILOGRAMME.conversionFactor) { + return baseAmount / Unit.KILOGRAMME.conversionFactor + Unit.KILOGRAMME.suffix; + } } - if(baseAmount >=Unit.KILOGRAMME.conversionFactor) { - return baseAmount / Unit.KILOGRAMME.conversionFactor + Unit.KILOGRAMME.suffix; + + case MILLILITRE -> { + if (baseAmount >= Unit.LITRE.conversionFactor) { + return baseAmount /Unit.LITRE.conversionFactor + Unit.LITRE.suffix; + } + } + + case TABLESPOON -> { + if(amount>=tbspToPoundConvert){ + return amount/tbspToPoundConvert + Unit.POUND.suffix; + } + if(amount>=tbspToCupConvert){ + return amount /tbspToCupConvert + Unit.CUP.suffix; + } + if(amount>=tbspToOunceConvert){ + return amount /tbspToOunceConvert + Unit.OUNCE.suffix; + } + } + + case OUNCE -> { + if (baseAmount >= OunceToPoundConvert) { + return amount / OunceToPoundConvert + Unit.POUND.suffix; + } } } - - if (currentUnit == Unit.MILLILITRE && baseAmount >= Unit.LITRE.conversionFactor) { - return baseAmount /Unit.LITRE.conversionFactor + Unit.LITRE.suffix; - } - - - if(currentUnit == Unit.TABLESPOON){ - if(amount>=tbspToPoundConvert){ - return amount/tbspToPoundConvert + Unit.POUND.suffix; - } - if(amount>=tbspToCupConvert){ - return amount /tbspToCupConvert + Unit.CUP.suffix; - } - if(amount>=tbspToOunceConvert){ - return amount /tbspToOunceConvert + Unit.OUNCE.suffix; - } - } - if (currentUnit == Unit.OUNCE && baseAmount >= OunceToPoundConvert) { - return amount / OunceToPoundConvert + Unit.POUND.suffix; - } - return amount + currentUnit.suffix; } From 91997ae251a8e443aba68c0806ce1f75ac658419 Mon Sep 17 00:00:00 2001 From: Mei Chang van der Werff Date: Thu, 22 Jan 2026 20:18:06 +0100 Subject: [PATCH 5/6] 2 decimal limit --- .../main/java/commons/FormalIngredient.java | 21 +++++++++++-------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/commons/src/main/java/commons/FormalIngredient.java b/commons/src/main/java/commons/FormalIngredient.java index 58f3c76..ec7a382 100644 --- a/commons/src/main/java/commons/FormalIngredient.java +++ b/commons/src/main/java/commons/FormalIngredient.java @@ -2,6 +2,7 @@ package commons; import jakarta.persistence.Entity; +import java.text.DecimalFormat; import java.util.Objects; import java.util.Optional; @@ -19,6 +20,8 @@ public class FormalIngredient extends RecipeIngredient implements Scalable unit = Unit.fromString(unitSuffix); if (unit.isEmpty() || !unit.get().isFormal() || unit.get().conversionFactor <= 0) { - return amount + unitSuffix; + return numberFormat.format(amount) + unitSuffix; } Unit currentUnit = unit.get(); @@ -75,37 +78,37 @@ public class FormalIngredient extends RecipeIngredient implements Scalable { if(baseAmount >= Unit.TONNE.conversionFactor){ - return baseAmount /Unit.TONNE.conversionFactor + Unit.TONNE.suffix; + return numberFormat.format(baseAmount /Unit.TONNE.conversionFactor) + Unit.TONNE.suffix; }if(baseAmount >=Unit.KILOGRAMME.conversionFactor) { - return baseAmount / Unit.KILOGRAMME.conversionFactor + Unit.KILOGRAMME.suffix; + return numberFormat.format(baseAmount / Unit.KILOGRAMME.conversionFactor) + Unit.KILOGRAMME.suffix; } } case MILLILITRE -> { if (baseAmount >= Unit.LITRE.conversionFactor) { - return baseAmount /Unit.LITRE.conversionFactor + Unit.LITRE.suffix; + return numberFormat.format(baseAmount /Unit.LITRE.conversionFactor) + Unit.LITRE.suffix; } } case TABLESPOON -> { if(amount>=tbspToPoundConvert){ - return amount/tbspToPoundConvert + Unit.POUND.suffix; + return numberFormat.format(amount/tbspToPoundConvert) + Unit.POUND.suffix; } if(amount>=tbspToCupConvert){ - return amount /tbspToCupConvert + Unit.CUP.suffix; + return numberFormat.format(amount /tbspToCupConvert) + Unit.CUP.suffix; } if(amount>=tbspToOunceConvert){ - return amount /tbspToOunceConvert + Unit.OUNCE.suffix; + return numberFormat.format(amount /tbspToOunceConvert) + Unit.OUNCE.suffix; } } case OUNCE -> { if (baseAmount >= OunceToPoundConvert) { - return amount / OunceToPoundConvert + Unit.POUND.suffix; + return numberFormat.format(amount / OunceToPoundConvert) + Unit.POUND.suffix; } } } - return amount + currentUnit.suffix; + return numberFormat.format(amount) + currentUnit.suffix; } public String toString() { From e3e176939c874e416e93130524be13830b1697c7 Mon Sep 17 00:00:00 2001 From: Mei Chang van der Werff Date: Thu, 22 Jan 2026 20:26:52 +0100 Subject: [PATCH 6/6] fix: test fix after changes --- .../java/commons/FormalIngredientTest.java | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/commons/src/test/java/commons/FormalIngredientTest.java b/commons/src/test/java/commons/FormalIngredientTest.java index deeeb46..94edcd1 100644 --- a/commons/src/test/java/commons/FormalIngredientTest.java +++ b/commons/src/test/java/commons/FormalIngredientTest.java @@ -13,8 +13,8 @@ class FormalIngredientTest { FormalIngredient toTonne = new FormalIngredient(ingredient,1_000_000,"g"); - assertEquals(toKg.normalisedUnit(),"1.0kg"); - assertEquals(toTonne.normalisedUnit(),"1.0t"); + assertEquals(toKg.normalisedUnit(),"1.00kg"); + assertEquals(toTonne.normalisedUnit(),"1.00t"); } @Test @@ -22,7 +22,7 @@ class FormalIngredientTest { Ingredient ingredient = new Ingredient("Bread", 1, 2, 3); FormalIngredient toKg = new FormalIngredient(ingredient,1_000,"ml"); - assertEquals(toKg.normalisedUnit(),"1.0l"); + assertEquals(toKg.normalisedUnit(),"1.00l"); } @Test @@ -30,7 +30,7 @@ class FormalIngredientTest { Ingredient ingredient = new Ingredient("Bread", 1, 2, 3); FormalIngredient toPound = new FormalIngredient(ingredient,16,"oz"); - assertEquals(toPound.normalisedUnit(),"1.0lb"); + assertEquals(toPound.normalisedUnit(),"1.00lb"); } @Test @@ -40,9 +40,9 @@ class FormalIngredientTest { FormalIngredient toPound = new FormalIngredient(ingredient,32,"tbsp"); FormalIngredient toOunce = new FormalIngredient(ingredient,2,"tbsp"); - assertEquals(toCup.normalisedUnit(),"1.0cup(s)"); - assertEquals(toPound.normalisedUnit(),"1.0lb"); - assertEquals(toOunce.normalisedUnit(),"1.0oz"); + assertEquals(toCup.normalisedUnit(),"1.00cup(s)"); + assertEquals(toPound.normalisedUnit(),"1.00lb"); + assertEquals(toOunce.normalisedUnit(),"1.00oz"); } @@ -52,7 +52,7 @@ class FormalIngredientTest { FormalIngredient informal = new FormalIngredient(ingredient,10,""); FormalIngredient toSmall = new FormalIngredient(ingredient,10,"g"); - assertEquals(informal.normalisedUnit(),"10.0"); - assertEquals(toSmall.normalisedUnit(),"10.0g"); + assertEquals(informal.normalisedUnit(),"10.00"); + assertEquals(toSmall.normalisedUnit(),"10.00g"); } } \ No newline at end of file