diff --git a/domain-model.md b/domain-model.md new file mode 100644 index 000000000..dd92f32fa --- /dev/null +++ b/domain-model.md @@ -0,0 +1,92 @@ +# Bobs bagels + +## Item + +| Method | Member Variable | Scenario | Result | +|---------------------|---------------------|----------|--------| +| | Double price | | | +| | String name | | | +| | String abbreviation | | | +| Getters and setters | | | | + +### Bagel +#### SesameBagel +#### OnionBagel +#### EverythingBagel +#### PlainBagel + +### Filling +#### HamFilling +#### SmokedSalmonFilling +#### CreamCheeseFilling +#### CheeseFilling +#### EggFilling +#### BaconFilling + +### Coffee +#### BlackCoffee +#### WhiteCoffee +#### CappuccinoCoffee +#### LatteCoffee + +## Basket +| Method | Member Variable | Scenario | Result | +|------------------------------|-----------------------|----------------------------------------------------|--------------------------------| +| | ArrayList items | | | +| | Int basketSize | | | +| add(Item item) | | Adding an item to a basket which is not full | String "successfully added" | +| | | Adding an item to a basket which is full | String "Basket is full" | +| | | Adding an item not in inventory to a basket | String "Item not in inventory" | +| | | | | +| remove(String item) | | Removing an existing item | String "Successfully removed" | +| | | Removing an item that does not exist | String "No item found" | +| | | | | +| resizeBasket(int newSize) | | Resizing the basket to an accepted size | true | +| | | Resizing the basket to an unaccepted size | false | +| | | | | +| calculateTotalCostOfBasket() | | Trying to calculate cost of a basket with items | Double totalCost | +| | | Trying to calculate cost of a basket with no items | Double 0 | + +## Menu + +| Method | Member Variable | Scenario | Result | +|----------------------------------|--------------------------------|--------------------------------------------------------------|--------------------------| +| | ArrayList allUniqueItems | | | +| listAllFillingPrices() | | List all the filling prices in the Menu and are in inventory | String prices | +| | | | | +| checkCostOfItem(String itemName) | | Check cost of an item that exists | String "Price: " + price | +| | | Check cost of an item that does not exist | String "No item found" | +| | | | | +| isInInventory(String itemName) | | Search for an item currently in inventory | true | +| isInInventory(String itemName) | | Search for an item currently not in inventory | false | + +# Extension +## Receipt +| Method | Member Variable | Scenario | Result | +|-----------------|--------------------------|--------------------------------------|----------------| +| | HashMap items | | | +| | Many more... | | | +| | | | | +| printReceipt() | | Print receipt of all items in basket | String receipt | + +## Basket +## Basket +| Method | Member Variable | Scenario | Result | +|-----------------------------------------------------|-----------------------|----------------------------------------------------|--------------------------------| +| | ArrayList items | | | +| | Int basketSize | | | +| add(Item item) | | Adding an item to a basket which is not full | String "successfully added" | +| | | Adding an item to a basket which is full | String "Basket is full" | +| | | Adding an item not in inventory to a basket | String "Item not in inventory" | +| | | | | +| remove(String item) | | Removing an existing item | String "Successfully removed" | +| | | Removing an item that does not exist | String "No item found" | +| | | | | +| resizeBasket(int newSize) | | Resizing the basket to an accepted size | true | +| | | Resizing the basket to an unaccepted size | false | +| | | | | +| calculateTotalCostOfBasket() | | Trying to calculate cost of a basket with items | Double totalCost | +| | | Trying to calculate cost of a basket with no items | Double 0 | +| --Extension version-- | | | | +| calculateTotalCostOfBasketWithDiscounts() | | | Double totalCost | +| calculateTotalCostOfBasketWithDiscountsAndReceipt() | | | String receipt | \ No newline at end of file diff --git a/gleek-Y4rWchvhyN9gG79FMj1c_A (2).png b/gleek-Y4rWchvhyN9gG79FMj1c_A (2).png new file mode 100644 index 000000000..15f5b00fd Binary files /dev/null and b/gleek-Y4rWchvhyN9gG79FMj1c_A (2).png differ diff --git a/src/main/java/com/booleanuk/core/BaconFilling.java b/src/main/java/com/booleanuk/core/BaconFilling.java new file mode 100644 index 000000000..144dd622c --- /dev/null +++ b/src/main/java/com/booleanuk/core/BaconFilling.java @@ -0,0 +1,9 @@ +package com.booleanuk.core; + +public class BaconFilling extends Filling{ + public BaconFilling(){ + name = "Bacon"; + price = 0.12; + abbreviation = "FILB"; + } +} 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..f5e025363 --- /dev/null +++ b/src/main/java/com/booleanuk/core/Bagel.java @@ -0,0 +1,5 @@ +package com.booleanuk.core; + +public class Bagel extends Item { + +} 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..82b108c81 --- /dev/null +++ b/src/main/java/com/booleanuk/core/Basket.java @@ -0,0 +1,70 @@ +package com.booleanuk.core; + +import java.sql.Timestamp; +import java.util.ArrayList; +import java.util.Date; + +public class Basket { + + private ArrayList items; + private int basketSize; + + public Basket(){ + items = new ArrayList<>(); + basketSize = 100; + } + + public String add(Item item, Menu menu){ + String msg = ""; + if(!menu.isInMenu(item)){ + msg = "Item not on the menu"; + return msg; + } + if(items.size() >= basketSize){ + return msg = "Basket is full"; + } + items.add(item); + if(menu.isInMenu(item)){ + msg = "Successfully added"; + + } + return msg; + + } + + public String remove(String itemName){ + String msg = ""; + for (Item i : items){ + if(i.getName() == itemName){ + items.remove(i); + msg = "Successfully removed"; + return msg; + } + + } + + msg = "No item found"; + + return msg; + } + + public Boolean resizeBasket(int newSize){ + if(newSize>15){ + return false; + } + basketSize = newSize; + return true; + } + + public Double calculateTotalCostOfBasket(){ + double total = 0; + + for(Item i : items){ + total += i.getPrice(); + } + + return total; + } + + +} diff --git a/src/main/java/com/booleanuk/core/BlackCoffee.java b/src/main/java/com/booleanuk/core/BlackCoffee.java new file mode 100644 index 000000000..af95df26b --- /dev/null +++ b/src/main/java/com/booleanuk/core/BlackCoffee.java @@ -0,0 +1,10 @@ +package com.booleanuk.core; + +public class BlackCoffee extends Coffee{ + + public BlackCoffee(){ + name = "Black"; + price = 0.99; + abbreviation = "COFB"; + } +} diff --git a/src/main/java/com/booleanuk/core/CappuccinoCoffee.java b/src/main/java/com/booleanuk/core/CappuccinoCoffee.java new file mode 100644 index 000000000..6140e1ad7 --- /dev/null +++ b/src/main/java/com/booleanuk/core/CappuccinoCoffee.java @@ -0,0 +1,10 @@ +package com.booleanuk.core; + +public class CappuccinoCoffee extends Coffee{ + + public CappuccinoCoffee(){ + name = "Cappuccino"; + price = 1.29; + abbreviation = "COFC"; + } +} diff --git a/src/main/java/com/booleanuk/core/CheeseFilling.java b/src/main/java/com/booleanuk/core/CheeseFilling.java new file mode 100644 index 000000000..126fe271b --- /dev/null +++ b/src/main/java/com/booleanuk/core/CheeseFilling.java @@ -0,0 +1,10 @@ +package com.booleanuk.core; + +public class CheeseFilling extends Filling{ + + public CheeseFilling(){ + name = "Cheese"; + price = 0.12; + abbreviation = "FILC"; + } +} diff --git a/src/main/java/com/booleanuk/core/Coffee.java b/src/main/java/com/booleanuk/core/Coffee.java new file mode 100644 index 000000000..a938086b1 --- /dev/null +++ b/src/main/java/com/booleanuk/core/Coffee.java @@ -0,0 +1,4 @@ +package com.booleanuk.core; + +public class Coffee extends Item{ +} diff --git a/src/main/java/com/booleanuk/core/CreamCheeseFilling.java b/src/main/java/com/booleanuk/core/CreamCheeseFilling.java new file mode 100644 index 000000000..ae4329078 --- /dev/null +++ b/src/main/java/com/booleanuk/core/CreamCheeseFilling.java @@ -0,0 +1,10 @@ +package com.booleanuk.core; + +public class CreamCheeseFilling extends Filling{ + + public CreamCheeseFilling(){ + name = "CreamCheese"; + price = 0.12; + abbreviation = "FILX"; + } +} diff --git a/src/main/java/com/booleanuk/core/EggFilling.java b/src/main/java/com/booleanuk/core/EggFilling.java new file mode 100644 index 000000000..6df041623 --- /dev/null +++ b/src/main/java/com/booleanuk/core/EggFilling.java @@ -0,0 +1,10 @@ +package com.booleanuk.core; + +public class EggFilling extends Filling{ + + public EggFilling(){ + name = "Egg"; + price = 0.12; + abbreviation = "FILE"; + } +} diff --git a/src/main/java/com/booleanuk/core/EverythingBagel.java b/src/main/java/com/booleanuk/core/EverythingBagel.java new file mode 100644 index 000000000..2c46b80a6 --- /dev/null +++ b/src/main/java/com/booleanuk/core/EverythingBagel.java @@ -0,0 +1,10 @@ +package com.booleanuk.core; + +public class EverythingBagel extends Bagel{ + + public EverythingBagel(){ + name = "Everything"; + price = 0.49; + abbreviation = "BGLE"; + } +} 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..76f720714 --- /dev/null +++ b/src/main/java/com/booleanuk/core/Filling.java @@ -0,0 +1,4 @@ +package com.booleanuk.core; + +public class Filling extends Item{ +} diff --git a/src/main/java/com/booleanuk/core/HamFilling.java b/src/main/java/com/booleanuk/core/HamFilling.java new file mode 100644 index 000000000..bf8156119 --- /dev/null +++ b/src/main/java/com/booleanuk/core/HamFilling.java @@ -0,0 +1,10 @@ +package com.booleanuk.core; + +public class HamFilling extends Filling{ + + public HamFilling(){ + name = "Ham"; + price = 0.12; + abbreviation = "FILH"; + } +} 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..3cff0f1e5 --- /dev/null +++ b/src/main/java/com/booleanuk/core/Item.java @@ -0,0 +1,19 @@ +package com.booleanuk.core; + +public class Item { + protected double price; + protected String name; + protected String abbreviation; + + public double getPrice() { + return price; + } + + public String getName() { + return name; + } + + public String getAbbreviation() { + return abbreviation; + } +} diff --git a/src/main/java/com/booleanuk/core/LatteCoffee.java b/src/main/java/com/booleanuk/core/LatteCoffee.java new file mode 100644 index 000000000..5cac1569b --- /dev/null +++ b/src/main/java/com/booleanuk/core/LatteCoffee.java @@ -0,0 +1,10 @@ +package com.booleanuk.core; + +public class LatteCoffee extends Coffee{ + + public LatteCoffee(){ + name = "Latte"; + price = 1.29; + abbreviation = "COFL"; + } +} diff --git a/src/main/java/com/booleanuk/core/Menu.java b/src/main/java/com/booleanuk/core/Menu.java new file mode 100644 index 000000000..aa7c386ff --- /dev/null +++ b/src/main/java/com/booleanuk/core/Menu.java @@ -0,0 +1,91 @@ +package com.booleanuk.core; + +import java.util.ArrayList; +import java.util.Objects; + +public class Menu { + + private ArrayList currentMenu; + + public Menu(){ + currentMenu = new ArrayList<>(); + fillMenu(); + } + + public String listAllFillingPrices(){ + String pricingList = ""; + for(Item item : currentMenu){ + if(item.getAbbreviation().contains("FIL")){ + pricingList += "Name: " + item.getName() + ", Price: " + item.getPrice() + "\n"; + } + + + } + return pricingList; + } + + public String checkCostOfItem(String itemName){ + String price = "No item found"; + for(Item item : currentMenu){ + if(item.getName().equals(itemName)){ + price = "Price: " + item.getPrice(); + return price; + } + + } + return price; + + } + + public Boolean isInMenu(Item item){ + for(Item i : currentMenu){ + if(Objects.equals(i.getName(), item.getName())){ + return true; + } + } + return false; + } + + public Boolean isInMenu(String name){ + for(Item i : currentMenu){ + if(Objects.equals(i.name, name)){ + return true; + } + } + return false; + } + + private void fillMenu(){ + + Item onionBagel = new OnionBagel(); + currentMenu.add(onionBagel); + Item plainBagel = new PlainBagel(); + currentMenu.add(plainBagel); + Item everythingBagel = new EverythingBagel(); + currentMenu.add(everythingBagel); + Item sesameBagel = new SesameBagel(); + currentMenu.add(sesameBagel); + Item blackCoffee = new BlackCoffee(); + currentMenu.add(blackCoffee); + Item whiteCoffee = new WhiteCoffee(); + currentMenu.add(whiteCoffee); + Item cappuccino = new CappuccinoCoffee(); + currentMenu.add(cappuccino); + Item latte = new LatteCoffee(); + currentMenu.add(latte); + Item bacon = new BaconFilling(); + currentMenu.add(bacon); +// Item egg = new EggFilling(); +// currentMenu.add(egg); + Item cheese = new CheeseFilling(); + currentMenu.add(cheese); + Item creamCheese = new CreamCheeseFilling(); + currentMenu.add(creamCheese); + Item smokedSalmon = new SmokedSalmonFilling(); + currentMenu.add(smokedSalmon); + Item ham = new HamFilling(); + currentMenu.add(ham); + + + } +} diff --git a/src/main/java/com/booleanuk/core/OnionBagel.java b/src/main/java/com/booleanuk/core/OnionBagel.java new file mode 100644 index 000000000..5e44ae7a2 --- /dev/null +++ b/src/main/java/com/booleanuk/core/OnionBagel.java @@ -0,0 +1,10 @@ +package com.booleanuk.core; + +public class OnionBagel extends Bagel{ + + public OnionBagel(){ + name = "Onion"; + price = 0.49; + abbreviation = "BGLO"; + } +} diff --git a/src/main/java/com/booleanuk/core/PlainBagel.java b/src/main/java/com/booleanuk/core/PlainBagel.java new file mode 100644 index 000000000..081a7c988 --- /dev/null +++ b/src/main/java/com/booleanuk/core/PlainBagel.java @@ -0,0 +1,10 @@ +package com.booleanuk.core; + +public class PlainBagel extends Bagel{ + + public PlainBagel(){ + name = "Plain"; + price = 0.39; + abbreviation = "BGLP"; + } +} diff --git a/src/main/java/com/booleanuk/core/SesameBagel.java b/src/main/java/com/booleanuk/core/SesameBagel.java new file mode 100644 index 000000000..f5c8fc000 --- /dev/null +++ b/src/main/java/com/booleanuk/core/SesameBagel.java @@ -0,0 +1,10 @@ +package com.booleanuk.core; + +public class SesameBagel extends Bagel{ + + public SesameBagel(){ + name = "Sesame"; + price = 0.49; + abbreviation = "BGLS"; + } +} diff --git a/src/main/java/com/booleanuk/core/SmokedSalmonFilling.java b/src/main/java/com/booleanuk/core/SmokedSalmonFilling.java new file mode 100644 index 000000000..f1f68d627 --- /dev/null +++ b/src/main/java/com/booleanuk/core/SmokedSalmonFilling.java @@ -0,0 +1,10 @@ +package com.booleanuk.core; + +public class SmokedSalmonFilling extends Filling{ + + public SmokedSalmonFilling(){ + name = "SmokedSalmon"; + price = 0.12; + abbreviation = "FILS"; + } +} diff --git a/src/main/java/com/booleanuk/core/WhiteCoffee.java b/src/main/java/com/booleanuk/core/WhiteCoffee.java new file mode 100644 index 000000000..39114e874 --- /dev/null +++ b/src/main/java/com/booleanuk/core/WhiteCoffee.java @@ -0,0 +1,10 @@ +package com.booleanuk.core; + +public class WhiteCoffee extends Coffee{ + + public WhiteCoffee(){ + name = "White"; + price = 1.19; + abbreviation = "COFW"; + } +} diff --git a/src/main/java/com/booleanuk/extension/ExtensionBasket.java b/src/main/java/com/booleanuk/extension/ExtensionBasket.java new file mode 100644 index 000000000..695f10c75 --- /dev/null +++ b/src/main/java/com/booleanuk/extension/ExtensionBasket.java @@ -0,0 +1,164 @@ +package com.booleanuk.extension; + +import com.booleanuk.core.Item; +import com.booleanuk.core.Menu; + +import java.util.ArrayList; + +public class ExtensionBasket { + + private ArrayList items; + private int basketSize; + + public ExtensionBasket(){ + items = new ArrayList<>(); + basketSize = 100; + } + + public String add(Item item, Menu menu){ + String msg = ""; + if(!menu.isInMenu(item)){ + msg = "Item not on the menu"; + return msg; + } + if(items.size() >= basketSize){ + return msg = "Basket is full"; + } + items.add(item); + if(menu.isInMenu(item)){ + msg = "Successfully added"; + + } + return msg; + + } + + public String remove(String itemName){ + String msg = ""; + for (Item i : items){ + if(i.getName() == itemName){ + items.remove(i); + msg = "Successfully removed"; + return msg; + } + + } + + msg = "No item found"; + + return msg; + } + + public Boolean resizeBasket(int newSize){ + if(newSize>15){ + return false; + } + basketSize = newSize; + return true; + } + + public Double calculateTotalCostOfBasket(){ + double total = 0; + + for(Item i : items){ + total += i.getPrice(); + } + + return total; + } + + public double calculateTotalCostOfBasketWithDiscounts(){ + double total = 0; + int numOfBagels = 0; + int numOfPlainBagels = 0; + int numOfOnionBagels = 0; + int numOfEverythingBagels = 0; + int numOfSesameBagels = 0; + int numbOfCoffees = 0; + + for(Item i : items){ + if(i.getAbbreviation().equals("BGLO")){ + numOfOnionBagels++; + numOfBagels++; + } + if(i.getAbbreviation().equals("BGLP")){ + numOfPlainBagels++; + numOfBagels++; + } + if(i.getAbbreviation().equals("BGLE")){ + numOfEverythingBagels++; + numOfBagels++; + } + if(i.getAbbreviation().equals("BGLS")){ + numOfSesameBagels++; + numOfBagels++; + } + if(i.getAbbreviation().contains("COF")){ + numbOfCoffees++; + total += i.getPrice(); + } + if(i.getAbbreviation().contains("FIL")){ + + total += i.getPrice(); + } + + } + + + if(numOfOnionBagels >= 12){ + numOfOnionBagels = numOfOnionBagels % 12; + //total += numOfOnionBagels * 0.49 + 3.99; + total += 3.99; + } + if(numOfOnionBagels >= 6){ + numOfOnionBagels = numOfOnionBagels % 6; + total += 2.49; + } + total += numOfOnionBagels * 0.49d; + + + if(numOfPlainBagels >= 12){ + numOfPlainBagels = numOfPlainBagels % 12; + total += 3.99; + } + if(numOfPlainBagels >= 6){ + numOfPlainBagels = numOfPlainBagels % 6; + total += 2.49; + } + total += numOfPlainBagels * 0.39d; + + if(numOfEverythingBagels >= 12){ + numOfEverythingBagels = numOfEverythingBagels % 12; + total += 3.99; + } + if(numOfEverythingBagels >= 6){ + numOfEverythingBagels = numOfEverythingBagels % 6; + total += 2.49; + } + total += numOfEverythingBagels * 0.49d; + + if(numOfSesameBagels >= 12){ + numOfSesameBagels = numOfSesameBagels % 12; + total += 3.99; + } + if(numOfSesameBagels >= 6){ + numOfSesameBagels = numOfSesameBagels % 6; + total += 2.49; + } + total += numOfSesameBagels * 0.49d; + + if (numOfBagels == 1 && numbOfCoffees == 1) { + total = 1.25; + } + + return total; + } + + public String calculateTotalCostOfBasketWithDiscountsAndReceipt(){ + Receipt receipt = new Receipt(items); + String outputReceipt = receipt.printReceipt(); + + return outputReceipt; + } + +} diff --git a/src/main/java/com/booleanuk/extension/Receipt.java b/src/main/java/com/booleanuk/extension/Receipt.java new file mode 100644 index 000000000..7fd7fb487 --- /dev/null +++ b/src/main/java/com/booleanuk/extension/Receipt.java @@ -0,0 +1,288 @@ +package com.booleanuk.extension; + +import com.booleanuk.core.Item; +import com.booleanuk.core.Menu; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.*; + + +public class Receipt { + private ArrayList basketItems; + private ArrayList receiptItems; + private Menu menu; + private double total = 0; + private double totalPriceOfPlainBagels = 0; + private double totalPriceOfOnionBagels = 0; + private double totalPriceOfEverythingBagels = 0; + private double totalPriceOfSesameBagels = 0; + private double totalPriceOfBlackCoffee = 0; + private double totalPriceOfWhiteCoffee = 0; + private double totalPriceOfCappuccino = 0; + private double totalPriceOfLatte = 0; + private double totalPriceOfBacon = 0; + private double totalPriceOfEgg = 0; + private double totalPriceOfCheese = 0; + private double totalPriceOfCreamCheese = 0; + private double totalPriceOfSmokedSalmon = 0; + private double totalPriceOfHam = 0; + + public Receipt(ArrayList basketItems){ + this.basketItems = basketItems; + menu = new Menu(); + receiptItems = new ArrayList<>(); + populateReceiptItems(); + } + + public String printReceipt(){ + LocalDateTime now = LocalDateTime.now(); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + String timestamp = now.format(formatter); + + String topOfReceipt = + " ~~~ Bob's Bagels ~~~\n" + + "\n" + + " " + timestamp + "\n" + + "\n" + + "----------------------------\n" + + "\n"; + + total = calculatePriceOfBasket(); + + String purchasedItems = turnPurchasedItemsToString(); + + String totalCostOfItems = + "\n----------------------------\n" + + "Total £"+total+"\n" + + "\n" + + " Thank you\n" + + " for your order!"; + + String receiptString = topOfReceipt + purchasedItems + totalCostOfItems; + + return receiptString; + } + + private String turnPurchasedItemsToString(){ + String purchasedItems = ""; + double itemCost = 0; + int numOfItems = 0; + + + for (var itemSet : receiptItems){ + + switch(itemSet.getAbbreviation()){ + case "BGLO": + itemCost = totalPriceOfOnionBagels; + break; + case "BGLP": + itemCost = totalPriceOfPlainBagels; + break; + case "BGLE": + itemCost = totalPriceOfEverythingBagels; + break; + case "BGLS": + itemCost = totalPriceOfSesameBagels; + break; + case "COFB": + itemCost = totalPriceOfBlackCoffee; + break; + case "COFW": + itemCost = totalPriceOfWhiteCoffee; + break; + case "COFC": + itemCost = totalPriceOfCappuccino; + break; + case "COFL": + itemCost = totalPriceOfLatte; + break; + case "FILB": + itemCost = totalPriceOfBacon; + break; + case "FILE": + itemCost = totalPriceOfEgg; + break; + case "FILC": + itemCost = totalPriceOfCheese; + break; + case "FILX": + itemCost = totalPriceOfCreamCheese; + break; + case "FILS": + itemCost = totalPriceOfSmokedSalmon; + break; + case "FILH": + itemCost = totalPriceOfHam; + break; + } + for(Item item : basketItems){ + if(item.getName() == itemSet.getName()){ + numOfItems++; + } + } + if(numOfItems > 0){ + double roundedItemCost = Math.round(itemCost * 100.0) / 100.0; + purchasedItems += itemSet.getName() + " " + numOfItems + " £" + roundedItemCost + "\n"; + numOfItems = 0; + } + + } + return purchasedItems; + } + + private double calculatePriceOfBasket(){ + + int numOfBagels = 0; + int numOfPlainBagels = 0; + int numOfOnionBagels = 0; + int numOfEverythingBagels = 0; + int numOfSesameBagels = 0; + int numbOfCoffees = 0; + + + for(Item i : basketItems){ + switch(i.getAbbreviation()){ + case "BGLO": + numOfOnionBagels++; + numOfBagels++; + break; + case "BGLP": + numOfPlainBagels++; + numOfBagels++; + break; + case "BGLE": + numOfEverythingBagels++; + numOfBagels++; + break; + case "BGLS": + numOfSesameBagels++; + numOfBagels++; + break; + case "COFB": + numbOfCoffees++; + totalPriceOfBlackCoffee += i.getPrice(); + total += i.getPrice(); + break; + case "COFW": + numbOfCoffees++; + totalPriceOfWhiteCoffee += i.getPrice(); + total += i.getPrice(); + break; + case "COFC": + numbOfCoffees++; + totalPriceOfCappuccino += i.getPrice(); + total += i.getPrice(); + break; + case "COFL": + numbOfCoffees++; + totalPriceOfLatte += i.getPrice(); + total += i.getPrice(); + break; + case "FILB": + totalPriceOfBacon += i.getPrice(); + total += i.getPrice(); + break; + case "FILC": + totalPriceOfCheese += i.getPrice(); + total += i.getPrice(); + break; + case "FILE": + totalPriceOfEgg += i.getPrice(); + total += i.getPrice(); + break; + case "FILX": + totalPriceOfCreamCheese += i.getPrice(); + total += i.getPrice(); + break; + case "FILS": + totalPriceOfSmokedSalmon += i.getPrice(); + total += i.getPrice(); + break; + case "FILH": + totalPriceOfHam += i.getPrice(); + total += i.getPrice(); + break; + } + + + } + + + if(numOfOnionBagels >= 12){ + numOfOnionBagels = numOfOnionBagels % 12; + totalPriceOfOnionBagels +=3.99; + //total += 3.99; + } + if(numOfOnionBagels >= 6){ + numOfOnionBagels = numOfOnionBagels % 6; + totalPriceOfOnionBagels += 2.49; + //total += 2.49; + } + totalPriceOfOnionBagels += numOfOnionBagels * 0.49; + //total += numOfOnionBagels * 0.49d; + + + if(numOfPlainBagels >= 12){ + numOfPlainBagels = numOfPlainBagels % 12; + totalPriceOfPlainBagels += 3.99; + //total += 3.99; + } + if(numOfPlainBagels >= 6){ + numOfPlainBagels = numOfPlainBagels % 6; + totalPriceOfPlainBagels += 2.49; + //total += 2.49; + } + totalPriceOfPlainBagels += numOfPlainBagels * 0.39; + //total += numOfPlainBagels * 0.39d; + + if(numOfEverythingBagels >= 12){ + numOfEverythingBagels = numOfEverythingBagels % 12; + totalPriceOfEverythingBagels += 3.99; + //total += 3.99; + } + if(numOfEverythingBagels >= 6){ + numOfEverythingBagels = numOfEverythingBagels % 6; + totalPriceOfEverythingBagels += 2.49; + //total += 2.49; + } + totalPriceOfEverythingBagels += numOfEverythingBagels * 0.49; + + + if(numOfSesameBagels >= 12){ + numOfSesameBagels = numOfSesameBagels % 12; + totalPriceOfSesameBagels += 3.99; + + } + if(numOfSesameBagels >= 6){ + numOfSesameBagels = numOfSesameBagels % 6; + totalPriceOfSesameBagels += 2.49; + + } + totalPriceOfSesameBagels += numOfSesameBagels * 0.49; + + + if (numOfBagels == 1 && numbOfCoffees == 1) { + total = 1.25; + } + + total = total + totalPriceOfSesameBagels + totalPriceOfPlainBagels + totalPriceOfEverythingBagels + + totalPriceOfOnionBagels; + + double roundedTotalCost = Math.round(total * 100.0) / 100.0; + + return roundedTotalCost; + } + + private void populateReceiptItems(){ + ArrayListitemNames = new ArrayList<>(); + + for(Item item : basketItems){ + if(!itemNames.contains(item.getName())){ + itemNames.add(item.getName()); + receiptItems.add(item); + } + } + + } +} 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 000000000..640bc85e4 --- /dev/null +++ b/src/test/java/com/booleanuk/core/BasketTest.java @@ -0,0 +1,100 @@ +package com.booleanuk.core; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +public class BasketTest { + + + @Test + public void testAddItemToBasketWhichIsNotFull(){ + Basket basket = new Basket(); + Menu menu = new Menu(); + + Item item = new HamFilling(); + + Assertions.assertEquals("Successfully added", basket.add(item, menu)); + } + + @Test + public void testAddItemToBasketWhichIsFull(){ + Basket basket = new Basket(); + Menu menu = new Menu(); + Item item = new PlainBagel(); + for(int i = 0; i < 100; i++){ + + basket.add(item, menu); + } + + + + + Assertions.assertEquals("Basket is full", basket.add(item, menu)); + } + + @Test + public void testAddItemTosBaketWhichDoesNotExist(){ + Basket basket = new Basket(); + Menu menu = new Menu(); + + Item item = new EggFilling(); + + Assertions.assertEquals("Item not on the menu", basket.add(item, menu)); + } + + @Test + public void testRemoveExistingItemFromBasket(){ + Basket basket = new Basket(); + Menu menu = new Menu(); + Item ham = new HamFilling(); + basket.add(ham, menu); + + String item = "Ham"; + + Assertions.assertEquals("Successfully removed", basket.remove(item)); + } + + @Test + public void testRemoveNonExistingItemFromBasket(){ + Basket basket = new Basket(); + + String item = "Sausage"; + + Assertions.assertEquals("No item found", basket.remove(item)); + } + + @Test + public void testResizeBasketToAcceptableSize(){ + Basket basket = new Basket(); + + + + Assertions.assertTrue(basket.resizeBasket(10)); + } + + @Test + public void testResizeBasketToUnAcceptableSize(){ + Basket basket = new Basket(); + + + + Assertions.assertFalse(basket.resizeBasket(100)); + } + + @Test + public void testCalculateTotalCostOfBasket(){ + Basket basket = new Basket(); + Menu menu = new Menu(); + + Item hamFilling = new HamFilling(); + basket.add(hamFilling, menu); + Item sesameBagel = new SesameBagel(); + basket.add(sesameBagel, menu); + Item sesameBagel2 = new SesameBagel(); + basket.add(sesameBagel2, menu); + + Assertions.assertEquals(0.12 + 0.49 * 2, basket.calculateTotalCostOfBasket()); + } + + +} diff --git a/src/test/java/com/booleanuk/core/MenuTest.java b/src/test/java/com/booleanuk/core/MenuTest.java new file mode 100644 index 000000000..2b0430d27 --- /dev/null +++ b/src/test/java/com/booleanuk/core/MenuTest.java @@ -0,0 +1,94 @@ +package com.booleanuk.core; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; + +public class MenuTest { + +// ArrayList fillMenu(){ +// ArrayList menu = new ArrayList<>(); +// Item onionBagel = new OnionBagel(); +// menu.add(onionBagel); +// Item plainBagel = new PlainBagel(); +// menu.add(plainBagel); +// Item everythingBagel = new EverythingBagel(); +// menu.add(everythingBagel); +// Item sesameBagel = new SesameBagel(); +// menu.add(sesameBagel); +// Item blackCoffee = new BlackCoffee(); +// menu.add(blackCoffee); +// Item whiteCoffee = new WhiteCoffee(); +// menu.add(whiteCoffee); +// Item cappuccino = new CappuccinoCoffee(); +// menu.add(cappuccino); +// Item latte = new LatteCoffee(); +// menu.add(latte); +// Item bacon = new BaconFilling(); +// menu.add(bacon); +// Item egg = new EggFilling(); +// menu.add(egg); +// Item cheese = new CheeseFilling(); +// menu.add(cheese); +// Item creamCheese = new CreamCheeseFilling(); +// menu.add(creamCheese); +// Item smokedSalmon = new SmokedSalmonFilling(); +// menu.add(smokedSalmon); +// Item ham = new HamFilling(); +// menu.add(ham); +// +// return menu; +// } + + @Test + public void testListAllFillingPrices(){ + Menu menu = new Menu(); + + Assertions.assertEquals( + "Name: Bacon, Price: 0.12\n" + + "Name: Cheese, Price: 0.12\n" + + "Name: CreamCheese, Price: 0.12\n" + + "Name: SmokedSalmon, Price: 0.12\n" + + "Name: Ham, Price: 0.12\n", menu.listAllFillingPrices()); + } + + @Test + public void testCheckCostOfItemThatDoesExist(){ + Menu menu = new Menu(); + + String itemName = "Ham"; + + Assertions.assertEquals("Price: 0.12", menu.checkCostOfItem(itemName)); + } + + @Test + public void testCheckCostOfItemThatDoesNotExist(){ + Menu menu = new Menu(); + + String itemName = "Sausage"; + + Assertions.assertEquals("No item found", menu.checkCostOfItem(itemName)); + } + + @Test + public void testIsInInventoryWhenThereIs(){ + Menu menu = new Menu(); + + //fillMenu(); + Item ham = new HamFilling(); + + Assertions.assertTrue(menu.isInMenu(ham)); + + + } + @Test + public void testIsInInventoryWhenThereIsNot(){ + + Menu inventory = new Menu(); + + + Assertions.assertFalse(inventory.isInMenu("Sausage")); + + } +} diff --git a/src/test/java/com/booleanuk/extension/ExtensionBasketTest.java b/src/test/java/com/booleanuk/extension/ExtensionBasketTest.java new file mode 100644 index 000000000..a22277a1e --- /dev/null +++ b/src/test/java/com/booleanuk/extension/ExtensionBasketTest.java @@ -0,0 +1,209 @@ +package com.booleanuk.extension; + +import com.booleanuk.core.*; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.sql.Timestamp; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +public class ExtensionBasketTest { + + @Test + public void testCalculateTotalCostOfBasketWithDiscounts(){ + ExtensionBasket basket = new ExtensionBasket(); + Menu menu = new Menu(); + + Item item1 = new OnionBagel(); + basket.add(item1, menu); + Item item2 = new OnionBagel(); + basket.add(item2, menu); + Item item3 = new PlainBagel(); + basket.add(item3, menu); + Item item4 = new PlainBagel(); + basket.add(item4, menu); + Item item5 = new PlainBagel(); + basket.add(item5, menu); + Item item6 = new PlainBagel(); + basket.add(item6, menu); + Item item7 = new PlainBagel(); + basket.add(item7, menu); + Item item8 = new PlainBagel(); + basket.add(item8, menu); + Item item9 = new PlainBagel(); + basket.add(item9, menu); + Item item10 = new PlainBagel(); + basket.add(item10, menu); + Item item11 = new PlainBagel(); + basket.add(item11, menu); + Item item12 = new PlainBagel(); + basket.add(item12, menu); + Item item13 = new PlainBagel(); + basket.add(item13, menu); + Item item14 = new PlainBagel(); + basket.add(item14, menu); + Item item15 = new EverythingBagel(); + basket.add(item15, menu); + Item item16 = new EverythingBagel(); + basket.add(item16, menu); + Item item17 = new EverythingBagel(); + basket.add(item17, menu); + Item item18 = new EverythingBagel(); + basket.add(item18, menu); + Item item19 = new EverythingBagel(); + basket.add(item19, menu); + Item item20 = new EverythingBagel(); + basket.add(item20, menu); + Item item21 = new BlackCoffee(); + basket.add(item21, menu); + Item item22 = new BlackCoffee(); + basket.add(item22, menu); + Item item23 = new BlackCoffee(); + basket.add(item23, menu); + + Assertions.assertEquals(10.43, basket.calculateTotalCostOfBasketWithDiscounts()); + + + } + + @Test + public void testCalculateTotalCostOfBasketWithDiscounts2(){ + Menu menu = new Menu(); + ExtensionBasket basket = new ExtensionBasket(); + + for(int i = 0; i < 16; i++){ + Item plainBagel = new PlainBagel(); + basket.add(plainBagel, menu); + } + + Assertions.assertEquals(5.55, basket.calculateTotalCostOfBasketWithDiscounts(), 0.001); + } + + @Test + public void testCalculateTotalCostOfBasketWithDiscounts3(){ + Menu menu = new Menu(); + ExtensionBasket basket = new ExtensionBasket(); + + + Item bagel = new PlainBagel(); + Item coffee = new WhiteCoffee(); + + basket.add(bagel, menu); + basket.add(coffee, menu); + + Assertions.assertEquals(1.25, basket.calculateTotalCostOfBasketWithDiscounts()); + } + + @Test + public void testCalculateTotalCostOfBasketWithDiscountsAndReceipt(){ + ExtensionBasket basket = new ExtensionBasket(); + Menu menu = new Menu(); + LocalDateTime now = LocalDateTime.now(); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + String timestamp = now.format(formatter); + + + Item item1 = new OnionBagel(); + basket.add(item1, menu); + Item item2 = new OnionBagel(); + basket.add(item2, menu); + Item item3 = new PlainBagel(); + basket.add(item3, menu); + Item item4 = new PlainBagel(); + basket.add(item4, menu); + Item item5 = new PlainBagel(); + basket.add(item5, menu); + Item item6 = new PlainBagel(); + basket.add(item6, menu); + Item item7 = new PlainBagel(); + basket.add(item7, menu); + Item item8 = new PlainBagel(); + basket.add(item8, menu); + Item item9 = new PlainBagel(); + basket.add(item9, menu); + Item item10 = new PlainBagel(); + basket.add(item10, menu); + Item item11 = new PlainBagel(); + basket.add(item11, menu); + Item item12 = new PlainBagel(); + basket.add(item12, menu); + Item item13 = new PlainBagel(); + basket.add(item13, menu); + Item item14 = new PlainBagel(); + basket.add(item14, menu); + Item item15 = new EverythingBagel(); + basket.add(item15, menu); + Item item16 = new EverythingBagel(); + basket.add(item16, menu); + Item item17 = new EverythingBagel(); + basket.add(item17, menu); + Item item18 = new EverythingBagel(); + basket.add(item18, menu); + Item item19 = new EverythingBagel(); + basket.add(item19, menu); + Item item20 = new EverythingBagel(); + basket.add(item20, menu); + Item item21 = new BlackCoffee(); + basket.add(item21, menu); + Item item22 = new BlackCoffee(); + basket.add(item22, menu); + Item item23 = new BlackCoffee(); + basket.add(item23, menu); + + String expectedReceipt = + " ~~~ Bob's Bagels ~~~\n" + + "\n" + + " "+ timestamp +"\n" + + "\n" + + "----------------------------\n" + + "\n" + + "Onion 2 £0.98\n" + + "Plain 12 £3.99\n" + + "Everything 6 £2.49\n" + + "Black 3 £2.97\n" + + "\n" + + "----------------------------\n" + + "Total £10.43\n" + + "\n" + + " Thank you\n" + + " for your order!"; + + Assertions.assertEquals(expectedReceipt, basket.calculateTotalCostOfBasketWithDiscountsAndReceipt()); + + + } + + @Test + public void testCalculateTotalCostOfBasketWithDiscounts2AndReceipt(){ + Menu menu = new Menu(); + ExtensionBasket basket = new ExtensionBasket(); + LocalDateTime now = LocalDateTime.now(); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + String timestamp = now.format(formatter); + + + + for(int i = 0; i < 16; i++){ + Item plainBagel = new PlainBagel(); + basket.add(plainBagel, menu); + } + + String expectedReceipt = + " ~~~ Bob's Bagels ~~~\n" + + "\n" + + " " + timestamp + "\n" + + "\n" + + "----------------------------\n" + + "\n" + + "Plain 16 £5.55\n" + + "\n" + + "----------------------------\n" + + "Total £5.55\n" + + "\n" + + " Thank you\n" + + " for your order!"; + + Assertions.assertEquals(expectedReceipt, basket.calculateTotalCostOfBasketWithDiscountsAndReceipt()); + } +}