Cleanup on isle 6

This commit is contained in:
2025-11-13 14:41:25 +01:00
parent 6a8173f184
commit a0f8a9187d
3 changed files with 32 additions and 50 deletions

View File

@@ -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, "");
}
}
}

View File

@@ -17,11 +17,7 @@ import java.util.Map;
*/
public class InventoryManager {
private final Map<String, Product> products;
public InventoryManager() {
products = new HashMap<>();
}
private final Map<String, Product> 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);
}
}

View File

@@ -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());
}
}