From 088838fab75db2c2bf454b8e6f701a5555127260 Mon Sep 17 00:00:00 2001 From: Shadi Date: Tue, 19 May 2026 16:04:34 +0200 Subject: [PATCH 1/9] Add `Size` enum for pizza size representation and pricing --- task-1/com/pizzacompany/enums/Size.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 task-1/com/pizzacompany/enums/Size.java diff --git a/task-1/com/pizzacompany/enums/Size.java b/task-1/com/pizzacompany/enums/Size.java new file mode 100644 index 0000000..551b507 --- /dev/null +++ b/task-1/com/pizzacompany/enums/Size.java @@ -0,0 +1,17 @@ +package pizzacompany.enums; + +public enum Size { + SMALL(6.00), + MEDIUM(9.00), + LARGE(12.00); + + private final double basePrice; + + Size(double basePrice) { + this.basePrice = basePrice; + } + + public double getBasePrice() { + return basePrice; + } +} From ab5802712dd490a8def34c5dd6466b599d911ebb Mon Sep 17 00:00:00 2001 From: Shadi Date: Tue, 19 May 2026 16:04:42 +0200 Subject: [PATCH 2/9] Add `Topping` enum for pizza topping options and pricing --- task-1/com/pizzacompany/enums/Topping.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 task-1/com/pizzacompany/enums/Topping.java diff --git a/task-1/com/pizzacompany/enums/Topping.java b/task-1/com/pizzacompany/enums/Topping.java new file mode 100644 index 0000000..48b9560 --- /dev/null +++ b/task-1/com/pizzacompany/enums/Topping.java @@ -0,0 +1,16 @@ +package pizzacompany.enums; + +public enum Topping { + CHEESE(1.00), + MUSHROOMS(1.50), + PEPPERONI(2.00), + OLIVES(1.00), + PINEAPPLE(1.50); + private final double price; + Topping(double price) { + this.price = price; + } + public double getPrice() { + return price; + } +} From ea3197b5a575090ca4c5134065dc3d1cbf57fb9a Mon Sep 17 00:00:00 2001 From: Shadi Date: Tue, 19 May 2026 16:04:49 +0200 Subject: [PATCH 3/9] Add `Pizza` model with size, toppings, and pricing logic --- task-1/com/pizzacompany/model/Pizza.java | 40 ++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 task-1/com/pizzacompany/model/Pizza.java diff --git a/task-1/com/pizzacompany/model/Pizza.java b/task-1/com/pizzacompany/model/Pizza.java new file mode 100644 index 0000000..a6e8080 --- /dev/null +++ b/task-1/com/pizzacompany/model/Pizza.java @@ -0,0 +1,40 @@ +package pizzacompany.model; +import pizzacompany.enums.Size; +import pizzacompany.enums.Topping; +import java.util.List; + +public class Pizza { + private Size size; + private List toppings; + + public Pizza(Size size, List toppings) { + this.size = size; + this.toppings = toppings; + } + + public Size getSize() { + return size; + } + + public List getToppings() { + return toppings; + } + + public double getTotalPrice() { + double total = size.getBasePrice(); + + for(Topping topping : toppings) { + total += topping.getPrice(); + } + return total; + } + @Override + public String toString() { + return String.format( + "%s pizza with %s - €%.2f", + size, + toppings, + getTotalPrice() + ); + } +} From 47dbb07d8ce127392e516f0c014476ecb9f2cdbe Mon Sep 17 00:00:00 2001 From: Shadi Date: Tue, 19 May 2026 16:04:54 +0200 Subject: [PATCH 4/9] Add `Order` model to manage pizzas, calculate total price, and print receipt --- task-1/com/pizzacompany/model/Order.java | 25 ++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 task-1/com/pizzacompany/model/Order.java diff --git a/task-1/com/pizzacompany/model/Order.java b/task-1/com/pizzacompany/model/Order.java new file mode 100644 index 0000000..5e6163c --- /dev/null +++ b/task-1/com/pizzacompany/model/Order.java @@ -0,0 +1,25 @@ +package pizzacompany.model; +import java.util.ArrayList; +import java.util.List; + +public class Order { + private List pizzas = new ArrayList<>(); + + public void addPizza(Pizza pizza) { + pizzas.add(pizza); + } + + public double getTotalPrice() { + return pizzas.stream().mapToDouble(Pizza::getTotalPrice).sum(); + + } + + public void printReceipt() { + + for (Pizza pizza : pizzas) { + System.out.println(pizza); + } + + System.out.printf("Total: €%.2f%n", getTotalPrice()); + } +} From 3c8d5b4b9db8b52b05351b9d6d21c3f33606feb4 Mon Sep 17 00:00:00 2001 From: Shadi Date: Tue, 19 May 2026 16:05:21 +0200 Subject: [PATCH 5/9] Create pizzas in `Main`, add to `Order`, and print receipt --- task-1/com/pizzacompany/Main.java | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/task-1/com/pizzacompany/Main.java b/task-1/com/pizzacompany/Main.java index 5c380fa..e3f62fa 100644 --- a/task-1/com/pizzacompany/Main.java +++ b/task-1/com/pizzacompany/Main.java @@ -1,7 +1,32 @@ -package com.pizzacompany; +package pizzacompany; +import pizzacompany.model.Pizza; +import pizzacompany.enums.Size; +import pizzacompany.enums.Topping; +import pizzacompany.model.Order; +import java.util.List; public class Main { public static void main(String[] args) { - System.out.println("Hello Pizza!"); + + Pizza pizza1 = new Pizza( + Size.MEDIUM, + List.of(Topping.CHEESE, Topping.MUSHROOMS) + ); + + Pizza pizza2 = new Pizza( + Size.SMALL, + List.of(Topping.PEPPERONI) + ); + Pizza pizza3 = new Pizza( + Size.LARGE, + List.of(Topping.OLIVES, Topping.PINEAPPLE, Topping.MUSHROOMS)); + Order order = new Order(); + + order.addPizza(pizza1); + order.addPizza(pizza2); + order.addPizza(pizza3); + + order.printReceipt(); } + } \ No newline at end of file From ae1614be1508b2b6d60a071b380b1b7f774c2b07 Mon Sep 17 00:00:00 2001 From: Shadi Date: Tue, 19 May 2026 19:19:52 +0200 Subject: [PATCH 6/9] Implement basic caching functionality in `Cache` class --- task-2/src/main/java/org/my/cache/Cache.java | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/task-2/src/main/java/org/my/cache/Cache.java b/task-2/src/main/java/org/my/cache/Cache.java index 3804372..73434d5 100644 --- a/task-2/src/main/java/org/my/cache/Cache.java +++ b/task-2/src/main/java/org/my/cache/Cache.java @@ -1,24 +1,32 @@ package org.my.cache; +import java.util.HashMap; +import java.util.Map; + class Cache { + private Map cache = new HashMap<>(); + public void put(String key, T value) { - throw new UnsupportedOperationException("Not implemented yet"); + cache.put(key, value); } public T get(String key) { - throw new UnsupportedOperationException("Not implemented yet"); + return cache.get(key); } public T remove(String key) { - throw new UnsupportedOperationException("Not implemented yet"); + + return cache.remove(key); } public int size() { - throw new UnsupportedOperationException("Not implemented yet"); + + return cache.size(); } public void clear() { - throw new UnsupportedOperationException("Not implemented yet"); + + cache.clear(); } } From b3b89cfeff963f33c9d0fcefd3313d45ed9576e6 Mon Sep 17 00:00:00 2001 From: Shadi Date: Tue, 19 May 2026 19:20:00 +0200 Subject: [PATCH 7/9] Demonstrate `Cache` class usage with various data types in `Main` --- task-2/src/main/java/org/my/cache/Main.java | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/task-2/src/main/java/org/my/cache/Main.java b/task-2/src/main/java/org/my/cache/Main.java index 38c023b..9c97e09 100644 --- a/task-2/src/main/java/org/my/cache/Main.java +++ b/task-2/src/main/java/org/my/cache/Main.java @@ -2,6 +2,25 @@ public class Main { public static void main(String[] args) { - System.out.println("Hello Cache!"); + Cache stringCache = new Cache<>(); + stringCache.put("name", "HackYourFuture"); + System.out.println(stringCache.get("name")); + System.out.println(stringCache.get("city")); + + Cache numberCache = new Cache<>(); + numberCache.put("c1", 12345); + numberCache.put("c2", 54321); + System.out.println(numberCache.size()); + System.out.println(numberCache.remove("c1")); + System.out.println(numberCache.get("c1")); + + Cache doubleCache = new Cache<>(); + doubleCache.put("d1", 123.45); + doubleCache.put("d2", 543.21); + doubleCache.put("d3", 123.45); + System.out.println(doubleCache.size()); + doubleCache.clear(); + System.out.println(doubleCache.size()); + } } \ No newline at end of file From ab905917992bf785d8f6f6c7a4146e45f18991df Mon Sep 17 00:00:00 2001 From: Shadi Date: Tue, 19 May 2026 19:20:08 +0200 Subject: [PATCH 8/9] Add comprehensive tests for `Cache` class covering put, get, size, remove, and clear functionalities --- .../test/java/org/my/cache/CacheTests.java | 78 ++++++++++++++++++- 1 file changed, 75 insertions(+), 3 deletions(-) diff --git a/task-2/src/test/java/org/my/cache/CacheTests.java b/task-2/src/test/java/org/my/cache/CacheTests.java index 3afbee4..d3602ef 100644 --- a/task-2/src/test/java/org/my/cache/CacheTests.java +++ b/task-2/src/test/java/org/my/cache/CacheTests.java @@ -1,12 +1,84 @@ package org.my.cache; - import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; class CacheTests { + + @Test + void givenKeyAndValue_returnsStoredValue() { + //Arrange + Cache stringCache = new Cache<>(); + Cache integerCache = new Cache<>(); + // Act + stringCache.put("name", "Bob"); + String result = stringCache.get("name"); + integerCache.put("age", 25); + int age = integerCache.get("age"); + + //Assert + assertEquals("Bob", result,"name should be Bob"); + assertEquals(25, age, "age should be 25"); + + } + + @Test + void givenExistingKey_returnsStoredValue() { + //Arrange + Cache stringCache = new Cache<>(); + stringCache.put("name", "Alice"); + // Act + String result = stringCache.get("name"); + //Assert + assertEquals("Alice", result,"name should be Alice"); + } + + @Test + void givenMissingKey_returnsNull() { + //Arrange + Cache stringCache = new Cache<>(); + // Act + String result = stringCache.get("name"); + //Assert + assertNull(result,"name should be null"); + } + + @Test + void givenExistingKey_returnsRemovedValue() { + //Arrange + Cache dobleCache = new Cache<>(); + dobleCache.put("amount", 123.45); + // Act + Double result = dobleCache.remove("amount"); + //Assert + assertEquals(123.45, result,"amount should be 123.45"); + assertNull(dobleCache.get("amount"),"amount should be null"); + } + @Test - void simpleTest() { - assertEquals(2, 1 + 1); + void givenTwoItems_returnsTwo() { + //Arrange + Cache stringCache = new Cache<>(); + stringCache.put("name", "Alice"); + stringCache.put("city", "Amsterdam"); + // Act + int result = stringCache.size(); + //Assert + assertEquals(2, result,"size should be 2"); + + } + + @Test + void givenItems_returnsSizeZero(){ + //Arrange + Cache stringCache = new Cache<>(); + // Act + stringCache.put("name", "HackYourFuture"); + stringCache.put("city", "Amsterdam"); + + stringCache.clear(); + //Assert + assertEquals(0, stringCache.size(),"size should be 0"); + } } From 372ec080c57c7833b0d5dfcecf067c3499eab2b0 Mon Sep 17 00:00:00 2001 From: Shadi Date: Tue, 19 May 2026 19:31:33 +0200 Subject: [PATCH 9/9] Make fields in `Order`, `Pizza`, and `Cache` classes immutable --- task-1/com/pizzacompany/model/Order.java | 2 +- task-1/com/pizzacompany/model/Pizza.java | 11 ++--------- task-2/src/main/java/org/my/cache/Cache.java | 2 +- 3 files changed, 4 insertions(+), 11 deletions(-) diff --git a/task-1/com/pizzacompany/model/Order.java b/task-1/com/pizzacompany/model/Order.java index 5e6163c..aa6dba0 100644 --- a/task-1/com/pizzacompany/model/Order.java +++ b/task-1/com/pizzacompany/model/Order.java @@ -3,7 +3,7 @@ import java.util.List; public class Order { - private List pizzas = new ArrayList<>(); + private final List pizzas = new ArrayList<>(); public void addPizza(Pizza pizza) { pizzas.add(pizza); diff --git a/task-1/com/pizzacompany/model/Pizza.java b/task-1/com/pizzacompany/model/Pizza.java index a6e8080..bb48e63 100644 --- a/task-1/com/pizzacompany/model/Pizza.java +++ b/task-1/com/pizzacompany/model/Pizza.java @@ -4,21 +4,14 @@ import java.util.List; public class Pizza { - private Size size; - private List toppings; + private final Size size; + private final List toppings; public Pizza(Size size, List toppings) { this.size = size; this.toppings = toppings; } - public Size getSize() { - return size; - } - - public List getToppings() { - return toppings; - } public double getTotalPrice() { double total = size.getBasePrice(); diff --git a/task-2/src/main/java/org/my/cache/Cache.java b/task-2/src/main/java/org/my/cache/Cache.java index 73434d5..1426c06 100644 --- a/task-2/src/main/java/org/my/cache/Cache.java +++ b/task-2/src/main/java/org/my/cache/Cache.java @@ -4,7 +4,7 @@ import java.util.Map; class Cache { - private Map cache = new HashMap<>(); + private final Map cache = new HashMap<>(); public void put(String key, T value) { cache.put(key, value);