diff --git a/src/main/java/com/booleanuk/core/Basket.java b/src/main/java/com/booleanuk/core/Basket.java index df7a20aa..fbaccc77 100644 --- a/src/main/java/com/booleanuk/core/Basket.java +++ b/src/main/java/com/booleanuk/core/Basket.java @@ -1,5 +1,51 @@ package com.booleanuk.core; +import java.util.HashMap; +import java.util.Map; + public class Basket { + Map basketItems = new HashMap<>(); + private int basketLimit = 20; + int basketTotal = 0; + public void addBagel (String bagelName, int quantity){ + if(!exceededBasketLimit(getBasketLimit(),basketTotal+quantity )){ + if(basketItems.containsKey(bagelName)){ + basketItems.put(bagelName, basketItems.get(bagelName)+quantity); + basketTotal = basketItems.values().stream().reduce(0, Integer::sum); + }else{ + basketItems.put(bagelName, quantity); + basketTotal = basketItems.values().stream().reduce(0, Integer::sum); + } + }else { + int limitExceededBy = (basketTotal + quantity) - getBasketLimit(); + System.out.println("The quantity of bagels you are adding to your basket exceeds the basket limit by " + limitExceededBy +". Please reduce the quantity of bagels by this amount."); + } + } + + public boolean exceededBasketLimit(int basketLimit, int basketTotalAfterAddBagel){ + return basketTotalAfterAddBagel > basketLimit; + } + + public int getBasketLimit() { + return basketLimit; + } + + public void setBasketLimit(int basketLimit) { + this.basketLimit = basketLimit; + } + + public void removeBagel(String bagelName, int quantity){ + if(!basketItems.containsKey(bagelName)){ + System.out.println("This bagel isn't in your basket."); + } + else{ + if(basketItems.get(bagelName) <= quantity){ + basketItems.remove(bagelName); + }else{ + int newQuantity = basketItems.get(bagelName) - quantity; + basketItems.put(bagelName, newQuantity ); + } + } + } } diff --git a/src/main/java/com/booleanuk/core/DomainModel.md b/src/main/java/com/booleanuk/core/DomainModel.md new file mode 100644 index 00000000..07961c09 --- /dev/null +++ b/src/main/java/com/booleanuk/core/DomainModel.md @@ -0,0 +1,12 @@ +| class | method | scenario | output | +|--------|----------------------------------------------|:----------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------| +| Basket | addBagel( String bagelName, int quantity) | add bagelName and Quantity. If basketTotal + quantity isnt not larger than basket limit then If it already exists put += to existing key else create key value. | | +| Basket | remove bagel(String bagelName, int quantity) | if exists in basket then remove else alert("This bagel doesn't exist in basket") | | +| Basket | setBasketLimit(int basketLimit) | Increase/Reduce basket limit | | + +| Variables | | +|-----------------------------------|---| +| Map basketItems; | | +| int basketLimit | | +| int basketTotal | | + diff --git a/src/test/java/com/booleanuk/core/BasketTest.java b/src/test/java/com/booleanuk/core/BasketTest.java index e35771b3..325ff841 100644 --- a/src/test/java/com/booleanuk/core/BasketTest.java +++ b/src/test/java/com/booleanuk/core/BasketTest.java @@ -3,6 +3,45 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; +import java.util.HashMap; +import java.util.Map; +import java.util.Random; + class BasketTest { + @Test + public void testAddBagel(){ + Basket basket = new Basket(); + basket.addBagel("Poppy Seed", 2); + basket.addBagel("Cinnamon", 3); + basket.addBagel("Honey", 4); + basket.addBagel("Cheese", 5); + basket.addBagel("Garlic", 6); + Map expectedMap = new HashMap<>(); + expectedMap.put("Poppy Seed", 2); + expectedMap.put("Cinnamon", 3); + expectedMap.put("Honey", 4); + expectedMap.put("Cheese", 5); + expectedMap.put("Garlic", 6); + Assertions.assertEquals(expectedMap, basket.basketItems); + } + @Test + public void testExceededBasketLimit(){ + Basket basket = new Basket(); + basket.setBasketLimit(3); + Assertions.assertEquals(basket.exceededBasketLimit(basket.getBasketLimit(), 5), true); + basket.setBasketLimit(10); + Assertions.assertEquals(basket.exceededBasketLimit(basket.getBasketLimit(), 7), false); + } + @Test + public void testRemoveBagel(){ + Basket basket = new Basket(); + basket.addBagel("Poppy Seed", 5); + basket.removeBagel("Poppy Seed", 5); + Assertions.assertEquals(basket.basketItems.containsKey("Poppy Seed"), false); + basket.addBagel("Poppy Seed", 5); + basket.removeBagel("Poppy Seed", 3); + Assertions.assertEquals(basket.basketItems.containsKey("Poppy Seed"), true); + Assertions.assertEquals(basket.basketItems.get("Poppy Seed"), 2); + } }