From 60f945c78273edee56a458a821d2b0256cbb3ff2 Mon Sep 17 00:00:00 2001 From: Stian Rusvik Date: Wed, 14 Aug 2024 12:57:15 +0200 Subject: [PATCH 1/9] first failed test. --- domain-model.md | 14 ++++++++++++++ src/test/java/com/booleanuk/core/BasketTest.java | 8 ++++++++ 2 files changed, 22 insertions(+) create mode 100644 domain-model.md diff --git a/domain-model.md b/domain-model.md new file mode 100644 index 00000000..c93dc558 --- /dev/null +++ b/domain-model.md @@ -0,0 +1,14 @@ +## Domain Model for User Story 1 + +User story: +``` +1. +As a member of the public, +So I can order a bagel before work, +I'd like to add a specific type of bagel to my basket. +``` + +| Classes | Members | Types | Methods | +|----------|---------|------------------------|---------------------------------------| +| `Basket` | `items` | `Map` | `addBagel(String type, int quantity)` | +| | | | | diff --git a/src/test/java/com/booleanuk/core/BasketTest.java b/src/test/java/com/booleanuk/core/BasketTest.java index e35771b3..1a9a1593 100644 --- a/src/test/java/com/booleanuk/core/BasketTest.java +++ b/src/test/java/com/booleanuk/core/BasketTest.java @@ -5,4 +5,12 @@ class BasketTest { + @Test + public void testAddBagelAddsBagelToBasket() { + Basket basket = new Basket(); + basket.addBagel("normal", 1); + + Assertions.assertTrue(basket.items.length != 0); + } + } From 04f93949d85732ffcba261813404739ac0a1548b Mon Sep 17 00:00:00 2001 From: Stian Rusvik Date: Wed, 14 Aug 2024 13:00:36 +0200 Subject: [PATCH 2/9] made first test pass. --- src/main/java/com/booleanuk/core/Basket.java | 12 ++++++++++++ src/test/java/com/booleanuk/core/BasketTest.java | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/booleanuk/core/Basket.java b/src/main/java/com/booleanuk/core/Basket.java index df7a20aa..4df79780 100644 --- a/src/main/java/com/booleanuk/core/Basket.java +++ b/src/main/java/com/booleanuk/core/Basket.java @@ -1,5 +1,17 @@ package com.booleanuk.core; +import java.util.HashMap; +import java.util.Map; + public class Basket { + public Map items; + + public Basket() { + this.items = new HashMap<>(); + } + + public void addBagel(String type, int quantity) { + this.items.put(type, quantity); + } } diff --git a/src/test/java/com/booleanuk/core/BasketTest.java b/src/test/java/com/booleanuk/core/BasketTest.java index 1a9a1593..a28d2377 100644 --- a/src/test/java/com/booleanuk/core/BasketTest.java +++ b/src/test/java/com/booleanuk/core/BasketTest.java @@ -10,7 +10,7 @@ public void testAddBagelAddsBagelToBasket() { Basket basket = new Basket(); basket.addBagel("normal", 1); - Assertions.assertTrue(basket.items.length != 0); + Assertions.assertFalse(basket.items.isEmpty()); } } From 3d7afaaf3351ff9a83523409d7c96eada62d73ef Mon Sep 17 00:00:00 2001 From: Stian Rusvik Date: Wed, 14 Aug 2024 13:09:05 +0200 Subject: [PATCH 3/9] made second test fail. --- domain-model.md | 21 +++++++++++++------ .../java/com/booleanuk/core/BasketTest.java | 11 ++++++++++ 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/domain-model.md b/domain-model.md index c93dc558..c0f0757b 100644 --- a/domain-model.md +++ b/domain-model.md @@ -1,6 +1,5 @@ -## Domain Model for User Story 1 +## Domain Model for User Stories -User story: ``` 1. As a member of the public, @@ -8,7 +7,17 @@ So I can order a bagel before work, I'd like to add a specific type of bagel to my basket. ``` -| Classes | Members | Types | Methods | -|----------|---------|------------------------|---------------------------------------| -| `Basket` | `items` | `Map` | `addBagel(String type, int quantity)` | -| | | | | +``` +2. +As a member of the public, +So I can change my order, +I'd like to remove a bagel from my basket. +``` + +| User Story | Classes | Members | Types | Methods | +|------------|----------|---------|------------------------|---------------------------------------| +| 1 | `Basket` | `items` | `Map` | `addBagel(String type, int quantity)` | +| 2 | `Basket` | `items` | `Map` | `removeBagel(String type)` | + + + diff --git a/src/test/java/com/booleanuk/core/BasketTest.java b/src/test/java/com/booleanuk/core/BasketTest.java index a28d2377..7a5e0dc5 100644 --- a/src/test/java/com/booleanuk/core/BasketTest.java +++ b/src/test/java/com/booleanuk/core/BasketTest.java @@ -13,4 +13,15 @@ public void testAddBagelAddsBagelToBasket() { Assertions.assertFalse(basket.items.isEmpty()); } + @Test + public void testRemoveBagelRemovesBagelFromBasket() { + Basket basket = new Basket(); + basket.addBagel("normal", 1); + + // Then we remove the bagel. + basket.removeBagel("normal"); + + Assertions.assertTrue(basket.items.isEmpty()); + } + } From 295463c5c72ac8c4f8890ddc10d69970cd807b26 Mon Sep 17 00:00:00 2001 From: Stian Rusvik Date: Wed, 14 Aug 2024 13:09:58 +0200 Subject: [PATCH 4/9] made second test pass. --- 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 4df79780..fd6ab1ad 100644 --- a/src/main/java/com/booleanuk/core/Basket.java +++ b/src/main/java/com/booleanuk/core/Basket.java @@ -14,4 +14,8 @@ public void addBagel(String type, int quantity) { this.items.put(type, quantity); } + public void removeBagel(String key) { + this.items.remove(key); + } + } From 36b0787a89763eb9e4bbc9513830a0b7d86f4101 Mon Sep 17 00:00:00 2001 From: Stian Rusvik Date: Wed, 14 Aug 2024 13:28:56 +0200 Subject: [PATCH 5/9] made third test fail. --- domain-model.md | 26 ++++++++++++++++--- src/main/java/com/booleanuk/core/Basket.java | 4 +++ .../java/com/booleanuk/core/BasketTest.java | 9 +++++++ 3 files changed, 35 insertions(+), 4 deletions(-) diff --git a/domain-model.md b/domain-model.md index c0f0757b..689a2894 100644 --- a/domain-model.md +++ b/domain-model.md @@ -14,10 +14,28 @@ So I can change my order, I'd like to remove a bagel from my basket. ``` -| User Story | Classes | Members | Types | Methods | -|------------|----------|---------|------------------------|---------------------------------------| -| 1 | `Basket` | `items` | `Map` | `addBagel(String type, int quantity)` | -| 2 | `Basket` | `items` | `Map` | `removeBagel(String type)` | +``` +3. +As a member of the public, +So that I can not overfill my small bagel basket +I'd like to know when my basket is full when I try adding an item beyond my basket capacity. +``` + +The following class will be used in all the user stories. + +| Class | Members | Types | +|----------|---------|------------------------| +| `Basket` | `items` | `Map` | +| | `MAX` | `Integer` | + + + +| User Story | Methods | Return | Notes | +|-------------|---------------------------------------|-----------|---------------| +| 1 | `addBagel(String type, int quantity)` | `void` | | +| 2 | `removeBagel(String type)` | `void` | | +| 3 | `boolean hasCapacity()` | `boolean` | Max limit (5) | + diff --git a/src/main/java/com/booleanuk/core/Basket.java b/src/main/java/com/booleanuk/core/Basket.java index fd6ab1ad..e02a8cc6 100644 --- a/src/main/java/com/booleanuk/core/Basket.java +++ b/src/main/java/com/booleanuk/core/Basket.java @@ -18,4 +18,8 @@ public void removeBagel(String key) { this.items.remove(key); } + public boolean hasCapacity() { + return false; + } + } diff --git a/src/test/java/com/booleanuk/core/BasketTest.java b/src/test/java/com/booleanuk/core/BasketTest.java index 7a5e0dc5..401f3a1d 100644 --- a/src/test/java/com/booleanuk/core/BasketTest.java +++ b/src/test/java/com/booleanuk/core/BasketTest.java @@ -24,4 +24,13 @@ public void testRemoveBagelRemovesBagelFromBasket() { Assertions.assertTrue(basket.items.isEmpty()); } + @Test + public void testHasCapacity() { + Basket basket = new Basket(); + basket.addBagel("normal", 1); + basket.addBagel("special", 2); + + boolean hasMoreSpace = basket.hasCapacity(); + Assertions.assertTrue(hasMoreSpace); + } } From 06948633406daa5d05bedcc34d420dc04cfa3535 Mon Sep 17 00:00:00 2001 From: Stian Rusvik Date: Wed, 14 Aug 2024 14:18:51 +0200 Subject: [PATCH 6/9] made fourth test fail. --- domain-model.md | 27 ++++++++++++------- src/main/java/com/booleanuk/core/Basket.java | 10 ++++++- .../java/com/booleanuk/core/BasketTest.java | 16 +++++++++++ 3 files changed, 42 insertions(+), 11 deletions(-) diff --git a/domain-model.md b/domain-model.md index 689a2894..c3db30e4 100644 --- a/domain-model.md +++ b/domain-model.md @@ -21,20 +21,27 @@ So that I can not overfill my small bagel basket I'd like to know when my basket is full when I try adding an item beyond my basket capacity. ``` -The following class will be used in all the user stories. +``` +4. +As a Bob's Bagels manager, +So that I can expand my business, +I’d like to change the capacity of baskets. +``` -| Class | Members | Types | -|----------|---------|------------------------| -| `Basket` | `items` | `Map` | -| | `MAX` | `Integer` | +The following class will be used in all the user stories. +| Class | Members | Types | +|----------|-----------|------------------------| +| `Basket` | `items` | `Map` | +| | `MAX` | `Integer` | -| User Story | Methods | Return | Notes | -|-------------|---------------------------------------|-----------|---------------| -| 1 | `addBagel(String type, int quantity)` | `void` | | -| 2 | `removeBagel(String type)` | `void` | | -| 3 | `boolean hasCapacity()` | `boolean` | Max limit (5) | +| User Story | Methods | Return | Notes | +|------------|---------------------------------------|-----------|---------------| +| 1 | `addBagel(String type, int quantity)` | `void` | | +| 2 | `removeBagel(String type)` | `void` | | +| 3 | `hasCapacity()` | `boolean` | Max limit (5) | +| 4 | `changeBasketCapacity(int limit)` | `void` | | diff --git a/src/main/java/com/booleanuk/core/Basket.java b/src/main/java/com/booleanuk/core/Basket.java index e02a8cc6..ee80c092 100644 --- a/src/main/java/com/booleanuk/core/Basket.java +++ b/src/main/java/com/booleanuk/core/Basket.java @@ -5,6 +5,7 @@ public class Basket { public Map items; + public int max = 5; public Basket() { this.items = new HashMap<>(); @@ -19,7 +20,14 @@ public void removeBagel(String key) { } public boolean hasCapacity() { - return false; + int totalItemsInBasket = 0; + for (Map.Entry item : items.entrySet()) { + totalItemsInBasket += item.getValue(); + } + return totalItemsInBasket < max; + } + + public void changeBasketCapacity(int limit) { } } diff --git a/src/test/java/com/booleanuk/core/BasketTest.java b/src/test/java/com/booleanuk/core/BasketTest.java index 401f3a1d..96114f80 100644 --- a/src/test/java/com/booleanuk/core/BasketTest.java +++ b/src/test/java/com/booleanuk/core/BasketTest.java @@ -30,7 +30,23 @@ public void testHasCapacity() { basket.addBagel("normal", 1); basket.addBagel("special", 2); + // Check if it returns true when not full. boolean hasMoreSpace = basket.hasCapacity(); Assertions.assertTrue(hasMoreSpace); + + // Check if it returns false when full. + basket.addBagel("tasteless", 3); + Assertions.assertFalse(basket.hasCapacity()); } + + @Test + public void changeBasketCapacity() { + Basket basket = new Basket(); + basket.changeBasketCapacity(10); + + Assertions.assertTrue(basket.max == 10); + } + + + } From f6ba8f9fee5faec21a6549a7eb77e62328fd9f8e Mon Sep 17 00:00:00 2001 From: Stian Rusvik Date: Wed, 14 Aug 2024 14:19:33 +0200 Subject: [PATCH 7/9] made fourth test pass. --- src/main/java/com/booleanuk/core/Basket.java | 1 + src/test/java/com/booleanuk/core/BasketTest.java | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/booleanuk/core/Basket.java b/src/main/java/com/booleanuk/core/Basket.java index ee80c092..4b527fcd 100644 --- a/src/main/java/com/booleanuk/core/Basket.java +++ b/src/main/java/com/booleanuk/core/Basket.java @@ -28,6 +28,7 @@ public boolean hasCapacity() { } public void changeBasketCapacity(int limit) { + this.max = limit; } } diff --git a/src/test/java/com/booleanuk/core/BasketTest.java b/src/test/java/com/booleanuk/core/BasketTest.java index 96114f80..69976374 100644 --- a/src/test/java/com/booleanuk/core/BasketTest.java +++ b/src/test/java/com/booleanuk/core/BasketTest.java @@ -44,7 +44,7 @@ public void changeBasketCapacity() { Basket basket = new Basket(); basket.changeBasketCapacity(10); - Assertions.assertTrue(basket.max == 10); + Assertions.assertEquals(10, basket.max); } From b75d14bee586f666388f2221eed2b5f1ac65126d Mon Sep 17 00:00:00 2001 From: Stian Rusvik Date: Wed, 14 Aug 2024 14:32:59 +0200 Subject: [PATCH 8/9] made fifth test fail. --- domain-model.md | 29 ++++++++++++------- src/main/java/com/booleanuk/core/Basket.java | 3 +- .../java/com/booleanuk/core/BasketTest.java | 8 ++++- 3 files changed, 28 insertions(+), 12 deletions(-) diff --git a/domain-model.md b/domain-model.md index c3db30e4..837a3185 100644 --- a/domain-model.md +++ b/domain-model.md @@ -28,20 +28,29 @@ So that I can expand my business, I’d like to change the capacity of baskets. ``` +``` +5. +As a member of the public +So that I can maintain my sanity +I'd like to know if I try to remove an item that doesn't exist in my basket. +``` + The following class will be used in all the user stories. -| Class | Members | Types | -|----------|-----------|------------------------| -| `Basket` | `items` | `Map` | -| | `MAX` | `Integer` | +| Class | Members | Types | +|----------|---------|------------------------| +| `Basket` | `items` | `Map` | +| | `max` | `Integer` | + +| User Story | Methods | Return | Notes | +|------------|---------------------------------------|-----------|---------------------------------------------| +| 1 | `addBagel(String type, int quantity)` | `void` | | +| 2 | `removeBagel(String type)` | `void` | | +| 3 | `hasCapacity()` | `boolean` | Max limit (5) | +| 4 | `changeBasketCapacity(int limit)` | `void` | | +| 5 | `removeBagel(String type)` | `boolean` | Updated method in story 2 to return boolean | -| User Story | Methods | Return | Notes | -|------------|---------------------------------------|-----------|---------------| -| 1 | `addBagel(String type, int quantity)` | `void` | | -| 2 | `removeBagel(String type)` | `void` | | -| 3 | `hasCapacity()` | `boolean` | Max limit (5) | -| 4 | `changeBasketCapacity(int limit)` | `void` | | diff --git a/src/main/java/com/booleanuk/core/Basket.java b/src/main/java/com/booleanuk/core/Basket.java index 4b527fcd..49474efa 100644 --- a/src/main/java/com/booleanuk/core/Basket.java +++ b/src/main/java/com/booleanuk/core/Basket.java @@ -15,8 +15,9 @@ public void addBagel(String type, int quantity) { this.items.put(type, quantity); } - public void removeBagel(String key) { + public boolean removeBagel(String key) { this.items.remove(key); + return true; } public boolean hasCapacity() { diff --git a/src/test/java/com/booleanuk/core/BasketTest.java b/src/test/java/com/booleanuk/core/BasketTest.java index 69976374..0a8dd211 100644 --- a/src/test/java/com/booleanuk/core/BasketTest.java +++ b/src/test/java/com/booleanuk/core/BasketTest.java @@ -47,6 +47,12 @@ public void changeBasketCapacity() { Assertions.assertEquals(10, basket.max); } + @Test + public void testRemoveBagelFromBasketIndicatesIfItemExists() { + Basket basket = new Basket(); + basket.addBagel("normal", 1); + boolean itemDoesNotExists = basket.removeBagel("special"); - + Assertions.assertFalse(itemDoesNotExists); + } } From ac7794c230aa7bb36fdaecd76a690eca30fc3870 Mon Sep 17 00:00:00 2001 From: Stian Rusvik Date: Wed, 14 Aug 2024 14:36:53 +0200 Subject: [PATCH 9/9] made fifth test pass. --- src/main/java/com/booleanuk/core/Basket.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/booleanuk/core/Basket.java b/src/main/java/com/booleanuk/core/Basket.java index 49474efa..c44659a5 100644 --- a/src/main/java/com/booleanuk/core/Basket.java +++ b/src/main/java/com/booleanuk/core/Basket.java @@ -16,8 +16,13 @@ public void addBagel(String type, int quantity) { } public boolean removeBagel(String key) { - this.items.remove(key); - return true; + if (items.get(key) != null) { + items.remove(key); + return true; + } + else { + return false; + } } public boolean hasCapacity() {