From a0f8a9187d7fe75957b0b953c5398afdd0536126 Mon Sep 17 00:00:00 2001 From: John Ahlroos Date: Thu, 13 Nov 2025 14:41:25 +0100 Subject: [PATCH] Cleanup on isle 6 --- .../java/inventory/DiscountCalculator.java | 34 +++++------------ .../main/java/inventory/InventoryManager.java | 10 ++--- .../inventory/DiscountCalculatorTest.java | 38 +++++++++---------- 3 files changed, 32 insertions(+), 50 deletions(-) diff --git a/InventoryManagementSystem/src/main/java/inventory/DiscountCalculator.java b/InventoryManagementSystem/src/main/java/inventory/DiscountCalculator.java index 431ef92..4da70e9 100644 --- a/InventoryManagementSystem/src/main/java/inventory/DiscountCalculator.java +++ b/InventoryManagementSystem/src/main/java/inventory/DiscountCalculator.java @@ -14,30 +14,6 @@ import static inventory.ProductFactory.BOOK_TYPE; */ public class DiscountCalculator { - /** - * Inner class to hold discount calculation results. - */ - public static class DiscountResult { - private final double discountAmount; - private final String description; - - public DiscountResult(double discountAmount, String description) { - if (discountAmount < 0) { - throw new IllegalArgumentException("Discount amount must be greater than 0"); - } - this.discountAmount = discountAmount; - this.description = Objects.requireNonNullElse(description, ""); - } - - public double getDiscountAmount() { - return discountAmount; - } - - public String getDescription() { - return description; - } - } - /** * @param product - the product being purchased * @param quantity - quantity being purchased @@ -90,4 +66,14 @@ public class DiscountCalculator { private static boolean isEligibleForBulkDiscount(int quantity) { return quantity >= 5; } + + public record DiscountResult(double discountAmount, String description) { + public DiscountResult(double discountAmount, String description) { + if (discountAmount < 0) { + throw new IllegalArgumentException("Discount amount must be greater than 0"); + } + this.discountAmount = discountAmount; + this.description = Objects.requireNonNullElse(description, ""); + } + } } \ No newline at end of file diff --git a/InventoryManagementSystem/src/main/java/inventory/InventoryManager.java b/InventoryManagementSystem/src/main/java/inventory/InventoryManager.java index c99d649..f12a08d 100644 --- a/InventoryManagementSystem/src/main/java/inventory/InventoryManager.java +++ b/InventoryManagementSystem/src/main/java/inventory/InventoryManager.java @@ -17,11 +17,7 @@ import java.util.Map; */ public class InventoryManager { - private final Map products; - - public InventoryManager() { - products = new HashMap<>(); - } + private final Map products = new HashMap<>(); /** * Add product to inventory using Factory pattern @@ -69,7 +65,7 @@ public class InventoryManager { // Calculate total and apply discount double totalPrice = product.getPrice() * quantity; - double finalPrice = totalPrice - discount.getDiscountAmount(); + double finalPrice = totalPrice - discount.discountAmount(); // Update inventory product.sell(quantity); @@ -159,7 +155,7 @@ public class InventoryManager { System.out.printf("Product: %s%n", product.getName()); System.out.printf("Quantity: %d%n", quantity); System.out.printf("Original Price: $%.2f%n", originalPrice); - System.out.printf("Discount: $%.2f (%s)%n", discountInfo.getDiscountAmount(), discountInfo.getDescription()); + System.out.printf("Discount: $%.2f (%s)%n", discountInfo.discountAmount(), discountInfo.description()); System.out.printf("Final Price: $%.2f%n", finalPrice); } } \ No newline at end of file diff --git a/InventoryManagementSystem/src/test/java/inventory/DiscountCalculatorTest.java b/InventoryManagementSystem/src/test/java/inventory/DiscountCalculatorTest.java index 3ade075..bc46131 100644 --- a/InventoryManagementSystem/src/test/java/inventory/DiscountCalculatorTest.java +++ b/InventoryManagementSystem/src/test/java/inventory/DiscountCalculatorTest.java @@ -34,8 +34,8 @@ class DiscountCalculatorTest { void testStudentDiscountOnBooks() { DiscountResult discount = DiscountCalculator.calculateDiscount(book, 1, "STUDENT"); assertNotNull(discount); - assertEquals(1 * book.getPrice() * 0.10, discount.getDiscountAmount()); - assertEquals("Student discount: 10% off books", discount.getDescription()); + assertEquals(1 * book.getPrice() * 0.10, discount.discountAmount()); + assertEquals("Student discount: 10% off books", discount.description()); } /** @@ -45,8 +45,8 @@ class DiscountCalculatorTest { void testStudentDiscountOnElectronics() { DiscountResult discount = DiscountCalculator.calculateDiscount(electronics, 1, "STUDENT"); assertNotNull(discount); - assertEquals(0, discount.getDiscountAmount()); - assertEquals("Student discount only applies to books", discount.getDescription()); + assertEquals(0, discount.discountAmount()); + assertEquals("Student discount only applies to books", discount.description()); } /** @@ -57,13 +57,13 @@ class DiscountCalculatorTest { void testBulkDiscountValid(int quantity) { DiscountResult discountBook = DiscountCalculator.calculateDiscount(book, quantity, "BULK"); assertNotNull(discountBook); - assertEquals(quantity * book.getPrice() * 0.15, discountBook.getDiscountAmount()); - assertEquals("Bulk discount: 15% off for 5+ items", discountBook.getDescription()); + assertEquals(quantity * book.getPrice() * 0.15, discountBook.discountAmount()); + assertEquals("Bulk discount: 15% off for 5+ items", discountBook.description()); DiscountResult discountElectronics = DiscountCalculator.calculateDiscount(electronics, quantity, "BULK"); assertNotNull(discountElectronics); - assertEquals(quantity * electronics.getPrice() * 0.15, discountElectronics.getDiscountAmount()); - assertEquals("Bulk discount: 15% off for 5+ items", discountElectronics.getDescription()); + assertEquals(quantity * electronics.getPrice() * 0.15, discountElectronics.discountAmount()); + assertEquals("Bulk discount: 15% off for 5+ items", discountElectronics.description()); } /** @@ -73,8 +73,8 @@ class DiscountCalculatorTest { void testBulkDiscountInvalid() { DiscountResult discountBook = DiscountCalculator.calculateDiscount(book, 2, "BULK"); assertNotNull(discountBook); - assertEquals(0, discountBook.getDiscountAmount()); - assertEquals("Bulk discount requires 5+ items", discountBook.getDescription()); + assertEquals(0, discountBook.discountAmount()); + assertEquals("Bulk discount requires 5+ items", discountBook.description()); } /** @@ -84,8 +84,8 @@ class DiscountCalculatorTest { void testNoDiscount() { DiscountResult discountBook = DiscountCalculator.calculateDiscount(book, 1, "NONE"); assertNotNull(discountBook); - assertEquals(0, discountBook.getDiscountAmount()); - assertEquals("No discount applied", discountBook.getDescription()); + assertEquals(0, discountBook.discountAmount()); + assertEquals("No discount applied", discountBook.description()); } /** @@ -96,7 +96,7 @@ class DiscountCalculatorTest { void testBoundaryConditions(int quantity, double discountPercentage) { DiscountResult discountBook = DiscountCalculator.calculateDiscount(book, quantity, "BULK"); assertNotNull(discountBook); - assertEquals(book.getPrice() * quantity * discountPercentage, discountBook.getDiscountAmount()); + assertEquals(book.getPrice() * quantity * discountPercentage, discountBook.discountAmount()); } /** @@ -106,11 +106,11 @@ class DiscountCalculatorTest { void testDiscountCalculationAccuracy() { DiscountResult discountBook = DiscountCalculator.calculateDiscount(book, 2, "STUDENT"); assertNotNull(discountBook); - assertEquals(4, discountBook.getDiscountAmount()); + assertEquals(4, discountBook.discountAmount()); DiscountResult discountElectronics = DiscountCalculator.calculateDiscount(electronics, 5, "BULK"); assertNotNull(discountElectronics); - assertEquals(75, discountElectronics.getDiscountAmount()); + assertEquals(75, discountElectronics.discountAmount()); } @ParameterizedTest(name = "type = {0}") @@ -118,7 +118,7 @@ class DiscountCalculatorTest { void testCaseSensitivityOfDiscountTypes(String type) { DiscountResult discountBook = DiscountCalculator.calculateDiscount(book, 1, type); assertNotNull(discountBook); - assertEquals(2, discountBook.getDiscountAmount()); + assertEquals(2, discountBook.discountAmount()); } @ParameterizedTest(name = "type = {0}") @@ -126,17 +126,17 @@ class DiscountCalculatorTest { void testInvalidDiscountTypes(String type) { DiscountResult discountBook = DiscountCalculator.calculateDiscount(book, 1, type); assertNotNull(discountBook); - assertEquals(0, discountBook.getDiscountAmount()); + assertEquals(0, discountBook.discountAmount()); } @Test void testDiscountZeroQuantity() { DiscountResult discountBook = DiscountCalculator.calculateDiscount(book, 0, "STUDENT"); assertNotNull(discountBook); - assertEquals(0, discountBook.getDiscountAmount()); + assertEquals(0, discountBook.discountAmount()); DiscountResult discountElectronics = DiscountCalculator.calculateDiscount(electronics, 0, "BULK"); assertNotNull(discountElectronics); - assertEquals(0, discountElectronics.getDiscountAmount()); + assertEquals(0, discountElectronics.discountAmount()); } } \ No newline at end of file