From 689b80ba42758c10f51ef5428c1c5bbcf36ed112 Mon Sep 17 00:00:00 2001 From: Your Name Date: Fri, 8 Aug 2025 13:48:49 +0200 Subject: [PATCH 01/21] first user story test --- .../java/com/booleanuk/core/BasketTest.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 src/test/java/com/booleanuk/core/BasketTest.java diff --git a/src/test/java/com/booleanuk/core/BasketTest.java b/src/test/java/com/booleanuk/core/BasketTest.java new file mode 100644 index 000000000..413041c00 --- /dev/null +++ b/src/test/java/com/booleanuk/core/BasketTest.java @@ -0,0 +1,19 @@ +package com.booleanuk.core; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import java.util.List; + +public class BasketTest { + @Test + public void testAddBagelToBasket() { + Basket basket = new Basket(); + Bagel bagel = new Bagel("BGLO", "Bagel", "Onion", 0.49); + + boolean added = basket.addItem(bagel); + + Assertions.assertTrue(added); + Assertions.assertEquals(1, basket.getItems().size()); + Assertions.assertEquals("Onion", basket.getItems().get(0).getVariant()); + } +} \ No newline at end of file From c7b842c6849f81c1811cc076502093a6d951ae2a Mon Sep 17 00:00:00 2001 From: Your Name Date: Fri, 8 Aug 2025 13:56:51 +0200 Subject: [PATCH 02/21] Green: source code, test passed --- src/main/java/com/booleanuk/core/Bagel.java | 31 ++++++++++++++++++++ src/main/java/com/booleanuk/core/Basket.java | 20 +++++++++++++ 2 files changed, 51 insertions(+) create mode 100644 src/main/java/com/booleanuk/core/Bagel.java create mode 100644 src/main/java/com/booleanuk/core/Basket.java diff --git a/src/main/java/com/booleanuk/core/Bagel.java b/src/main/java/com/booleanuk/core/Bagel.java new file mode 100644 index 000000000..0ab26e899 --- /dev/null +++ b/src/main/java/com/booleanuk/core/Bagel.java @@ -0,0 +1,31 @@ +package com.booleanuk.core; + +public class Bagel { + private String sku; + private String name; + private String variant; + private double price; + + public Bagel(String sku, String name, String variant, double price) { + this.sku = sku; + this.name = name; + this.variant = variant; + this.price = price; + } + + public String getSku() { + return sku; + } + + public String getName() { + return name; + } + + public String getVariant() { + return variant; + } + + public double getPrice() { + return price; + } +} \ No newline at end of file diff --git a/src/main/java/com/booleanuk/core/Basket.java b/src/main/java/com/booleanuk/core/Basket.java new file mode 100644 index 000000000..adfed4353 --- /dev/null +++ b/src/main/java/com/booleanuk/core/Basket.java @@ -0,0 +1,20 @@ +package com.booleanuk.core; + +import java.util.ArrayList; +import java.util.List; + +public class Basket { + private List items; + + public Basket() { + this.items = new ArrayList<>(); + } + + public boolean addItem(Bagel bagel) { + return this.items.add(bagel); + } + + public List getItems() { + return this.items; + } +} \ No newline at end of file From e9d22f721edf016dfed2d6003d5fa924fc5363bd Mon Sep 17 00:00:00 2001 From: Your Name Date: Fri, 8 Aug 2025 14:06:02 +0200 Subject: [PATCH 03/21] user story 2 Red: Test --- .../java/com/booleanuk/core/BasketTest.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/test/java/com/booleanuk/core/BasketTest.java b/src/test/java/com/booleanuk/core/BasketTest.java index 413041c00..589e4e4b1 100644 --- a/src/test/java/com/booleanuk/core/BasketTest.java +++ b/src/test/java/com/booleanuk/core/BasketTest.java @@ -16,4 +16,21 @@ public void testAddBagelToBasket() { Assertions.assertEquals(1, basket.getItems().size()); Assertions.assertEquals("Onion", basket.getItems().get(0).getVariant()); } + + @Test + public void testRemoveBagelFromBasket() { + Basket basket = new Basket(); + Bagel bagel1 = new Bagel("BGLO", "Bagel", "Onion", 0.49); + Bagel bagel2 = new Bagel("BGLP", "Bagel", "Plain", 0.39); + + basket.addItem(bagel1); + basket.addItem(bagel2); + + boolean removed = basket.removeItem(bagel1); + + Assertions.assertTrue(removed); + Assertions.assertEquals(1, basket.getItems().size()); + Assertions.assertEquals("Plain", basket.getItems().get(0).getVariant()); + } + } \ No newline at end of file From 1a7304f78a2e5350118dd6421fe9615b9791a551 Mon Sep 17 00:00:00 2001 From: Your Name Date: Fri, 8 Aug 2025 14:10:55 +0200 Subject: [PATCH 04/21] user story 2, Green: Test passed --- src/main/java/com/booleanuk/core/Basket.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/com/booleanuk/core/Basket.java b/src/main/java/com/booleanuk/core/Basket.java index adfed4353..452ab0554 100644 --- a/src/main/java/com/booleanuk/core/Basket.java +++ b/src/main/java/com/booleanuk/core/Basket.java @@ -17,4 +17,9 @@ public boolean addItem(Bagel bagel) { public List getItems() { return this.items; } + + public boolean removeItem(Bagel bagel) { + return this.items.remove(bagel); + } + } \ No newline at end of file From f835808b8199201e5b2ba6218990ee2e0b598279 Mon Sep 17 00:00:00 2001 From: Your Name Date: Fri, 8 Aug 2025 14:19:11 +0200 Subject: [PATCH 05/21] user story 3, Red: Test --- src/test/java/com/booleanuk/core/BasketTest.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/test/java/com/booleanuk/core/BasketTest.java b/src/test/java/com/booleanuk/core/BasketTest.java index 589e4e4b1..b91e80e36 100644 --- a/src/test/java/com/booleanuk/core/BasketTest.java +++ b/src/test/java/com/booleanuk/core/BasketTest.java @@ -33,4 +33,17 @@ public void testRemoveBagelFromBasket() { Assertions.assertEquals("Plain", basket.getItems().get(0).getVariant()); } + @Test + public void testBasketIsFull() { + Basket basket = new Basket(2); + Bagel bagel1 = new Bagel("BGLO", "Bagel", "Onion", 0.49); + Bagel bagel2 = new Bagel("BGLP", "Bagel", "Plain", 0.39); + Bagel bagel3 = new Bagel("BGLE", "Bagel", "Everything", 0.49); + + Assertions.assertTrue(basket.addItem(bagel1)); + Assertions.assertTrue(basket.addItem(bagel2)); + Assertions.assertFalse(basket.addItem(bagel3)); + } + + } \ No newline at end of file From 0e5a68415725b171642332cf2bed48b5e88d7a7e Mon Sep 17 00:00:00 2001 From: Your Name Date: Fri, 8 Aug 2025 14:26:13 +0200 Subject: [PATCH 06/21] user story 3, Green: Test passed --- src/main/java/com/booleanuk/core/Basket.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/main/java/com/booleanuk/core/Basket.java b/src/main/java/com/booleanuk/core/Basket.java index 452ab0554..cb3a3473e 100644 --- a/src/main/java/com/booleanuk/core/Basket.java +++ b/src/main/java/com/booleanuk/core/Basket.java @@ -5,12 +5,17 @@ public class Basket { private List items; + private int capacity; public Basket() { this.items = new ArrayList<>(); + this.capacity = 5; } public boolean addItem(Bagel bagel) { + if (this.items.size() >= this.capacity) { + return false; + } return this.items.add(bagel); } @@ -22,4 +27,10 @@ public boolean removeItem(Bagel bagel) { return this.items.remove(bagel); } + public Basket(int capacity) { + this.items = new ArrayList<>(); + this.capacity = capacity; + } + + } \ No newline at end of file From c315dfd4056baea06dee16357d817de2f6326b95 Mon Sep 17 00:00:00 2001 From: Your Name Date: Fri, 8 Aug 2025 14:36:17 +0200 Subject: [PATCH 07/21] user story 4, Red: Test --- src/test/java/com/booleanuk/core/BasketTest.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/test/java/com/booleanuk/core/BasketTest.java b/src/test/java/com/booleanuk/core/BasketTest.java index b91e80e36..335499a96 100644 --- a/src/test/java/com/booleanuk/core/BasketTest.java +++ b/src/test/java/com/booleanuk/core/BasketTest.java @@ -45,5 +45,15 @@ public void testBasketIsFull() { Assertions.assertFalse(basket.addItem(bagel3)); } + @Test + public void testChangeBasketCapacity() { + Basket basket = new Basket(); + + Assertions.assertEquals(5, basket.getCapacity()); + + basket.setCapacity(10); + + Assertions.assertEquals(10, basket.getCapacity()); + } } \ No newline at end of file From c07d1cf869b53c1e78ef7251759d22b2094078ea Mon Sep 17 00:00:00 2001 From: Your Name Date: Fri, 8 Aug 2025 14:37:32 +0200 Subject: [PATCH 08/21] user story 4, Green: Test passed --- src/main/java/com/booleanuk/core/Basket.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/main/java/com/booleanuk/core/Basket.java b/src/main/java/com/booleanuk/core/Basket.java index cb3a3473e..beb67c7f3 100644 --- a/src/main/java/com/booleanuk/core/Basket.java +++ b/src/main/java/com/booleanuk/core/Basket.java @@ -32,5 +32,12 @@ public Basket(int capacity) { this.capacity = capacity; } + public int getCapacity() { + return this.capacity; + } + + public void setCapacity(int capacity) { + this.capacity = capacity; + } } \ No newline at end of file From 42faccaa4bf2a0038bfc484c668de1f00190625a Mon Sep 17 00:00:00 2001 From: Your Name Date: Fri, 8 Aug 2025 14:46:18 +0200 Subject: [PATCH 09/21] user story 5, test passed already method removeItem --- src/test/java/com/booleanuk/core/BasketTest.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/test/java/com/booleanuk/core/BasketTest.java b/src/test/java/com/booleanuk/core/BasketTest.java index 335499a96..18821c10b 100644 --- a/src/test/java/com/booleanuk/core/BasketTest.java +++ b/src/test/java/com/booleanuk/core/BasketTest.java @@ -56,4 +56,18 @@ public void testChangeBasketCapacity() { Assertions.assertEquals(10, basket.getCapacity()); } + @Test + public void testRemoveNonexistentBagelFromBasket() { + Basket basket = new Basket(); + Bagel onionBagel = new Bagel("BGLO", "Bagel", "Onion", 0.49); + Bagel plainBagel = new Bagel("BGLP", "Bagel", "Plain", 0.39); + + basket.addItem(onionBagel); + boolean result = basket.removeItem(plainBagel); + + Assertions.assertFalse(result); + Assertions.assertEquals(1, basket.getItems().size()); + } + + } \ No newline at end of file From bbf9457e8d3819e6856e13f650da3aa7e23f481f Mon Sep 17 00:00:00 2001 From: Your Name Date: Fri, 8 Aug 2025 14:58:01 +0200 Subject: [PATCH 10/21] user story 6, Red: test --- .../java/com/booleanuk/core/BasketTest.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/test/java/com/booleanuk/core/BasketTest.java b/src/test/java/com/booleanuk/core/BasketTest.java index 18821c10b..7e5cfce5a 100644 --- a/src/test/java/com/booleanuk/core/BasketTest.java +++ b/src/test/java/com/booleanuk/core/BasketTest.java @@ -69,5 +69,25 @@ public void testRemoveNonexistentBagelFromBasket() { Assertions.assertEquals(1, basket.getItems().size()); } + @Test + public void testGetTotalCostBasket(){ + Basket basket = new Basket(); + + Bagel bagel1 = new Bagel("BGLO", "Bagel", "Onion", 0.49); + Bagel bagel2 = new Bagel("BGLP", "Bagel", "Plain", 0.39); + Bagel bagel3 = new Bagel("BGLE", "Bagel", "Everything", 0.49); + Bagel bagel4 = new Bagel("BGLS","Bagel", "Sesame",0.49); + + basket.addItem(bagel1); + basket.addItem(bagel2); + basket.addItem(bagel3); + basket.addItem(bagel4); + + double total = basket.getTotalCost(); + + Assertions.assertEquals(1.86, total, 0.001); + + } + } \ No newline at end of file From 700d4ab9e605e1551969a2fa0466117e261f9138 Mon Sep 17 00:00:00 2001 From: Your Name Date: Fri, 8 Aug 2025 15:00:41 +0200 Subject: [PATCH 11/21] user story 6, Green: test passed --- src/main/java/com/booleanuk/core/Basket.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/main/java/com/booleanuk/core/Basket.java b/src/main/java/com/booleanuk/core/Basket.java index beb67c7f3..40168ffbd 100644 --- a/src/main/java/com/booleanuk/core/Basket.java +++ b/src/main/java/com/booleanuk/core/Basket.java @@ -40,4 +40,12 @@ public void setCapacity(int capacity) { this.capacity = capacity; } + public double getTotalCost(){ + double total = 0.0; + for (Bagel bagel : this.items){ + total += bagel.getPrice(); + } + return total; + } + } \ No newline at end of file From 233460400d53235ba0ac7f43b2663c51e945c613 Mon Sep 17 00:00:00 2001 From: Your Name Date: Fri, 8 Aug 2025 15:38:51 +0200 Subject: [PATCH 12/21] user story 7, Red: test --- src/test/java/com/booleanuk/core/BasketTest.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/test/java/com/booleanuk/core/BasketTest.java b/src/test/java/com/booleanuk/core/BasketTest.java index 7e5cfce5a..b0ec6fb2e 100644 --- a/src/test/java/com/booleanuk/core/BasketTest.java +++ b/src/test/java/com/booleanuk/core/BasketTest.java @@ -89,5 +89,14 @@ public void testGetTotalCostBasket(){ } + @Test + public void testGetBagelPriceFromInventory() { + Inventory inventory = new Inventory(); + double price = inventory.getPriceBySku("BGLO"); // Onion Bagel + + Assertions.assertEquals(0.49, price, 0.001); + } + + } \ No newline at end of file From 78b9b07b4d34e9b4c774a10d19ea6ec37c6a6634 Mon Sep 17 00:00:00 2001 From: Your Name Date: Fri, 8 Aug 2025 15:43:03 +0200 Subject: [PATCH 13/21] user story 7, Green: test passed --- .../java/com/booleanuk/core/Inventory.java | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 src/main/java/com/booleanuk/core/Inventory.java diff --git a/src/main/java/com/booleanuk/core/Inventory.java b/src/main/java/com/booleanuk/core/Inventory.java new file mode 100644 index 000000000..fd98923cf --- /dev/null +++ b/src/main/java/com/booleanuk/core/Inventory.java @@ -0,0 +1,34 @@ +package com.booleanuk.core; + +import java.util.HashMap; +import java.util.Map; + +public class Inventory { + private Map stock; + + public Inventory() { + this.stock = new HashMap<>(); + stock.put("BGLO", new Bagel("BGLO", "Bagel", "Onion", 0.49)); + stock.put("BGLP", new Bagel("BGLP", "Bagel", "Plain", 0.39)); + stock.put("BGLE", new Bagel("BGLE", "Bagel", "Everything", 0.49)); + stock.put("BGLS", new Bagel("BGLS", "Bagel", "Sesame", 0.49)); + stock.put("COFB", new Bagel("COFB", "Coffee", "Black", 0.99)); + stock.put("COFW", new Bagel("COFW", "Coffee", "White", 1.19)); + stock.put("COFC", new Bagel("COFC", "Coffee", "Capuccino", 1.29)); + stock.put("COFL", new Bagel("COFL", "Coffee", "Latte", 1.29)); + stock.put("FILB", new Bagel("FILB", "Filling", "Bacon", 0.12)); + stock.put("FILE", new Bagel("FILE", "Filling", "Egg", 0.12)); + stock.put("FILC", new Bagel("FILC", "Filling", "Cheese", 0.12)); + stock.put("FILX", new Bagel("FILX", "Filling", "Cream Cheese", 0.12)); + stock.put("FILS", new Bagel("FILS", "Filling", "Smoked Salmon", 0.12)); + stock.put("FILH", new Bagel("FILH", "Filling", "Ham", 0.12)); + } + + public double getPriceBySku(String sku) { + Bagel item = stock.get(sku); + if (item != null) { + return item.getPrice(); + } + throw new IllegalArgumentException("Item not found in inventory"); + } +} From 431215fc323ebaf0b6c3494705bbbbfa23cd5814 Mon Sep 17 00:00:00 2001 From: Your Name Date: Fri, 8 Aug 2025 15:55:44 +0200 Subject: [PATCH 14/21] user story 8, Red: test --- src/test/java/com/booleanuk/core/BasketTest.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/test/java/com/booleanuk/core/BasketTest.java b/src/test/java/com/booleanuk/core/BasketTest.java index b0ec6fb2e..9865a5b86 100644 --- a/src/test/java/com/booleanuk/core/BasketTest.java +++ b/src/test/java/com/booleanuk/core/BasketTest.java @@ -97,6 +97,18 @@ public void testGetBagelPriceFromInventory() { Assertions.assertEquals(0.49, price, 0.001); } + @Test + public void testCannotAddMoreThanCapacity() { + Basket basket = new Basket(2); // max 2 items + Bagel bagel1 = new Bagel("BGLO", "Bagel", "Onion", 0.49); + Bagel bagel2 = new Bagel("BGLP", "Bagel", "Plain", 0.39); + Bagel bagel3 = new Bagel("BGLE", "Bagel", "Everything", 0.49); + Assertions.assertTrue(basket.addItem(bagel1)); + Assertions.assertTrue(basket.addItem(bagel2)); + Assertions.assertFalse(basket.addItem(bagel3)); // capacity exceeded + + Assertions.assertEquals(2, basket.getItems().size()); + } } \ No newline at end of file From 68b373cb47ad146e407b82582614418087dbf9c8 Mon Sep 17 00:00:00 2001 From: Your Name Date: Fri, 8 Aug 2025 15:58:33 +0200 Subject: [PATCH 15/21] user story 8, Green: test passed --- src/main/java/com/booleanuk/core/Basket.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/com/booleanuk/core/Basket.java b/src/main/java/com/booleanuk/core/Basket.java index 40168ffbd..8db01eb4a 100644 --- a/src/main/java/com/booleanuk/core/Basket.java +++ b/src/main/java/com/booleanuk/core/Basket.java @@ -8,8 +8,7 @@ public class Basket { private int capacity; public Basket() { - this.items = new ArrayList<>(); - this.capacity = 5; + this(5); } public boolean addItem(Bagel bagel) { From 2580fe36902049c15725d4b24751a748da1496af Mon Sep 17 00:00:00 2001 From: Your Name Date: Fri, 8 Aug 2025 16:05:05 +0200 Subject: [PATCH 16/21] user story 9, Red: test --- src/test/java/com/booleanuk/core/BasketTest.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/test/java/com/booleanuk/core/BasketTest.java b/src/test/java/com/booleanuk/core/BasketTest.java index 9865a5b86..d752cef1b 100644 --- a/src/test/java/com/booleanuk/core/BasketTest.java +++ b/src/test/java/com/booleanuk/core/BasketTest.java @@ -111,4 +111,12 @@ public void testCannotAddMoreThanCapacity() { Assertions.assertEquals(2, basket.getItems().size()); } + @Test + public void testGetFillingPriceBeforeAdding() { + Filling bacon = new Filling("FILB", "Bacon", 0.12); + Assertions.assertEquals("Bacon", bacon.getName()); + Assertions.assertEquals(0.12, bacon.getPrice()); + Assertions.assertEquals("FILB", bacon.getSku()); + } + } \ No newline at end of file From 5b0e8e03e26ba375eedefa297f003c6334cf3a25 Mon Sep 17 00:00:00 2001 From: Your Name Date: Fri, 8 Aug 2025 16:23:26 +0200 Subject: [PATCH 17/21] user story 9, Green: test passed --- src/main/java/com/booleanuk/core/Filling.java | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 src/main/java/com/booleanuk/core/Filling.java diff --git a/src/main/java/com/booleanuk/core/Filling.java b/src/main/java/com/booleanuk/core/Filling.java new file mode 100644 index 000000000..79a6fe2d7 --- /dev/null +++ b/src/main/java/com/booleanuk/core/Filling.java @@ -0,0 +1,25 @@ +package com.booleanuk.core; + +public class Filling { + private String sku; + private String name; + private double price; + + public Filling(String sku, String name, double price) { + this.sku = sku; + this.name = name; + this.price = price; + } + + public String getSku() { + return sku; + } + + public String getName() { + return name; + } + + public double getPrice() { + return price; + } +} From 7de7605cb2d3e1734c288c0c550cee14988029a5 Mon Sep 17 00:00:00 2001 From: Your Name Date: Fri, 8 Aug 2025 16:39:25 +0200 Subject: [PATCH 18/21] user story 10, Red: test --- .../java/com/booleanuk/core/BasketTest.java | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/test/java/com/booleanuk/core/BasketTest.java b/src/test/java/com/booleanuk/core/BasketTest.java index d752cef1b..66c9bba30 100644 --- a/src/test/java/com/booleanuk/core/BasketTest.java +++ b/src/test/java/com/booleanuk/core/BasketTest.java @@ -106,7 +106,7 @@ public void testCannotAddMoreThanCapacity() { Assertions.assertTrue(basket.addItem(bagel1)); Assertions.assertTrue(basket.addItem(bagel2)); - Assertions.assertFalse(basket.addItem(bagel3)); // capacity exceeded + Assertions.assertFalse(basket.addItem(bagel3)); Assertions.assertEquals(2, basket.getItems().size()); } @@ -119,4 +119,20 @@ public void testGetFillingPriceBeforeAdding() { Assertions.assertEquals("FILB", bacon.getSku()); } + @Test + public void testAddFillingToBagel() { + Basket basket = new Basket(); + Bagel bagel = new Bagel("BGLO", "Bagel", "Onion", 0.49); + Filling bacon = new Filling("FILB", "Bacon", 0.12); + Filling egg = new Filling("FILE", "Egg", 0.12); + + bagel.addFilling(bacon); + bagel.addFilling(egg); + basket.addItem(bagel); + + Assertions.assertEquals(2, bagel.getFillings().size()); + Assertions.assertEquals(0.73, basket.getTotalCost(), 0.001); // 0.49 + 0.12 + 0.12 + } + + } \ No newline at end of file From 89572f2c6106a6ecaa234fa5f325579891666e9b Mon Sep 17 00:00:00 2001 From: Your Name Date: Fri, 8 Aug 2025 16:47:54 +0200 Subject: [PATCH 19/21] user story 10, Green: test passed class diagram --- domain.md | 61 ++++++++++++++++++++ src/main/java/com/booleanuk/core/Bagel.java | 14 +++++ src/main/java/com/booleanuk/core/Basket.java | 4 ++ 3 files changed, 79 insertions(+) create mode 100644 domain.md diff --git a/domain.md b/domain.md new file mode 100644 index 000000000..9343c2e36 --- /dev/null +++ b/domain.md @@ -0,0 +1,61 @@ +# class diagram + +``` +------------------ +| Product | +------------------ +| - sku: String | +| - name: String | +| - variant: String | +| - price: double | +------------------ +| + getPrice(): double | +| + getName(): String | +| + getVariant(): String | +| + getSku(): String | +------------------ + +------------------ +| Filling | +------------------ +| - inherits from Product | +------------------ + +------------------ +| Bagel | +------------------ +| - inherits from Product | +| - fillings: List | +------------------ +| + addFilling(Filling): void | +| + removeFilling(Filling): void | +| + getFillings(): List | +| + getTotalPrice(): double | +------------------ + +------------------ +| Basket | +------------------ +| - items: List | +| - capacity: int | +------------------ +| + addItem(Bagel): boolean | +| + removeItem(Bagel): boolean | +| + isFull(): boolean | +| + getTotalCost(): double | +| + getItems(): List | +| + setCapacity(int): void | +| + hasItem(Bagel): boolean | +------------------ + +------------------ +| Inventory | +------------------ +| - products: List | +------------------ +| + getProductBySku(String): Product | +| + isInStock(String): boolean | +| + getPrice(String): double | +| + getAll(): List | +------------------ +``` \ No newline at end of file diff --git a/src/main/java/com/booleanuk/core/Bagel.java b/src/main/java/com/booleanuk/core/Bagel.java index 0ab26e899..49eee315f 100644 --- a/src/main/java/com/booleanuk/core/Bagel.java +++ b/src/main/java/com/booleanuk/core/Bagel.java @@ -1,5 +1,8 @@ package com.booleanuk.core; +import java.util.List; +import java.util.ArrayList; + public class Bagel { private String sku; private String name; @@ -28,4 +31,15 @@ public String getVariant() { public double getPrice() { return price; } + + private List fillings = new ArrayList<>(); + + public void addFilling(Filling filling) { + this.fillings.add(filling); + } + + public List getFillings() { + return this.fillings; + } + } \ No newline at end of file diff --git a/src/main/java/com/booleanuk/core/Basket.java b/src/main/java/com/booleanuk/core/Basket.java index 8db01eb4a..7bb18fe09 100644 --- a/src/main/java/com/booleanuk/core/Basket.java +++ b/src/main/java/com/booleanuk/core/Basket.java @@ -43,8 +43,12 @@ public double getTotalCost(){ double total = 0.0; for (Bagel bagel : this.items){ total += bagel.getPrice(); + for (Filling filling : bagel.getFillings()) { + total += filling.getPrice(); + } } return total; } + } \ No newline at end of file From 571a829e5a1979cf246b79ccfc0f85a8584cb93d Mon Sep 17 00:00:00 2001 From: Your Name Date: Mon, 11 Aug 2025 12:50:29 +0200 Subject: [PATCH 20/21] Refactor: interface PricedItem --- src/main/java/com/booleanuk/core/Bagel.java | 2 +- src/main/java/com/booleanuk/core/Filling.java | 2 +- src/main/java/com/booleanuk/core/PricedItem.java | 5 +++++ 3 files changed, 7 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/booleanuk/core/PricedItem.java diff --git a/src/main/java/com/booleanuk/core/Bagel.java b/src/main/java/com/booleanuk/core/Bagel.java index 49eee315f..1eb5892f3 100644 --- a/src/main/java/com/booleanuk/core/Bagel.java +++ b/src/main/java/com/booleanuk/core/Bagel.java @@ -3,7 +3,7 @@ import java.util.List; import java.util.ArrayList; -public class Bagel { +public class Bagel implements PricedItem { private String sku; private String name; private String variant; diff --git a/src/main/java/com/booleanuk/core/Filling.java b/src/main/java/com/booleanuk/core/Filling.java index 79a6fe2d7..3b6b0f865 100644 --- a/src/main/java/com/booleanuk/core/Filling.java +++ b/src/main/java/com/booleanuk/core/Filling.java @@ -1,6 +1,6 @@ package com.booleanuk.core; -public class Filling { +public class Filling implements PricedItem{ private String sku; private String name; private double price; diff --git a/src/main/java/com/booleanuk/core/PricedItem.java b/src/main/java/com/booleanuk/core/PricedItem.java new file mode 100644 index 000000000..5390c06b9 --- /dev/null +++ b/src/main/java/com/booleanuk/core/PricedItem.java @@ -0,0 +1,5 @@ +package com.booleanuk.core; + +public interface PricedItem { + double getPrice(); +} From ef4c0c01e3a7f1e969290080dee232a1d02ac783 Mon Sep 17 00:00:00 2001 From: Your Name Date: Tue, 12 Aug 2025 12:24:47 +0200 Subject: [PATCH 21/21] Refactor finished --- src/main/java/com/booleanuk/core/Bagel.java | 33 +++++------------- src/main/java/com/booleanuk/core/Basket.java | 26 +++++++------- src/main/java/com/booleanuk/core/Filling.java | 23 ++----------- .../java/com/booleanuk/core/Inventory.java | 16 ++++----- src/main/java/com/booleanuk/core/Item.java | 34 +++++++++++++++++++ src/main/java/com/booleanuk/core/Product.java | 7 ++++ 6 files changed, 74 insertions(+), 65 deletions(-) create mode 100644 src/main/java/com/booleanuk/core/Item.java create mode 100644 src/main/java/com/booleanuk/core/Product.java diff --git a/src/main/java/com/booleanuk/core/Bagel.java b/src/main/java/com/booleanuk/core/Bagel.java index 1eb5892f3..ceaee142e 100644 --- a/src/main/java/com/booleanuk/core/Bagel.java +++ b/src/main/java/com/booleanuk/core/Bagel.java @@ -1,45 +1,28 @@ package com.booleanuk.core; -import java.util.List; import java.util.ArrayList; +import java.util.List; -public class Bagel implements PricedItem { - private String sku; - private String name; - private String variant; +public class Bagel extends Item { private double price; + private List fillings = new ArrayList<>(); public Bagel(String sku, String name, String variant, double price) { - this.sku = sku; - this.name = name; - this.variant = variant; + super(sku, name, variant, price); this.price = price; } - public String getSku() { - return sku; - } - - public String getName() { - return name; - } - - public String getVariant() { - return variant; - } + @Override public double getPrice() { return price; } - private List fillings = new ArrayList<>(); - public void addFilling(Filling filling) { - this.fillings.add(filling); + fillings.add(filling); } public List getFillings() { - return this.fillings; + return fillings; } - -} \ No newline at end of file +} diff --git a/src/main/java/com/booleanuk/core/Basket.java b/src/main/java/com/booleanuk/core/Basket.java index 7bb18fe09..6437840f0 100644 --- a/src/main/java/com/booleanuk/core/Basket.java +++ b/src/main/java/com/booleanuk/core/Basket.java @@ -4,26 +4,26 @@ import java.util.List; public class Basket { - private List items; + private List items; private int capacity; public Basket() { this(5); } - public boolean addItem(Bagel bagel) { + public boolean addItem(Item item) { if (this.items.size() >= this.capacity) { return false; } - return this.items.add(bagel); + return this.items.add(item); } - public List getItems() { + public List getItems() { return this.items; } - public boolean removeItem(Bagel bagel) { - return this.items.remove(bagel); + public boolean removeItem(Item item) { + return this.items.remove(item); } public Basket(int capacity) { @@ -41,14 +41,16 @@ public void setCapacity(int capacity) { public double getTotalCost(){ double total = 0.0; - for (Bagel bagel : this.items){ - total += bagel.getPrice(); - for (Filling filling : bagel.getFillings()) { - total += filling.getPrice(); + for (Item item : this.items){ + total += item.getPrice(); + + if (item instanceof Bagel) { + Bagel bagel = (Bagel) item; + for (Filling filling : bagel.getFillings()) { + total += filling.getPrice(); + } } } return total; } - - } \ No newline at end of file diff --git a/src/main/java/com/booleanuk/core/Filling.java b/src/main/java/com/booleanuk/core/Filling.java index 3b6b0f865..bb04c5106 100644 --- a/src/main/java/com/booleanuk/core/Filling.java +++ b/src/main/java/com/booleanuk/core/Filling.java @@ -1,25 +1,8 @@ package com.booleanuk.core; -public class Filling implements PricedItem{ - private String sku; - private String name; - private double price; - +public class Filling extends Item { public Filling(String sku, String name, double price) { - this.sku = sku; - this.name = name; - this.price = price; - } - - public String getSku() { - return sku; - } - - public String getName() { - return name; - } - - public double getPrice() { - return price; + super(sku, name, null, price); } } + diff --git a/src/main/java/com/booleanuk/core/Inventory.java b/src/main/java/com/booleanuk/core/Inventory.java index fd98923cf..1075af593 100644 --- a/src/main/java/com/booleanuk/core/Inventory.java +++ b/src/main/java/com/booleanuk/core/Inventory.java @@ -4,7 +4,7 @@ import java.util.Map; public class Inventory { - private Map stock; + private Map stock; public Inventory() { this.stock = new HashMap<>(); @@ -16,16 +16,16 @@ public Inventory() { stock.put("COFW", new Bagel("COFW", "Coffee", "White", 1.19)); stock.put("COFC", new Bagel("COFC", "Coffee", "Capuccino", 1.29)); stock.put("COFL", new Bagel("COFL", "Coffee", "Latte", 1.29)); - stock.put("FILB", new Bagel("FILB", "Filling", "Bacon", 0.12)); - stock.put("FILE", new Bagel("FILE", "Filling", "Egg", 0.12)); - stock.put("FILC", new Bagel("FILC", "Filling", "Cheese", 0.12)); - stock.put("FILX", new Bagel("FILX", "Filling", "Cream Cheese", 0.12)); - stock.put("FILS", new Bagel("FILS", "Filling", "Smoked Salmon", 0.12)); - stock.put("FILH", new Bagel("FILH", "Filling", "Ham", 0.12)); + stock.put("FILB", new Filling("FILB", "Bacon", 0.12)); + stock.put("FILE", new Filling("FILE", "Egg", 0.12)); + stock.put("FILC", new Filling("FILC", "Cheese", 0.12)); + stock.put("FILX", new Filling("FILX", "Cream Cheese", 0.12)); + stock.put("FILS", new Filling("FILS", "Smoked Salmon", 0.12)); + stock.put("FILH", new Filling("FILH", "Ham", 0.12)); } public double getPriceBySku(String sku) { - Bagel item = stock.get(sku); + Item item = stock.get(sku); if (item != null) { return item.getPrice(); } diff --git a/src/main/java/com/booleanuk/core/Item.java b/src/main/java/com/booleanuk/core/Item.java new file mode 100644 index 000000000..9cf57ff51 --- /dev/null +++ b/src/main/java/com/booleanuk/core/Item.java @@ -0,0 +1,34 @@ +package com.booleanuk.core; + +public abstract class Item implements Product { + protected String sku; + protected String name; + protected double price; + protected String variant; + + public Item(String sku, String name, String variant, double price) { + this.sku = sku; + this.name = name; + this.variant = variant; + this.price = price; + } + @Override + public String getSku() { + return sku; + } + + @Override + public String getName() { + return name; + } + + @Override + public String getVariant() { + return variant; + } + + @Override + public double getPrice() { + return price; + } +} diff --git a/src/main/java/com/booleanuk/core/Product.java b/src/main/java/com/booleanuk/core/Product.java new file mode 100644 index 000000000..0cbdb4b93 --- /dev/null +++ b/src/main/java/com/booleanuk/core/Product.java @@ -0,0 +1,7 @@ +package com.booleanuk.core; + +public interface Product extends PricedItem{ + String getSku(); + String getName(); + String getVariant(); +}