Cleanup on isle 6
This commit is contained in:
@@ -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, "");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user