From 20e2d5f2239d8d667037a9bf61b3d9e2eb03165d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matilda=20S=C3=B6nnergaard?= Date: Thu, 9 Jan 2025 09:39:12 +0100 Subject: [PATCH 01/11] Complete exercise 1 (add domain model) --- domain-model.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 domain-model.md diff --git a/domain-model.md b/domain-model.md new file mode 100644 index 0000000..35c520d --- /dev/null +++ b/domain-model.md @@ -0,0 +1,18 @@ +# Exercise 1 + +### Class: `ShoppingBasket` + +| Method | Member variables | Scenario | Result | +|--------------------------|---------------------|-------------------|-------------------------------------------------------------------------------| +| `double calculateCost()` | `List items` | Basket is empty | Return $0$ | +| | | Basket has items | Return total cost of the items ($>0$) | +| `void printReceipt()` | | Basket is empty | Print "empty" message | +| | | Basket has items | For every unique item, print name, price and quantity. Also print total cost. | + +### Class: `Item` + +| Method | Member variables | Scenario | Result | +|---------------------|------------------|----------|-------------------------------| +| `double getprice()` | `double price` | | Return the price of the item. | +| `String getName()` | `String name` | | Return the name of the item. | + From 62d6222e6ad6bcd21b0edfb13dd7f1cf5159ae50 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matilda=20S=C3=B6nnergaard?= Date: Thu, 9 Jan 2025 10:31:20 +0100 Subject: [PATCH 02/11] Add Basket class --- src/main/java/com/booleanuk/core/Basket.java | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 src/main/java/com/booleanuk/core/Basket.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..df7a20a --- /dev/null +++ b/src/main/java/com/booleanuk/core/Basket.java @@ -0,0 +1,5 @@ +package com.booleanuk.core; + +public class Basket { + +} From b19c2caffb5b16a42da6932afe25fc82239b5098 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matilda=20S=C3=B6nnergaard?= Date: Thu, 9 Jan 2025 10:35:38 +0100 Subject: [PATCH 03/11] Add test for adding a non-existing item to a basket --- src/test/java/com/booleanuk/core/BasketTest.java | 14 ++++++++++++++ 1 file changed, 14 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 0000000..2c75bcb --- /dev/null +++ b/src/test/java/com/booleanuk/core/BasketTest.java @@ -0,0 +1,14 @@ +package com.booleanuk.core; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.Assertions; + +public class BasketTest { + @Test + public void canAddNewItem() { + Basket basket = new Basket(); + String product = "eggs"; + int price = 20; + Assertions.assertTrue(basket.add(product, price)); + } +} From 0c4d858def1020ae92f7807b8829c63b66e44484 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matilda=20S=C3=B6nnergaard?= Date: Thu, 9 Jan 2025 10:36:22 +0100 Subject: [PATCH 04/11] Fix test for adding a non-existing item to a basket --- src/main/java/com/booleanuk/core/Basket.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/booleanuk/core/Basket.java b/src/main/java/com/booleanuk/core/Basket.java index df7a20a..7891900 100644 --- a/src/main/java/com/booleanuk/core/Basket.java +++ b/src/main/java/com/booleanuk/core/Basket.java @@ -1,5 +1,7 @@ package com.booleanuk.core; public class Basket { - + public boolean add(String product, int price) { + return true; + } } From ef99951587adde617223882513406ddf40e86c61 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matilda=20S=C3=B6nnergaard?= Date: Thu, 9 Jan 2025 10:37:35 +0100 Subject: [PATCH 05/11] Add test for adding an already existing item to a basket --- 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 2c75bcb..55162df 100644 --- a/src/test/java/com/booleanuk/core/BasketTest.java +++ b/src/test/java/com/booleanuk/core/BasketTest.java @@ -11,4 +11,13 @@ public void canAddNewItem() { int price = 20; Assertions.assertTrue(basket.add(product, price)); } + + @Test + public void cannotAddExistingItem() { + Basket basket = new Basket(); + String product = "eggs"; + int price = 20; + basket.add(product, price); + Assertions.assertFalse(basket.add(product, price)); + } } From 8bf91e12fd1ac2a2f06b8676f54bdc03839febc7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matilda=20S=C3=B6nnergaard?= Date: Thu, 9 Jan 2025 10:41:30 +0100 Subject: [PATCH 06/11] Fix test for adding an already existing item to a basket --- src/main/java/com/booleanuk/core/Basket.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/main/java/com/booleanuk/core/Basket.java b/src/main/java/com/booleanuk/core/Basket.java index 7891900..bfc369f 100644 --- a/src/main/java/com/booleanuk/core/Basket.java +++ b/src/main/java/com/booleanuk/core/Basket.java @@ -1,7 +1,17 @@ package com.booleanuk.core; +import java.util.HashMap; +import java.util.Map; + public class Basket { + Map items = new HashMap<>(); + public boolean add(String product, int price) { + if (items.containsKey(product)) { + return false; + } + + items.put(product, price); return true; } } From da04056ff993f2886ab2bfec5c26db7694c5599b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matilda=20S=C3=B6nnergaard?= Date: Thu, 9 Jan 2025 10:43:31 +0100 Subject: [PATCH 07/11] Add test for calculating total on an empty basket --- src/test/java/com/booleanuk/core/BasketTest.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/test/java/com/booleanuk/core/BasketTest.java b/src/test/java/com/booleanuk/core/BasketTest.java index 55162df..2b9df31 100644 --- a/src/test/java/com/booleanuk/core/BasketTest.java +++ b/src/test/java/com/booleanuk/core/BasketTest.java @@ -20,4 +20,10 @@ public void cannotAddExistingItem() { basket.add(product, price); Assertions.assertFalse(basket.add(product, price)); } + + @Test + public void emptyBasketShouldHaveZeroTotal() { + Basket basket = new Basket(); + Assertions.assertEquals(basket.total(), 0); + } } From 39416c2fd41493c015c36e64811010b1228270d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matilda=20S=C3=B6nnergaard?= Date: Thu, 9 Jan 2025 10:44:09 +0100 Subject: [PATCH 08/11] Fix test for calculating total on an empty basket --- src/main/java/com/booleanuk/core/Basket.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/com/booleanuk/core/Basket.java b/src/main/java/com/booleanuk/core/Basket.java index bfc369f..81cefcb 100644 --- a/src/main/java/com/booleanuk/core/Basket.java +++ b/src/main/java/com/booleanuk/core/Basket.java @@ -14,4 +14,8 @@ public boolean add(String product, int price) { items.put(product, price); return true; } + + public int total() { + return 0; + } } From 8f74d0423a2bc56f83c509194423bfdbdfa39b95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matilda=20S=C3=B6nnergaard?= Date: Thu, 9 Jan 2025 10:46:24 +0100 Subject: [PATCH 09/11] Write test for calculating total on basket with a single item --- src/test/java/com/booleanuk/core/BasketTest.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/test/java/com/booleanuk/core/BasketTest.java b/src/test/java/com/booleanuk/core/BasketTest.java index 2b9df31..3d4f92f 100644 --- a/src/test/java/com/booleanuk/core/BasketTest.java +++ b/src/test/java/com/booleanuk/core/BasketTest.java @@ -24,6 +24,15 @@ public void cannotAddExistingItem() { @Test public void emptyBasketShouldHaveZeroTotal() { Basket basket = new Basket(); - Assertions.assertEquals(basket.total(), 0); + Assertions.assertEquals(0, basket.total()); + } + + @Test + public void correctCostOfSingleItem() { + Basket basket = new Basket(); + String product = "eggs"; + int price = 20; + basket.add(product, price); + Assertions.assertEquals(price, basket.total()); } } From e59428de0c6bda1b9daedbf59bdf408d4369145f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matilda=20S=C3=B6nnergaard?= Date: Thu, 9 Jan 2025 10:48:26 +0100 Subject: [PATCH 10/11] Fix test for calculating total on basket with a single item --- src/main/java/com/booleanuk/core/Basket.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/booleanuk/core/Basket.java b/src/main/java/com/booleanuk/core/Basket.java index 81cefcb..6897c42 100644 --- a/src/main/java/com/booleanuk/core/Basket.java +++ b/src/main/java/com/booleanuk/core/Basket.java @@ -7,15 +7,19 @@ public class Basket { Map items = new HashMap<>(); public boolean add(String product, int price) { - if (items.containsKey(product)) { + if (this.items.containsKey(product)) { return false; } - items.put(product, price); + this.items.put(product, price); return true; } public int total() { - return 0; + int total = 0; + for (int price : this.items.values()) { + total += price; + } + return total; } } From 54fa9586af4add5edcd5be7cfc7422815a7bab6f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matilda=20S=C3=B6nnergaard?= Date: Thu, 9 Jan 2025 10:54:52 +0100 Subject: [PATCH 11/11] Add additional tests --- .../java/com/booleanuk/core/BasketTest.java | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/src/test/java/com/booleanuk/core/BasketTest.java b/src/test/java/com/booleanuk/core/BasketTest.java index 3d4f92f..1b80f1a 100644 --- a/src/test/java/com/booleanuk/core/BasketTest.java +++ b/src/test/java/com/booleanuk/core/BasketTest.java @@ -35,4 +35,29 @@ public void correctCostOfSingleItem() { basket.add(product, price); Assertions.assertEquals(price, basket.total()); } + + @Test + public void correctCostOfSeveralItems() { + Basket basket = new Basket(); + String prod1 = "eggs"; + String prod2 = "milk"; + String prod3 = "flour"; + int price1 = 20; + int price2 = 22; + int price3 = 17; + basket.add(prod1, price1); + basket.add(prod2, price2); + basket.add(prod3, price3); + Assertions.assertEquals(59, basket.total()); + } + + @Test + public void addingExistingItemShouldNotIncreaseTotal() { + Basket basket = new Basket(); + String product = "eggs"; + int price = 20; + basket.add(product, price); + basket.add(product, price); + Assertions.assertEquals(20, basket.total()); + } }