diff --git a/src/main/domain-model.md b/src/main/domain-model.md new file mode 100644 index 000000000..600621844 --- /dev/null +++ b/src/main/domain-model.md @@ -0,0 +1,97 @@ +``` +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. +``` +``` +2. +As a member of the public, +So I can change my order, +I'd like to remove a bagel from my basket. +``` +``` +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. +``` +``` +4. +As a Bob's Bagels manager, +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. +``` +``` +6. +As a customer, +So I know how much money I need, +I'd like to know the total cost of items in my basket. +``` +``` +7. +As a customer, +So I know what the damage will be, +I'd like to know the cost of a bagel before I add it to my basket. +``` +``` +8. +As a customer, +So I can shake things up a bit, +I'd like to be able to choose fillings for my bagel. +``` +``` +9. +As a customer, +So I don't over-spend, +I'd like to know the cost of each filling before I add it to my bagel order. +``` +``` +10. +As the manager, +So we don't get any weird requests, +I want customers to only be able to order things that we stock in our inventory. +``` + +| Classes | Variables | Method | Scenario | Output | +|-----------|-----------------------|-----------------------------------------------------|-------------------------------------|--------------------------------------------| +| Member | Member.basket | boolean addBagel(Item type) | If type is valid | true | +| Basket | | | if cap is reached | false | +| Bagel | | | inventory is empty | false | +| -------- | ------------------- - | ------------------------------------------------ | ------------------------ | --------------------------------------- | +| Member | Member.basket | boolean removeFromBasket(string bagelName) | if bagel exists | true | +| | | | if bagel does not exist | false | +| | | | if basket is empty | false | +| -------- | --------------------- | ------------------------------------------------- | ------------------------ | --------------------------------------- | +| Basket | Basket.maxCapacity | boolean member.setCapacity(int cap) | if basketcap is negative | false | +| | Basket.items | | if Basketcap is 0-100 | true | +| | | | if bascetcap is >100 | false | +| -------- | -------------------- | --------------------------------------------------- | ------------------------ | ----------------------------------------- | +| Customer | Customer.totalcost | Float getTotalcost() | It the basket is empty | 0.00 | +| | | | if it has items | price of basket | +| | | | if item does not exist | false | +| | | | | | +| | Customer.addDiscount | Float addDiscount() | if basket does qualify for discount | return Float as the amount the discount is | +| | | | if basket does not have discount | return 0.00f | +| | | | | | +| | | | | | +| --------- | ------------------- | --------------------------------------------------- | ------------------------- | ----------------------------------------- | +| Customer | Item.price | Float getPrice(Item item) | if price for item found | price of item | +| --------- | --------------------- | ------------------------------------------------- | ----------------------- | ---------------------------------------- | +| | | | | | +| Basket | Basket.currentStock | boolean setCurrentStock(item item, Integer amount) | if item is valid | true | +| | | | if item does not exist | false | +| | | | if item does not exist | false | +| | | | if item does not exist | false | +| | | | if item does not exist | false | +| | | | if item does not exist | false | +| | | | if item does not exist | false | +| | | | if item does not exist | false | +| | | | if item does not exist | false | +| | | | if item does not exist | false | diff --git a/src/main/img.png b/src/main/img.png new file mode 100644 index 000000000..ce226aa1e Binary files /dev/null and b/src/main/img.png differ 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..32a626375 --- /dev/null +++ b/src/main/java/com/booleanuk/core/Bagel.java @@ -0,0 +1,21 @@ +package com.booleanuk.core; + +public class Bagel implements Item{ + private Float price; + private String name; + private String type; + private String SKU; + + public Bagel(Float price, String name, String type, String SKU) { + this.price = price; + this.name = name; + this.type = type; + this.SKU = SKU; + } + + @Override + public Float getPrice() { + return price; + } + +} 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..adf9633a9 --- /dev/null +++ b/src/main/java/com/booleanuk/core/Basket.java @@ -0,0 +1,61 @@ +package com.booleanuk.core; + +import java.util.ArrayList; +import java.util.HashMap; + +public class Basket { + /// SHould this be List or ArrayList + private ArrayList items; + + public Basket(ArrayList items) { + this.items = items; + } + + + //This is added for first test: + public boolean addItems( Item item){ + if (checkStock(item) && getSize() < Manager.maxCapacity) { + items.add(item); + return true; + } + return false; + } + + public Boolean checkStock(Item item) { + //check the key item, and check if it has any integers left. + if (Manager.currentStock.containsKey(item)){ + Integer stock = Manager.currentStock.get(item); + System.out.println("the current stock: " + stock); + if (stock > 0) { + Manager.currentStock.put(item, stock-1); + return true; + + } + + } + return false; + } + public boolean removeItem(Item item){ + if (items.contains(item)) { + items.remove(item); + return true; + } + return false; + } + + + public Integer getSize() { + return items.size(); + } + + + public Float getTotalCost(){ + Float sum = 0.00f; + for (Item item : items){ + sum += item.getPrice(); + } + return sum; + } + + +} diff --git a/src/main/java/com/booleanuk/core/Coffe.java b/src/main/java/com/booleanuk/core/Coffe.java new file mode 100644 index 000000000..1c5475778 --- /dev/null +++ b/src/main/java/com/booleanuk/core/Coffe.java @@ -0,0 +1,21 @@ +package com.booleanuk.core; + +public class Coffe implements Item { + private Float price; + private String name; + private String type; + private String SKU; + + public Coffe(Float price, String name, String type, String SKU) { + this.price = price; + this.name = name; + this.type = type; + this.SKU = SKU; + } + + + public Float getPrice() { + return price; + } + +} diff --git a/src/main/java/com/booleanuk/core/Customer.java b/src/main/java/com/booleanuk/core/Customer.java new file mode 100644 index 000000000..4262b8886 --- /dev/null +++ b/src/main/java/com/booleanuk/core/Customer.java @@ -0,0 +1,18 @@ +package com.booleanuk.core; + +public class Customer extends Member{ + + public Customer(Basket basket) { + super(basket); + } + + public Float getTotalCost() { + return basket.getTotalCost(); + } + public Float getPrice(Item item){ + + return item.getPrice(); + } + + +} 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..7edc93e70 --- /dev/null +++ b/src/main/java/com/booleanuk/core/Filling.java @@ -0,0 +1,23 @@ +package com.booleanuk.core; + +public class Filling implements Item { + + private Float price; + private String name; + private String type; + private String SKU; + + public Filling(Float price, String name, String type, String SKU) { + this.price = price; + this.name = name; + this.type = type; + this.SKU = SKU; + } + + + public Float getPrice() { + return price; + } + + +} 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..4cfa62ead --- /dev/null +++ b/src/main/java/com/booleanuk/core/Item.java @@ -0,0 +1,7 @@ +package com.booleanuk.core; + +public interface Item { + //all getters and setters to all variables. + public Float getPrice(); + +} diff --git a/src/main/java/com/booleanuk/core/Main.java b/src/main/java/com/booleanuk/core/Main.java new file mode 100644 index 000000000..e9f326f0b --- /dev/null +++ b/src/main/java/com/booleanuk/core/Main.java @@ -0,0 +1,7 @@ +package com.booleanuk.core; + +public class Main { + public static void main(String[] args) { + + } +} diff --git a/src/main/java/com/booleanuk/core/Manager.java b/src/main/java/com/booleanuk/core/Manager.java new file mode 100644 index 000000000..70c088e53 --- /dev/null +++ b/src/main/java/com/booleanuk/core/Manager.java @@ -0,0 +1,36 @@ +package com.booleanuk.core; + +import java.util.HashMap; +import java.util.Map; + +public class Manager { + public static HashMap currentStock; //Should I use hashMap instead here maybe? + public static Integer maxCapacity; + + + public Manager(HashMap currentStock, Integer maxCapacity) { + + Manager.currentStock = currentStock; + Manager.maxCapacity = maxCapacity; + } + + public boolean setMaxCapacity(Integer maxCapacity) { + if (maxCapacity >0 && maxCapacity <= 100){ + Manager.maxCapacity = maxCapacity; + return true; + } + return false; + } + + public static boolean setCurrentStock(Item item, Integer quantity){ + if (item!=null){ + Manager.currentStock.put(item, quantity); + return true; + } + return false; + } + + + + +} diff --git a/src/main/java/com/booleanuk/core/Member.java b/src/main/java/com/booleanuk/core/Member.java new file mode 100644 index 000000000..e12e48f3f --- /dev/null +++ b/src/main/java/com/booleanuk/core/Member.java @@ -0,0 +1,18 @@ +package com.booleanuk.core; + +public class Member { + protected Basket basket; + + public Member(Basket basket) { + this.basket = basket; + } + + public boolean addToBasket(Item item){ + return basket.addItems(item); + } + + public boolean removeFromBasket(Item item){ + return basket.removeItem(item); + } + +} diff --git a/src/main/updatedclassmodel.png b/src/main/updatedclassmodel.png new file mode 100644 index 000000000..6c314a1d2 Binary files /dev/null and b/src/main/updatedclassmodel.png differ diff --git a/src/test/java/com/booleanuk/core/testCore.java b/src/test/java/com/booleanuk/core/testCore.java new file mode 100644 index 000000000..675220741 --- /dev/null +++ b/src/test/java/com/booleanuk/core/testCore.java @@ -0,0 +1,323 @@ +package com.booleanuk.core; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; +import java.util.HashMap; + +class testCore { + @Test + public void addBagelandCurrentStockTest() { + Item bagel = new Bagel(0.49f,"Bagel", "Plain","BGLP"); + ArrayList list = new ArrayList<>(); + HashMap currentStock = new HashMap<>(); + currentStock.put(bagel, 2); + Basket basket = new Basket(list); + Manager manager = new Manager(currentStock, 4); + Member member = new Member(basket); + + + Assertions.assertEquals(true, member.addToBasket(bagel)); + + Assertions.assertEquals(true, member.addToBasket(bagel)); + //scenario inventory is empty + Assertions.assertEquals(false, member.addToBasket(bagel)); + + + //recreate to test capacity + Manager.currentStock.put(bagel, 9); + list = new ArrayList<>(); + basket = new Basket(list); + member = new Member(basket); + + //add a test where the inventory is empty. + Assertions.assertEquals(true, member.addToBasket(bagel)); + Assertions.assertEquals(true, member.addToBasket(bagel)); + Assertions.assertEquals(true, member.addToBasket(bagel)); + Assertions.assertEquals(true, member.addToBasket(bagel)); + Assertions.assertEquals(false, member.addToBasket(bagel)); + + + //How do I test something which would return a error? + + //member.addToBasket(bagel); + //System.out.println( + + } + @Test + public void removeBagelTest(){ + + //Set everything up + Item bagel1 = new Bagel(0.49f,"Bagel", "Plain","BGLP"); + Item bagel2 = new Bagel(0.49f,"Bagel", "Onion","BGLO"); + + + ArrayList list = new ArrayList<>(); + HashMap currentStock = new HashMap<>(); + currentStock.put(bagel1, 2); + currentStock.put(bagel2, 2); + Manager manager = new Manager(currentStock, 4); + + Basket basket = new Basket(list); + Member member = new Member(basket); + + //the tests + + //basket is empty + Assertions.assertEquals(false, member.removeFromBasket(bagel1)); + Assertions.assertEquals(false, member.removeFromBasket(bagel2)); + + + member.addToBasket(bagel1); + member.addToBasket(bagel1); + + member.addToBasket(bagel2); + + Assertions.assertEquals(true, member.removeFromBasket(bagel2)); + Assertions.assertEquals(true, member.removeFromBasket(bagel1)); + + //does not exist + Assertions.assertEquals(false, member.removeFromBasket(bagel2)); + + //remove the last: + Assertions.assertEquals(true, member.removeFromBasket(bagel1)); + + } + @Test + public void setCapacityTest(){ + //Set everything up + Item bagel1 = new Bagel(0.49f,"Bagel", "Plain","BGLP"); + Item bagel2 = new Bagel(0.49f,"Bagel", "Onion","BGLO"); + + + ArrayList list = new ArrayList<>(); + HashMap currentStock = new HashMap<>(); + currentStock.put(bagel1, 2); + currentStock.put(bagel2, 2); + Manager manager = new Manager(currentStock, 4); + + Basket basket = new Basket(list); + Member member = new Member(basket); + + //set the capacity; + //QUESTION! is it better to have member.setcapacity than member.basket.setcapacity? + Assertions.assertEquals(true, manager.setMaxCapacity(10)); + Assertions.assertEquals(true, manager.setMaxCapacity(50)); + Assertions.assertEquals(true, manager.setMaxCapacity(80)); + Assertions.assertEquals(false, manager.setMaxCapacity(-10)); + Assertions.assertEquals(false, manager.setMaxCapacity(120)); + + } + @Test + public void getTotalCostTets(){ + Item bagel1 = new Bagel(0.49f,"Bagel", "Plain","BGLP"); + Item bagel2 = new Bagel(0.49f,"Bagel", "Onion","BGLO"); + + + ArrayList list = new ArrayList<>(); + HashMap currentStock = new HashMap<>(); + currentStock.put(bagel1, 4); + currentStock.put(bagel2, 4); + Manager manager = new Manager(currentStock, 4); + + Basket basket = new Basket(list); + //how does extend work here? + Customer customer = new Customer(basket); + + Assertions.assertEquals(0.00f, customer.getTotalCost()); + + customer.addToBasket(bagel1); + Assertions.assertEquals(0.49f, customer.getTotalCost()); + + customer.addToBasket(bagel1); + Assertions.assertEquals(0.49f*2, customer.getTotalCost()); + + + customer.addToBasket(bagel1); + Assertions.assertEquals(0.49f*3, customer.getTotalCost()); + + + + } + @Test + public void checkDiscountTest(){ + Item bagel1 = new Bagel(0.49f,"Bagel", "Plain","BGLP"); + Item filling1 = new Filling(0.12f,"Filling", "Egg","FILE"); + Item coffe1 = new Coffe(0.99f,"Coffee", "Black","COFB"); + ArrayList list = new ArrayList<>(); + HashMap currentStock = new HashMap<>(); + + currentStock.put(bagel1, 80); + currentStock.put(filling1, 80); + currentStock.put(coffe1, 80); + + Manager manager = new Manager(currentStock, 80); + Basket basket = new Basket(list); + Customer customer1 = new Customer(basket); + + Customer customer2 = new Customer(basket); + Customer customer3 = new Customer(basket); + Customer customer4 = new Customer(basket); + + + //No discount + customer1.addToBasket(bagel1); + customer1.addToBasket(bagel1); + customer1.addToBasket(bagel1); + customer1.addToBasket(bagel1); + customer1.addToBasket(bagel1); + Assertions.assertEquals(0.49f*5, customer1.getTotalCost()); + + customer1.addToBasket(filling1); + customer1.addToBasket(filling1); + + Assertions.assertEquals(0.49f*5+2*0.12f, customer1.getTotalCost()); + + customer2.addToBasket(coffe1); + + customer2.addToBasket(coffe1); + customer2.addToBasket(coffe1); + customer2.addToBasket(coffe1); + customer2.addToBasket(coffe1); + customer2.addToBasket(coffe1); + + Assertions.assertEquals(0.99f*6, customer2.getTotalCost()); + + //Discount 1 + + customer3.addToBasket(bagel1); + customer3.addToBasket(bagel1); + customer3.addToBasket(bagel1); + customer3.addToBasket(bagel1); + customer3.addToBasket(bagel1); + customer3.addToBasket(bagel1); + + Assertions.assertEquals(2.49f, customer3.getTotalCost()); + + customer3.addToBasket(bagel1); + customer3.addToBasket(bagel1); + customer3.addToBasket(bagel1); + customer3.addToBasket(bagel1); + customer3.addToBasket(bagel1); + + + Assertions.assertEquals(2.49f+0.49f*5, customer3.getTotalCost()); + + customer3.addToBasket(filling1); + customer3.addToBasket(filling1); + + Assertions.assertEquals(2.49f+0.49f*5+2*0.12f, customer3.getTotalCost()); + + + + customer3.addToBasket(bagel1); + Assertions.assertEquals(3.99f+2*0.12f, customer3.getTotalCost()); + + customer3.addToBasket(bagel1); + customer3.addToBasket(bagel1); + customer3.addToBasket(bagel1); + customer3.addToBasket(bagel1); + customer3.addToBasket(bagel1); + customer3.addToBasket(bagel1); + Assertions.assertEquals(3.99f+2.49f+2*0.12f, customer3.getTotalCost()); + + + //Discount 4 + customer4.addToBasket(bagel1); + customer4.addToBasket(coffe1); + + Assertions.assertEquals(0.99f, customer4.getTotalCost()); + + customer4.addToBasket(bagel1); + + Assertions.assertEquals(0.99f+0.49f, customer4.getTotalCost()); + + + + //Many Discounts + + customer3.addToBasket(coffe1); + Assertions.assertEquals(3.99f+2.49f+2*0.12f+0.99f, customer3.getTotalCost()); + customer3.addToBasket(coffe1); + Assertions.assertEquals(3.99f+2.49f+2*0.12f+0.99f*2, customer3.getTotalCost()); + customer3.addToBasket(bagel1); + Assertions.assertEquals(3.99f+2.49f+2*0.12f+0.99f+1.25f, customer3.getTotalCost()); + + + + } + @Test + public void getPriceTest(){ + Item bagel1 = new Bagel(0.49f,"Bagel", "Plain","BGLP"); + Item bagel2 = new Bagel(0.49f,"Bagel", "Onion","BGLO"); + Item filling1 = new Filling(0.12f,"Filling", "Egg","FILE"); + Item coffe1 = new Coffe(0.99f,"Coffee", "Black","COFB"); + Item coffe2 = new Coffe(1.19f,"Coffee", "White","COFW"); + Item coffe3 = new Coffe(1.29f,"Coffee", "Latte","COFL"); + + + + ArrayList list = new ArrayList<>(); + HashMap currentStock = new HashMap<>(); +// currentStock.put(bagel1, 2); +// currentStock.put(bagel2, 2); +// +// currentStock.put(filling1, 10); + + Basket basket = new Basket(list); + //how does extend work here? + Customer customer = new Customer(basket); + + + Assertions.assertEquals(0.12f, customer.getPrice(filling1)); + + Assertions.assertEquals(0.49f, customer.getPrice(bagel1)); + + Assertions.assertEquals(0.49f, customer.getPrice(bagel2)); + + Assertions.assertEquals(0.99f, customer.getPrice(coffe1)); + + Assertions.assertEquals(1.19f, customer.getPrice(coffe2)); + + Assertions.assertEquals(1.29f, customer.getPrice(coffe3)); + + + } + @Test + public void setCurrentStock(){ + Item bagel1 = new Bagel(0.49f,"Bagel", "Plain","BGLP"); + Item bagel2 = new Bagel(0.49f,"Bagel", "Onion","BGLO"); + Item filling1 = new Filling(0.12f,"Filling", "Egg","FILE"); + Item coffe1 = new Coffe(0.99f,"Coffee", "Black","COFB"); + Item coffe2 = new Coffe(1.19f,"Coffee", "White","COFW"); + Item coffe3 = new Coffe(1.29f,"Coffee", "Latte","COFL"); + + + + ArrayList list = new ArrayList<>(); + HashMap currentStock = new HashMap<>(); + currentStock.put(bagel1, 2); + currentStock.put(bagel2, 2); +// + currentStock.put(filling1, 10); + currentStock.put(coffe2,20); + Manager manager = new Manager(currentStock, 4); + + Basket basket = new Basket(list); + //how does extend work here? + Customer customer = new Customer(basket); + + //item exists + Assertions.assertEquals(true, Manager.setCurrentStock(coffe2,25)); + Assertions.assertEquals(true, Manager.setCurrentStock(coffe3,20)); + + //item does not exist + Assertions.assertEquals(false, Manager.setCurrentStock(null,20)); + + } + + +} + +