diff --git a/BasketClassDiagram.png b/BasketClassDiagram.png new file mode 100644 index 000000000..8304ae1f8 Binary files /dev/null and b/BasketClassDiagram.png differ diff --git a/InventoryClassDiagram.png b/InventoryClassDiagram.png new file mode 100644 index 000000000..043179372 Binary files /dev/null and b/InventoryClassDiagram.png differ diff --git a/ItemClassDiagram.png b/ItemClassDiagram.png new file mode 100644 index 000000000..58565e7ce Binary files /dev/null and b/ItemClassDiagram.png differ diff --git a/domain-model.md b/domain-model.md new file mode 100644 index 000000000..2d2076a17 --- /dev/null +++ b/domain-model.md @@ -0,0 +1,46 @@ + +## Item Class + +| Methods | Variables | Scenario | Output | +|------------------------|-------------------|------------------------------------|----------------| +| | `String sku ` | | | +| | `String name ` | | | +| | `String variant ` | | | +| | `float price ` | | | +| `String getSku() ` | | Want to get the id of an item | Return sku | +| `String getName() ` | | Want to get the name of an item | Return name | +| `String getVariant() ` | | Want to get the variant of an item | Return variant | +| `float getPrice() ` | | Want to get the price of an item | Return price | +| | | | | +| | | | | +| | | | | + + +## Basket Class + +| Methods | Variables | Scenario | Output | +|------------------------------------|--------------------------|--------------------------------------|--------------------------------| +| | `ArrayList items ` | | | +| | `boolean isFull ` | | | +| | `int capacity ` | | | +| | | | | +| `void addItem(String itemSku) ` | | Want to add item to basket with room | Adds item to basket | +| | | Want to add item to full basket | Informs about full basket | +| `void removeItem(String itemSku) ` | | Want to remove existing item | Removes item from basket | +| | | Want to remove non-existent item | Inform about non-existing item | +| `void checkCapacity() ` | | Want to check if basket is full | Updated isFull if needed | +| `void changeCapacity(int newCap) ` | | Want to change basket capacity | Change capacity to newCap | +| `float totalCost() ` | | Want to know cost of basket | Add together and return sum | +| `boolean containsItem() ` | | Item is in basket | True | +| | | Item is not in basket | False | +| `boolean containsItem() ` | | Item is in basket | True | + + +## Inventory Class + +| Methods | Variables | Scenario | Output | +|---------------------------------------|----------------------------------------------|------------------------------------|---------------------------------| +| | `HashMap inventory ` | | | +| `void addItem(String itemSku) ` | | Want to add item to inventory | Updates inventory | +| `void removeItem(String itemSku) ` | | Want to remove item from inventory | Updates inventory | + 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..7ae3df128 --- /dev/null +++ b/src/main/java/com/booleanuk/core/Basket.java @@ -0,0 +1,99 @@ +package com.booleanuk.core; + +import java.util.ArrayList; +import java.util.Scanner; + +public class Basket { + private ArrayList items = new ArrayList<>(); + private int capacity = 10; + private boolean isFull; + private Inventory inventory = new Inventory(); + + public Basket(Inventory inventory){ + this.isFull = false; + this.inventory = inventory; + } + + public Inventory getInventory(){ + return this.inventory; + } + + public ArrayList getItems(){ + return items; + } + + public boolean getIsFull(){ + return isFull; + } + + public int getCapacity(){ + return capacity; + } + + public void checkCapacity(){ + if (items.size() == capacity){ + isFull = true; + return; + } + isFull = false; + } + + public boolean containsItem(String itemSku){ + for (Item item : items){ + if (item.getSku().equals(itemSku)){ + return true; + } + } + return false; + } + + public void addItem(String itemSku){ + checkCapacity(); + if (isFull){ + System.out.println("Your basket is full, cant add item!"); + return; + } + if (inventory.getItemStock(itemSku) == 0){ + System.out.println("No stock left for chosen item!"); + return; + } + Item item = new Item(itemSku); + System.out.println(item.getVariant() + " " + item.getName() + " price: $" + item.getPrice()); + System.out.println("Do you want to add " + item.getVariant() + + " " + item.getName() +" to the basket? (yes/no): "); + + Scanner scanner = new Scanner(System.in); + String userInput = scanner.nextLine().trim().toLowerCase(); + + if (userInput.equals("yes")) { + items.add(item); + inventory.removeStockItem(itemSku, 1); + System.out.println(item.getVariant() + " " + item.getName() + " added to the basket."); + } else { + System.out.println(item.getVariant() + " " + item.getName() + " not added to the basket."); + } + } + + public void removeItem(String itemSku){ + for (Item item : items){ + if (item.getSku().equals(itemSku)){ + items.remove(item); + inventory.addStockItem(itemSku, 1); + return; + } + } + System.out.println("This item does not exist in the basket!"); + } + + public void changeCapacity(int newCap){ + this.capacity = newCap; + } + + public float totalCost(){ + float total = 0; + for (Item item : items){ + total += item.getPrice(); + } + return total; + } +} diff --git a/src/main/java/com/booleanuk/core/Inventory.java b/src/main/java/com/booleanuk/core/Inventory.java new file mode 100644 index 000000000..b3d592565 --- /dev/null +++ b/src/main/java/com/booleanuk/core/Inventory.java @@ -0,0 +1,41 @@ +package com.booleanuk.core; + +import java.util.HashMap; + +public class Inventory { + private HashMap stock = new HashMap<>(); + + + public Inventory(){ + + } + + public int getStockSize(){ + return this.stock.size(); + } + + public int getItemStock(String sku){ + return this.stock.get(sku); + } + + public void addStockItem(String sku, int amount){ + if (!stock.containsKey(sku)){ + stock.put(sku, amount); + return; + } + stock.put(sku, stock.get(sku) + amount); + } + + public void removeStockItem(String sku, int amount){ + if (stock.containsKey(sku) && stock.get(sku) >= amount){ + stock.put(sku, stock.get(sku) - amount); + if (stock.get(sku) == 0){ + stock.remove(sku); + } + return; + } + System.out.println("Not enough stock in inventory!"); + } + + +} 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..15bff5926 --- /dev/null +++ b/src/main/java/com/booleanuk/core/Item.java @@ -0,0 +1,80 @@ +package com.booleanuk.core; + +public class Item { + private String sku; + private String name; + private String variant; + private float price; + + public Item(String sku) { + this.sku = sku; + + if (sku.equals("BGLO")) { + this.name = "Bagel"; + this.variant = "Onion"; + this.price = 0.49f; + } else if (sku.equals("BGLP")) { + this.name = "Bagel"; + this.variant = "Plain"; + this.price = 0.39f; + } else if (sku.equals("BGLE")) { + this.name = "Bagel"; + this.variant = "Everything"; + this.price = 0.49f; + } else if (sku.equals("BGLS")) { + this.name = "Bagel"; + this.variant = "Sesame"; + this.price = 0.49f; + } else if (sku.equals("COFB")) { + this.name = "Coffee"; + this.variant = "Black"; + this.price = 0.99f; + } else if (sku.equals("COFW")) { + this.name = "Coffee"; + this.variant = "White"; + this.price = 1.19f; + } else if (sku.equals("COFC")) { + this.name = "Coffee"; + this.variant = "Capuccino"; + this.price = 1.29f; + } else if (sku.equals("COFL")) { + this.name = "Coffee"; + this.variant = "Latte"; + this.price = 1.29f; + } else if (sku.equals("FILB")) { + this.name = "Filling"; + this.variant = "Bacon"; + this.price = 0.12f; + } else if (sku.equals("FILE")) { + this.name = "Filling"; + this.variant = "Egg"; + this.price = 0.12f; + } else if (sku.equals("FILC")) { + this.name = "Filling"; + this.variant = "Cheese"; + this.price = 0.12f; + } else if (sku.equals("FILX")) { + this.name = "Filling"; + this.variant = "Cream Cheese"; + this.price = 0.12f; + } else if (sku.equals("FILS")) { + this.name = "Filling"; + this.variant = "Smoked Salmon"; + this.price = 0.12f; + } else if (sku.equals("FILH")) { + this.name = "Filling"; + this.variant = "Ham"; + this.price = 0.12f; + } else { + throw new IllegalArgumentException("Invalid SKU: " + sku); + } + } + + public String getSku() {return sku;} + + public String getName() {return name;} + + public String getVariant() {return variant;} + + public float getPrice() {return price;} +} diff --git a/src/main/java/com/booleanuk/extension/Basket.java b/src/main/java/com/booleanuk/extension/Basket.java new file mode 100644 index 000000000..b276ea077 --- /dev/null +++ b/src/main/java/com/booleanuk/extension/Basket.java @@ -0,0 +1,166 @@ +package com.booleanuk.extension; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Scanner; + +public class Basket { + private ArrayList items = new ArrayList<>(); + private int capacity = 10; + private boolean isFull; + private Inventory inventory = new Inventory(); + + public Basket(Inventory inventory){ + this.isFull = false; + this.inventory = inventory; + } + + public Inventory getInventory(){ + return this.inventory; + } + + public ArrayList getItems(){ + return items; + } + + public boolean getIsFull(){ + return isFull; + } + + public int getCapacity(){ + return capacity; + } + + public void checkCapacity(){ + if (items.size() == capacity){ + isFull = true; + return; + } + isFull = false; + } + + public boolean containsItem(String itemSku){ + for (Item item : items){ + if (item.getSku().equals(itemSku)){ + return true; + } + } + return false; + } + + public void addItem(String itemSku){ + checkCapacity(); + if (isFull){ + System.out.println("Your basket is full, cant add item!"); + return; + } + if (inventory.getItemStock(itemSku) == 0){ + System.out.println("No stock left for chosen item!"); + return; + } + Item item = new Item(itemSku); + System.out.println(item.getVariant() + " " + item.getName() + " price: $" + item.getPrice()); + System.out.println("Do you want to add " + item.getVariant() + + " " + item.getName() +" to the basket? (yes/no): "); + + Scanner scanner = new Scanner(System.in); + String userInput = scanner.nextLine().trim().toLowerCase(); + + if (userInput.equals("yes")) { + items.add(item); + inventory.removeStockItem(itemSku, 1); + System.out.println(item.getVariant() + " " + item.getName() + " added to the basket."); + } else { + System.out.println(item.getVariant() + " " + item.getName() + " not added to the basket."); + } + } + + public void removeItem(String itemSku){ + for (Item item : items){ + if (item.getSku().equals(itemSku)){ + items.remove(item); + inventory.addStockItem(itemSku, 1); + return; + } + } + System.out.println("This item does not exist in the basket!"); + } + + public void changeCapacity(int newCap){ + this.capacity = newCap; + } + + public float totalCost(){ + int bagelAmount = 0; + int blackCoffeeAmount = 0; + float total = 0; + + for (Item i : items){ + if (i.getSku().charAt(0) == 'B'){ + bagelAmount++; + } else if (i.getSku().equals("COFB")){ + blackCoffeeAmount++; + } + } + + if (bagelAmount >= 12){ + total += 3.99f; + bagelAmount -= 12; + } else if (bagelAmount >= 6){ + total += 2.49f; + bagelAmount -= 6; + } + + while (bagelAmount > 0 && blackCoffeeAmount > 0){ + total += 1.25f; + bagelAmount--; + blackCoffeeAmount--; + } + + for (int i = items.size() -1; i >= 0; i--){ + Item item = items.get(i); + if (item.getSku().charAt(0) == 'B' && bagelAmount > 0){ + total += item.getPrice(); + bagelAmount--; + }else if (item.getSku().charAt(0) == 'C' && !item.getSku().equals("COFB")){ + total += item.getPrice(); + } else if (item.getSku().charAt(0) == 'F'){ + total += item.getPrice(); + } + } + + total += blackCoffeeAmount * 0.99f; + + total = Math.round(total * 100) / 100.0f; + return total; + } + + public String getReceipt(){ + HashMap amounts = new HashMap<>(); + for (Item i : items){ + if (!amounts.containsKey(i)){ + amounts.put(i, 1); + } else { + amounts.put(i, amounts.get(i) + 1); + } + } + StringBuilder receipt = new StringBuilder(); + String title = String.format("%15s%-20s%5s", "", "Bobs Bagels", ""); + receipt.append("\n"); + receipt.append(title).append("\n"); + receipt.append("-".repeat(40)); + receipt.append("\n"); + for (Item key : amounts.keySet()){ + String item = String.format("%-20s%-10s%-10s", + key.getVariant() + " " + key.getName(), amounts.get(key), key.getPrice() * amounts.get(key)); + receipt.append(item).append("\n"); + } + receipt.append("-".repeat(40)); + receipt.append("\n"); + String total = String.format("%-10s%20s%-10s", "Total", "", this.totalCost()); + receipt.append(total); + receipt.append("\n"); + + return receipt.toString(); + } +} diff --git a/src/main/java/com/booleanuk/extension/Inventory.java b/src/main/java/com/booleanuk/extension/Inventory.java new file mode 100644 index 000000000..d38fece19 --- /dev/null +++ b/src/main/java/com/booleanuk/extension/Inventory.java @@ -0,0 +1,41 @@ +package com.booleanuk.extension; + +import java.util.HashMap; + +public class Inventory { + private HashMap stock = new HashMap<>(); + + + public Inventory(){ + + } + + public int getStockSize(){ + return this.stock.size(); + } + + public int getItemStock(String sku){ + return this.stock.get(sku); + } + + public void addStockItem(String sku, int amount){ + if (!stock.containsKey(sku)){ + stock.put(sku, amount); + return; + } + stock.put(sku, stock.get(sku) + amount); + } + + public void removeStockItem(String sku, int amount){ + if (stock.containsKey(sku) && stock.get(sku) >= amount){ + stock.put(sku, stock.get(sku) - amount); + if (stock.get(sku) == 0){ + stock.remove(sku); + } + return; + } + System.out.println("Not enough stock in inventory!"); + } + + +} diff --git a/src/main/java/com/booleanuk/extension/Item.java b/src/main/java/com/booleanuk/extension/Item.java new file mode 100644 index 000000000..72b76d6de --- /dev/null +++ b/src/main/java/com/booleanuk/extension/Item.java @@ -0,0 +1,80 @@ +package com.booleanuk.extension; + +public class Item { + private String sku; + private String name; + private String variant; + private float price; + + public Item(String sku) { + this.sku = sku; + + if (sku.equals("BGLO")) { + this.name = "Bagel"; + this.variant = "Onion"; + this.price = 0.49f; + } else if (sku.equals("BGLP")) { + this.name = "Bagel"; + this.variant = "Plain"; + this.price = 0.39f; + } else if (sku.equals("BGLE")) { + this.name = "Bagel"; + this.variant = "Everything"; + this.price = 0.49f; + } else if (sku.equals("BGLS")) { + this.name = "Bagel"; + this.variant = "Sesame"; + this.price = 0.49f; + } else if (sku.equals("COFB")) { + this.name = "Coffee"; + this.variant = "Black"; + this.price = 0.99f; + } else if (sku.equals("COFW")) { + this.name = "Coffee"; + this.variant = "White"; + this.price = 1.19f; + } else if (sku.equals("COFC")) { + this.name = "Coffee"; + this.variant = "Capuccino"; + this.price = 1.29f; + } else if (sku.equals("COFL")) { + this.name = "Coffee"; + this.variant = "Latte"; + this.price = 1.29f; + } else if (sku.equals("FILB")) { + this.name = "Filling"; + this.variant = "Bacon"; + this.price = 0.12f; + } else if (sku.equals("FILE")) { + this.name = "Filling"; + this.variant = "Egg"; + this.price = 0.12f; + } else if (sku.equals("FILC")) { + this.name = "Filling"; + this.variant = "Cheese"; + this.price = 0.12f; + } else if (sku.equals("FILX")) { + this.name = "Filling"; + this.variant = "Cream Cheese"; + this.price = 0.12f; + } else if (sku.equals("FILS")) { + this.name = "Filling"; + this.variant = "Smoked Salmon"; + this.price = 0.12f; + } else if (sku.equals("FILH")) { + this.name = "Filling"; + this.variant = "Ham"; + this.price = 0.12f; + } else { + throw new IllegalArgumentException("Invalid SKU: " + sku); + } + } + + public String getSku() {return sku;} + + public String getName() {return name;} + + public String getVariant() {return variant;} + + public float getPrice() {return price;} +} 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..a2c72afb3 --- /dev/null +++ b/src/test/java/com/booleanuk/core/BasketTest.java @@ -0,0 +1,145 @@ +package com.booleanuk.core; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.io.ByteArrayInputStream; + +public class BasketTest { + + @Test + public void testContainsItem(){ + Inventory inventory = new Inventory(); + Basket basket = new Basket(inventory); + basket.getInventory().addStockItem("BGLP", 1); + basket.getInventory().addStockItem("FILE", 1); + + + // To simulate customer responses + String inputYes = "yes\n"; + System.setIn(new ByteArrayInputStream(inputYes.getBytes())); + basket.addItem("BGLP"); + + System.setIn(new ByteArrayInputStream(inputYes.getBytes())); + basket.addItem("FILE"); + + Assertions.assertTrue(basket.containsItem("BGLP")); + Assertions.assertTrue(basket.containsItem("FILE")); + Assertions.assertEquals(0, basket.getInventory().getStockSize()); + } + + @Test + public void testAddItem(){ + Inventory inventory = new Inventory(); + Basket basket = new Basket(inventory); + basket.getInventory().addStockItem("BGLP", 1); + basket.getInventory().addStockItem("FILE", 1); + + String inputYes = "yes\n"; + System.setIn(new ByteArrayInputStream(inputYes.getBytes())); + basket.addItem("BGLP"); + + String inputNo = "no\n"; + System.setIn(new ByteArrayInputStream(inputNo.getBytes())); + basket.addItem("FILE"); + + Assertions.assertEquals(1, basket.getItems().size()); + } + + @Test + public void testRemoveItem(){ + Inventory inventory = new Inventory(); + Basket basket = new Basket(inventory); + basket.getInventory().addStockItem("BGLP", 1); + basket.getInventory().addStockItem("FILE", 1); + + + String inputYes = "yes\n"; + System.setIn(new ByteArrayInputStream(inputYes.getBytes())); + basket.addItem("BGLP"); + + System.setIn(new ByteArrayInputStream(inputYes.getBytes())); + basket.addItem("FILE"); + + Assertions.assertTrue(basket.containsItem("BGLP")); + Assertions.assertTrue(basket.containsItem("FILE")); + basket.removeItem("FILE"); + Assertions.assertFalse(basket.containsItem("FILE")); + Assertions.assertEquals(1, basket.getInventory().getStockSize()); + + } + + @Test + public void testCheckCapacity(){ + Inventory inventory = new Inventory(); + Basket basket = new Basket(inventory); + basket.getInventory().addStockItem("BGLP", 5); + basket.getInventory().addStockItem("FILE", 5); + + basket.checkCapacity(); + Assertions.assertFalse(basket.getIsFull()); + + String inputYes = "yes\n"; + System.setIn(new ByteArrayInputStream(inputYes.getBytes())); + basket.addItem("BGLP"); + System.setIn(new ByteArrayInputStream(inputYes.getBytes())); + basket.addItem("FILE"); + System.setIn(new ByteArrayInputStream(inputYes.getBytes())); + basket.addItem("BGLP"); + System.setIn(new ByteArrayInputStream(inputYes.getBytes())); + basket.addItem("FILE"); + System.setIn(new ByteArrayInputStream(inputYes.getBytes())); + basket.addItem("BGLP"); + System.setIn(new ByteArrayInputStream(inputYes.getBytes())); + basket.addItem("FILE"); + System.setIn(new ByteArrayInputStream(inputYes.getBytes())); + basket.addItem("BGLP"); + System.setIn(new ByteArrayInputStream(inputYes.getBytes())); + basket.addItem("FILE"); + System.setIn(new ByteArrayInputStream(inputYes.getBytes())); + basket.addItem("BGLP"); + System.setIn(new ByteArrayInputStream(inputYes.getBytes())); + basket.addItem("FILE"); + basket.checkCapacity(); + Assertions.assertTrue(basket.getIsFull()); + } + + @Test + public void testChangeCapacity(){ + Inventory inventory = new Inventory(); + Basket basket = new Basket(inventory); + Assertions.assertEquals(10, basket.getCapacity()); + basket.changeCapacity(20); + Assertions.assertEquals(20, basket.getCapacity()); + } + + @Test + public void testTotalCost(){ + Inventory inventory = new Inventory(); + Basket basket = new Basket(inventory); + basket.getInventory().addStockItem("BGLP", 1); + basket.getInventory().addStockItem("FILE", 1); + basket.getInventory().addStockItem("COFB", 4); + + + String inputYes = "yes\n"; + System.setIn(new ByteArrayInputStream(inputYes.getBytes())); + basket.addItem("BGLP"); + System.setIn(new ByteArrayInputStream(inputYes.getBytes())); + basket.addItem("FILE"); + System.setIn(new ByteArrayInputStream(inputYes.getBytes())); + basket.addItem("COFB"); + Assertions.assertEquals(1.5f, basket.totalCost()); + + Basket basket2 = new Basket(inventory); + + System.setIn(new ByteArrayInputStream(inputYes.getBytes())); + basket2.addItem("COFB"); + System.setIn(new ByteArrayInputStream(inputYes.getBytes())); + basket2.addItem("COFB"); + System.setIn(new ByteArrayInputStream(inputYes.getBytes())); + basket2.addItem("COFB"); + Assertions.assertEquals(2.97f, basket2.totalCost()); + } + +} diff --git a/src/test/java/com/booleanuk/core/InventoryTest.java b/src/test/java/com/booleanuk/core/InventoryTest.java new file mode 100644 index 000000000..f2a653c60 --- /dev/null +++ b/src/test/java/com/booleanuk/core/InventoryTest.java @@ -0,0 +1,31 @@ +package com.booleanuk.core; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +public class InventoryTest { + + @Test + public void testAddStockItem(){ + Inventory inventory = new Inventory(); + inventory.addStockItem("BGLP", 1); + inventory.addStockItem("FILE", 3); + Assertions.assertEquals(2, inventory.getStockSize()); + Assertions.assertEquals(3, inventory.getItemStock("FILE")); + Assertions.assertEquals(1, inventory.getItemStock("BGLP")); + } + + @Test + public void testRemoveStockItem(){ + Inventory inventory = new Inventory(); + inventory.addStockItem("BGLP", 3); + inventory.addStockItem("FILE", 1); + Assertions.assertEquals(2, inventory.getStockSize()); + + inventory.removeStockItem("FILE", 1); + inventory.removeStockItem("BGLP", 2); + Assertions.assertEquals(1, inventory.getStockSize()); + Assertions.assertEquals(1, inventory.getItemStock("BGLP")); + } + +} diff --git a/src/test/java/com/booleanuk/core/ItemTest.java b/src/test/java/com/booleanuk/core/ItemTest.java new file mode 100644 index 000000000..447e7d3c3 --- /dev/null +++ b/src/test/java/com/booleanuk/core/ItemTest.java @@ -0,0 +1,47 @@ +package com.booleanuk.core; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +public class ItemTest { + + @Test + public void testGetSku(){ + Item item1 = new Item("BGLP"); + Item item2 = new Item("COFB"); + Item item3 = new Item("FILE"); + Assertions.assertEquals("BGLP", item1.getSku()); + Assertions.assertEquals("COFB", item2.getSku()); + Assertions.assertEquals("FILE", item3.getSku()); + } + + @Test + public void testGetName(){ + Item item1 = new Item("BGLP"); + Item item2 = new Item("COFB"); + Item item3 = new Item("FILE"); + Assertions.assertEquals("Bagel", item1.getName()); + Assertions.assertEquals("Coffee", item2.getName()); + Assertions.assertEquals("Filling", item3.getName()); + } + + @Test + public void testGetVariant(){ + Item item1 = new Item("BGLP"); + Item item2 = new Item("COFB"); + Item item3 = new Item("FILE"); + Assertions.assertEquals("Plain", item1.getVariant()); + Assertions.assertEquals("Black", item2.getVariant()); + Assertions.assertEquals("Egg", item3.getVariant()); + } + + @Test + public void testGetPrice(){ + Item item1 = new Item("BGLP"); + Item item2 = new Item("COFB"); + Item item3 = new Item("FILE"); + Assertions.assertEquals(0.39f, item1.getPrice()); + Assertions.assertEquals(0.99f, item2.getPrice()); + Assertions.assertEquals(0.12f, item3.getPrice()); + } +} diff --git a/src/test/java/com/booleanuk/extension/BasketTest.java b/src/test/java/com/booleanuk/extension/BasketTest.java new file mode 100644 index 000000000..5daad6018 --- /dev/null +++ b/src/test/java/com/booleanuk/extension/BasketTest.java @@ -0,0 +1,174 @@ +package com.booleanuk.extension; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.io.ByteArrayInputStream; + +public class BasketTest { + + @Test + public void testContainsItem(){ + Inventory inventory = new Inventory(); + Basket basket = new Basket(inventory); + basket.getInventory().addStockItem("BGLP", 1); + basket.getInventory().addStockItem("FILE", 1); + + + // To simulate customer responses + String inputYes = "yes\n"; + System.setIn(new ByteArrayInputStream(inputYes.getBytes())); + basket.addItem("BGLP"); + + System.setIn(new ByteArrayInputStream(inputYes.getBytes())); + basket.addItem("FILE"); + + Assertions.assertTrue(basket.containsItem("BGLP")); + Assertions.assertTrue(basket.containsItem("FILE")); + Assertions.assertEquals(0, basket.getInventory().getStockSize()); + } + + @Test + public void testAddItem(){ + Inventory inventory = new Inventory(); + Basket basket = new Basket(inventory); + basket.getInventory().addStockItem("BGLP", 1); + basket.getInventory().addStockItem("FILE", 1); + + String inputYes = "yes\n"; + System.setIn(new ByteArrayInputStream(inputYes.getBytes())); + basket.addItem("BGLP"); + + String inputNo = "no\n"; + System.setIn(new ByteArrayInputStream(inputNo.getBytes())); + basket.addItem("FILE"); + + Assertions.assertEquals(1, basket.getItems().size()); + } + + @Test + public void testRemoveItem(){ + Inventory inventory = new Inventory(); + Basket basket = new Basket(inventory); + basket.getInventory().addStockItem("BGLP", 1); + basket.getInventory().addStockItem("FILE", 1); + + + String inputYes = "yes\n"; + System.setIn(new ByteArrayInputStream(inputYes.getBytes())); + basket.addItem("BGLP"); + + System.setIn(new ByteArrayInputStream(inputYes.getBytes())); + basket.addItem("FILE"); + + Assertions.assertTrue(basket.containsItem("BGLP")); + Assertions.assertTrue(basket.containsItem("FILE")); + basket.removeItem("FILE"); + Assertions.assertFalse(basket.containsItem("FILE")); + Assertions.assertEquals(1, basket.getInventory().getStockSize()); + + } + + @Test + public void testCheckCapacity(){ + Inventory inventory = new Inventory(); + Basket basket = new Basket(inventory); + basket.getInventory().addStockItem("BGLP", 5); + basket.getInventory().addStockItem("FILE", 5); + + basket.checkCapacity(); + Assertions.assertFalse(basket.getIsFull()); + + String inputYes = "yes\n"; + System.setIn(new ByteArrayInputStream(inputYes.getBytes())); + basket.addItem("BGLP"); + System.setIn(new ByteArrayInputStream(inputYes.getBytes())); + basket.addItem("FILE"); + System.setIn(new ByteArrayInputStream(inputYes.getBytes())); + basket.addItem("BGLP"); + System.setIn(new ByteArrayInputStream(inputYes.getBytes())); + basket.addItem("FILE"); + System.setIn(new ByteArrayInputStream(inputYes.getBytes())); + basket.addItem("BGLP"); + System.setIn(new ByteArrayInputStream(inputYes.getBytes())); + basket.addItem("FILE"); + System.setIn(new ByteArrayInputStream(inputYes.getBytes())); + basket.addItem("BGLP"); + System.setIn(new ByteArrayInputStream(inputYes.getBytes())); + basket.addItem("FILE"); + System.setIn(new ByteArrayInputStream(inputYes.getBytes())); + basket.addItem("BGLP"); + System.setIn(new ByteArrayInputStream(inputYes.getBytes())); + basket.addItem("FILE"); + basket.checkCapacity(); + Assertions.assertTrue(basket.getIsFull()); + } + + @Test + public void testChangeCapacity(){ + Inventory inventory = new Inventory(); + Basket basket = new Basket(inventory); + Assertions.assertEquals(10, basket.getCapacity()); + basket.changeCapacity(20); + Assertions.assertEquals(20, basket.getCapacity()); + } + + @Test + public void testTotalCost(){ + Inventory inventory = new Inventory(); + Basket basket = new Basket(inventory); + basket.getInventory().addStockItem("BGLP", 1); + basket.getInventory().addStockItem("FILE", 1); + basket.getInventory().addStockItem("COFB", 1); + + + String inputYes = "yes\n"; + System.setIn(new ByteArrayInputStream(inputYes.getBytes())); + basket.addItem("BGLP"); + System.setIn(new ByteArrayInputStream(inputYes.getBytes())); + basket.addItem("FILE"); + System.setIn(new ByteArrayInputStream(inputYes.getBytes())); + basket.addItem("COFB"); + Assertions.assertEquals(1.37f, basket.totalCost()); + + Basket basket2 = new Basket(inventory); + basket2.changeCapacity(20); + inventory.addStockItem("BGLP", 15); + inventory.addStockItem("FILE", 1); + inventory.addStockItem("COFB", 2); + + for (int i = 0; i < 15; i++){ + System.setIn(new ByteArrayInputStream(inputYes.getBytes())); + basket2.addItem("BGLP"); + } + System.setIn(new ByteArrayInputStream(inputYes.getBytes())); + basket2.addItem("FILE"); + System.setIn(new ByteArrayInputStream(inputYes.getBytes())); + basket2.addItem("COFB"); + System.setIn(new ByteArrayInputStream(inputYes.getBytes())); + basket2.addItem("COFB"); + + Assertions.assertEquals(7f, basket2.totalCost()); + } + + @Test + public void testGetReceipt(){ + Inventory inventory = new Inventory(); + Basket basket = new Basket(inventory); + basket.getInventory().addStockItem("BGLP", 1); + basket.getInventory().addStockItem("FILE", 1); + basket.getInventory().addStockItem("COFB", 1); + + String inputYes = "yes\n"; + System.setIn(new ByteArrayInputStream(inputYes.getBytes())); + basket.addItem("BGLP"); + System.setIn(new ByteArrayInputStream(inputYes.getBytes())); + basket.addItem("FILE"); + System.setIn(new ByteArrayInputStream(inputYes.getBytes())); + basket.addItem("COFB"); + + String receipt = basket.getReceipt(); + System.out.println(receipt); + } + +} diff --git a/src/test/java/com/booleanuk/extension/InventoryTest.java b/src/test/java/com/booleanuk/extension/InventoryTest.java new file mode 100644 index 000000000..97d2e7c13 --- /dev/null +++ b/src/test/java/com/booleanuk/extension/InventoryTest.java @@ -0,0 +1,32 @@ +package com.booleanuk.extension; + +import com.booleanuk.core.Inventory; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +public class InventoryTest { + + @Test + public void testAddStockItem(){ + com.booleanuk.core.Inventory inventory = new com.booleanuk.core.Inventory(); + inventory.addStockItem("BGLP", 1); + inventory.addStockItem("FILE", 3); + Assertions.assertEquals(2, inventory.getStockSize()); + Assertions.assertEquals(3, inventory.getItemStock("FILE")); + Assertions.assertEquals(1, inventory.getItemStock("BGLP")); + } + + @Test + public void testRemoveStockItem(){ + com.booleanuk.core.Inventory inventory = new Inventory(); + inventory.addStockItem("BGLP", 3); + inventory.addStockItem("FILE", 1); + Assertions.assertEquals(2, inventory.getStockSize()); + + inventory.removeStockItem("FILE", 1); + inventory.removeStockItem("BGLP", 2); + Assertions.assertEquals(1, inventory.getStockSize()); + Assertions.assertEquals(1, inventory.getItemStock("BGLP")); + } + +} diff --git a/src/test/java/com/booleanuk/extension/ItemTest.java b/src/test/java/com/booleanuk/extension/ItemTest.java new file mode 100644 index 000000000..f48f418c8 --- /dev/null +++ b/src/test/java/com/booleanuk/extension/ItemTest.java @@ -0,0 +1,48 @@ +package com.booleanuk.extension; + +import com.booleanuk.core.Item; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +public class ItemTest { + + @Test + public void testGetSku(){ + com.booleanuk.core.Item item1 = new com.booleanuk.core.Item("BGLP"); + com.booleanuk.core.Item item2 = new com.booleanuk.core.Item("COFB"); + com.booleanuk.core.Item item3 = new com.booleanuk.core.Item("FILE"); + Assertions.assertEquals("BGLP", item1.getSku()); + Assertions.assertEquals("COFB", item2.getSku()); + Assertions.assertEquals("FILE", item3.getSku()); + } + + @Test + public void testGetName(){ + com.booleanuk.core.Item item1 = new com.booleanuk.core.Item("BGLP"); + com.booleanuk.core.Item item2 = new com.booleanuk.core.Item("COFB"); + com.booleanuk.core.Item item3 = new com.booleanuk.core.Item("FILE"); + Assertions.assertEquals("Bagel", item1.getName()); + Assertions.assertEquals("Coffee", item2.getName()); + Assertions.assertEquals("Filling", item3.getName()); + } + + @Test + public void testGetVariant(){ + com.booleanuk.core.Item item1 = new com.booleanuk.core.Item("BGLP"); + com.booleanuk.core.Item item2 = new com.booleanuk.core.Item("COFB"); + com.booleanuk.core.Item item3 = new com.booleanuk.core.Item("FILE"); + Assertions.assertEquals("Plain", item1.getVariant()); + Assertions.assertEquals("Black", item2.getVariant()); + Assertions.assertEquals("Egg", item3.getVariant()); + } + + @Test + public void testGetPrice(){ + com.booleanuk.core.Item item1 = new com.booleanuk.core.Item("BGLP"); + com.booleanuk.core.Item item2 = new com.booleanuk.core.Item("COFB"); + com.booleanuk.core.Item item3 = new Item("FILE"); + Assertions.assertEquals(0.39f, item1.getPrice()); + Assertions.assertEquals(0.99f, item2.getPrice()); + Assertions.assertEquals(0.12f, item3.getPrice()); + } +}