From 97dbbdb61284573358c19b608d9ad7a91e1658cb Mon Sep 17 00:00:00 2001 From: Magnus-droid Date: Thu, 9 Jan 2025 09:40:55 +0100 Subject: [PATCH 1/4] added domain-model.md --- domain-model.md | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 domain-model.md diff --git a/domain-model.md b/domain-model.md new file mode 100644 index 0000000..1e218e0 --- /dev/null +++ b/domain-model.md @@ -0,0 +1,28 @@ + +| Classes | Methods | Scenario | Result | +|------------------|-----------------------------------------------------|------------------------|----------------------------------------------| +| `CostCalculator` | `calculate(List itemCosts)` | No item prices in list | total = 0 | +| | | n items prices in list | total = sum of n item prices | +| | `addItem(List itemCosts, int newItemCost)` | Valid itemCost | Item price gets added at the end of the list | +| | | Invalid itemCost | Item doesn't get added + error message | + + + + + + + +| Classes | Methods | Scenario | Result | +|-----------|-------------------------------------------------|------------------------------------------------------------------------------|-------------------------------------| +| `Receipt` | `getNameAndPrice(HashMap)` | Valid key-value pairs | return the name and price correctly | +| | | Missing keys or value | return error | +| | `getQuantity()` | Valid quantity (not -1) | return quantity | +| | | Invalid quantity | return error | +| | `calculateTotal(String itemName, int quantity)` | itemName exists in the hashmap as a key and a valid value, quantity is valid | return the total price | +| | | Missing or invalid paramets | return error | + + + + + + From 33efa8cd0d88f502cfd4b5b12d1c0cf435273a6d Mon Sep 17 00:00:00 2001 From: Magnus-droid Date: Thu, 9 Jan 2025 10:40:35 +0100 Subject: [PATCH 2/4] Added unit tests for add() --- src/main/java/com/booleanuk/core/Basket.java | 14 ++++++++++++++ .../java/com/booleanuk/core/BasketTest.java | 19 +++++++++++++++++++ 2 files changed, 33 insertions(+) create mode 100644 src/main/java/com/booleanuk/core/Basket.java create mode 100644 src/test/java/com/booleanuk/core/BasketTest.java 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 0000000..cfd163a --- /dev/null +++ b/src/main/java/com/booleanuk/core/Basket.java @@ -0,0 +1,14 @@ +package com.booleanuk.core; + +import java.util.HashMap; + +public class Basket { + + public boolean add(String product, int price) { + return true; + } + + public int total() { + return 0; + } +} 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 0000000..047f6b8 --- /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; + +public class BasketTest { + + @Test + public void itemIsNotAlreadyInBasket() { + Basket basket = new Basket(); + Assertions.assertTrue(basket.add("TestItem1", 1)); + } + + @Test + public void itemIsAlreadyInBasket() { + Basket basket = new Basket(); + Assertions.assertFalse(basket.add("TestItem2", 1)); + } +} From d505195d2b1b013bfe3587fb50c87153efbc0e8d Mon Sep 17 00:00:00 2001 From: Magnus-droid Date: Thu, 9 Jan 2025 10:51:11 +0100 Subject: [PATCH 3/4] Initial commit should have been this --- src/main/java/com/booleanuk/core/Basket.java | 2 ++ .../java/com/booleanuk/core/BasketTest.java | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/src/main/java/com/booleanuk/core/Basket.java b/src/main/java/com/booleanuk/core/Basket.java index cfd163a..f9e6fa9 100644 --- a/src/main/java/com/booleanuk/core/Basket.java +++ b/src/main/java/com/booleanuk/core/Basket.java @@ -4,6 +4,8 @@ public class Basket { + HashMap items = new HashMap<>(); + public boolean add(String product, int price) { return true; } diff --git a/src/test/java/com/booleanuk/core/BasketTest.java b/src/test/java/com/booleanuk/core/BasketTest.java index 047f6b8..ebdeea2 100644 --- a/src/test/java/com/booleanuk/core/BasketTest.java +++ b/src/test/java/com/booleanuk/core/BasketTest.java @@ -8,12 +8,31 @@ public class BasketTest { @Test public void itemIsNotAlreadyInBasket() { Basket basket = new Basket(); + basket.items.put("Apple", 1); + basket.items.put("Banana", 20); Assertions.assertTrue(basket.add("TestItem1", 1)); } @Test public void itemIsAlreadyInBasket() { Basket basket = new Basket(); + basket.items.put("Apple", 1); + basket.items.put("Banana", 20); + basket.items.put("Testitem2", 1); Assertions.assertFalse(basket.add("TestItem2", 1)); } + + @Test + public void totalShouldBeZero() { + Basket basket = new Basket() {}; + Assertions.assertEquals(0, basket.total()); + } + + @Test + public void totalShouldIncrease() { + Basket basket = new Basket() {}; + basket.add("Banana", 20); + Assertions.assertEquals(20, basket.total()); + } + } From d58946df806daf455bab6e549289070301f74de2 Mon Sep 17 00:00:00 2001 From: Magnus-droid Date: Thu, 9 Jan 2025 11:00:52 +0100 Subject: [PATCH 4/4] implement add() and total() in Basket class --- domain-model.md | 28 +++++++++---------- src/main/java/com/booleanuk/core/Basket.java | 12 ++++++-- .../java/com/booleanuk/core/BasketTest.java | 2 +- 3 files changed, 25 insertions(+), 17 deletions(-) diff --git a/domain-model.md b/domain-model.md index 1e218e0..917d6b3 100644 --- a/domain-model.md +++ b/domain-model.md @@ -1,10 +1,10 @@ -| Classes | Methods | Scenario | Result | -|------------------|-----------------------------------------------------|------------------------|----------------------------------------------| -| `CostCalculator` | `calculate(List itemCosts)` | No item prices in list | total = 0 | -| | | n items prices in list | total = sum of n item prices | -| | `addItem(List itemCosts, int newItemCost)` | Valid itemCost | Item price gets added at the end of the list | -| | | Invalid itemCost | Item doesn't get added + error message | +| Methods | Members | Scenario | Result | +|--------------------------------------|---------|------------------------|----------------------------------------------| +| `calculate(List itemCosts)` | | No item prices in list | total = 0 | +| | | n items prices in list | total = sum of n item prices | +| `addItem(List itemCosts, int newItemCost)` | | Valid itemCost | Item price gets added at the end of the list | +| | | Invalid itemCost | Item doesn't get added + error message | @@ -12,14 +12,14 @@ -| Classes | Methods | Scenario | Result | -|-----------|-------------------------------------------------|------------------------------------------------------------------------------|-------------------------------------| -| `Receipt` | `getNameAndPrice(HashMap)` | Valid key-value pairs | return the name and price correctly | -| | | Missing keys or value | return error | -| | `getQuantity()` | Valid quantity (not -1) | return quantity | -| | | Invalid quantity | return error | -| | `calculateTotal(String itemName, int quantity)` | itemName exists in the hashmap as a key and a valid value, quantity is valid | return the total price | -| | | Missing or invalid paramets | return error | +| Methods | Members | Scenario | Result | +|-------------------------------------------------|------------------------------|------------------------------------------------------------------------------|-------------------------------------| +| `getNameAndPrice(HashMap map)` | Hashmap map | Valid key-value pairs | return the name and price correctly | +| | int quantity | Missing keys or value | return error | +| `getQuantity()` | | Valid quantity (not -1) | return quantity | +| | | Invalid quantity | return error | +| `calculateTotal(String itemName, int quantity)` | | itemName exists in the hashmap as a key and a valid value, quantity is valid | return the total price | +| | | Missing or invalid paramets | return error | diff --git a/src/main/java/com/booleanuk/core/Basket.java b/src/main/java/com/booleanuk/core/Basket.java index f9e6fa9..8e247fd 100644 --- a/src/main/java/com/booleanuk/core/Basket.java +++ b/src/main/java/com/booleanuk/core/Basket.java @@ -5,12 +5,20 @@ public class Basket { HashMap items = new HashMap<>(); + int total = 0; public boolean add(String product, int price) { - return true; + if (!items.containsKey(product)) { + items.put(product, price); + return true; + } + return false; } public int total() { - return 0; + for (String key : items.keySet()) { + total += items.get(key); + } + return this.total; } } diff --git a/src/test/java/com/booleanuk/core/BasketTest.java b/src/test/java/com/booleanuk/core/BasketTest.java index ebdeea2..1b821aa 100644 --- a/src/test/java/com/booleanuk/core/BasketTest.java +++ b/src/test/java/com/booleanuk/core/BasketTest.java @@ -18,7 +18,7 @@ public void itemIsAlreadyInBasket() { Basket basket = new Basket(); basket.items.put("Apple", 1); basket.items.put("Banana", 20); - basket.items.put("Testitem2", 1); + basket.items.put("TestItem2", 1); Assertions.assertFalse(basket.add("TestItem2", 1)); }