diff --git a/.github/linters/checkstyle.xml b/.github/linters/checkstyle.xml index e26ff27b..54ed6bb1 100644 --- a/.github/linters/checkstyle.xml +++ b/.github/linters/checkstyle.xml @@ -7,7 +7,7 @@ - + diff --git a/src/main/java/flower/store/Flower.java b/src/main/java/flower/store/Flower.java index 206ef870..1ee4403e 100644 --- a/src/main/java/flower/store/Flower.java +++ b/src/main/java/flower/store/Flower.java @@ -3,8 +3,6 @@ import lombok.Getter; import lombok.Setter; - - @Setter public class Flower { @Getter @@ -15,6 +13,23 @@ public class Flower { @Getter private FlowerType flowerType; + // No-argument constructor + public Flower() { + // You can initialize default values if needed + this.flowerType = FlowerType.DEFAULT_TYPE; + this.price = 0.0; + this.sepalLength = 0.0; + this.color = FlowerColor.DEFAULT_COLOR; + } + + // Copy constructor + public Flower(Flower flower) { + this.flowerType = flower.flowerType; + this.price = flower.price; + this.sepalLength = flower.sepalLength; + this.color = flower.color; + } + public String getColor() { return color.toString(); } diff --git a/src/main/java/flower/store/FlowerBucket.java b/src/main/java/flower/store/FlowerBucket.java new file mode 100644 index 00000000..86ace8a0 --- /dev/null +++ b/src/main/java/flower/store/FlowerBucket.java @@ -0,0 +1,20 @@ +package flower.store; + +import java.util.ArrayList; +import java.util.List; + +public class FlowerBucket extends Item { + private List flowerPacks = new ArrayList<>(); + + public double getPrice() { + double price = 0; + for (FlowerPack flowerPack : flowerPacks) { + price += flowerPack.getPrice(); + } + return price; + } + + public void addFlowerPack(FlowerPack flowerPack) { + flowerPacks.add(flowerPack); + } +} \ No newline at end of file diff --git a/src/main/java/flower/store/FlowerColor.java b/src/main/java/flower/store/FlowerColor.java index 4a6221f7..c8b840bf 100644 --- a/src/main/java/flower/store/FlowerColor.java +++ b/src/main/java/flower/store/FlowerColor.java @@ -4,7 +4,7 @@ public enum FlowerColor { /** * Flower colors. */ - RED("#FF0000"), BLUE("#0000FF"); + RED("#FF0000"), BLUE("#0000FF"), DEFAULT_COLOR("00000"); private final String stringRepresentation; FlowerColor(String stringRepresentation) { diff --git a/src/main/java/flower/store/FlowerPack.java b/src/main/java/flower/store/FlowerPack.java index 44c99495..a50fbe3c 100644 --- a/src/main/java/flower/store/FlowerPack.java +++ b/src/main/java/flower/store/FlowerPack.java @@ -1,6 +1,18 @@ package flower.store; +import lombok.Setter; + +@Setter public class FlowerPack { private Flower flower; - private int quantity; -} + private int amount; + + public FlowerPack(Flower flower, int amount) { + this.flower = new Flower(flower); + this.amount = amount; + } + + public double getPrice() { + return flower.getPrice() * amount; + } +} \ No newline at end of file diff --git a/src/main/java/flower/store/FlowerType.java b/src/main/java/flower/store/FlowerType.java index ac22e2fd..6480fb6e 100644 --- a/src/main/java/flower/store/FlowerType.java +++ b/src/main/java/flower/store/FlowerType.java @@ -1,5 +1,7 @@ package flower.store; public enum FlowerType { - CHAMOMILE, ROSE, TULIP; + CHAMOMILE, ROSE, TULIP, + DEFAULT_TYPE; // Default value + } diff --git a/src/main/java/flower/store/Item.java b/src/main/java/flower/store/Item.java new file mode 100644 index 00000000..7cbaa0ef --- /dev/null +++ b/src/main/java/flower/store/Item.java @@ -0,0 +1,5 @@ +package flower.store; + +public abstract class Item { + public abstract double getPrice(); +} \ No newline at end of file diff --git a/src/main/java/flower/store/SearchFilter.java b/src/main/java/flower/store/SearchFilter.java new file mode 100644 index 00000000..42b1022a --- /dev/null +++ b/src/main/java/flower/store/SearchFilter.java @@ -0,0 +1,6 @@ +package flower.store; + + +public interface SearchFilter { + boolean match(Item item); +} \ No newline at end of file diff --git a/src/main/java/flower/store/Store.java b/src/main/java/flower/store/Store.java new file mode 100644 index 00000000..8f90d951 --- /dev/null +++ b/src/main/java/flower/store/Store.java @@ -0,0 +1,19 @@ +package flower.store; + +import java.util.ArrayList; +import java.util.List; + + +public class Store { + private List items; + public List search(SearchFilter filter) { + List foundItems = new ArrayList<>(); + for (Item item: items) { + if (filter.match(item)) { + foundItems.add(item); + } + } + return foundItems; + } + +} \ No newline at end of file diff --git a/src/test/java/flower/store/FlowerBucketTest.java b/src/test/java/flower/store/FlowerBucketTest.java new file mode 100644 index 00000000..b32b2595 --- /dev/null +++ b/src/test/java/flower/store/FlowerBucketTest.java @@ -0,0 +1,33 @@ +package flower.store; + + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.Assertions; + +import java.util.Random; + +public class FlowerBucketTest { + private static final Random RANDOM_GENERATOR = new Random(); + private static final int MAX_QUANTITY = 1000; + private static final int MAX_PRICE = 100; + + private FlowerBucket flowerBucket; + + @BeforeEach + public void init() { + flowerBucket = new FlowerBucket(); + } + + @Test + public void testPrice() { + int price = RANDOM_GENERATOR.nextInt(MAX_PRICE); + int quantity = RANDOM_GENERATOR.nextInt(MAX_QUANTITY); + Flower flower = new Flower(); + flower.setFlowerType(FlowerType.ROSE); + flower.setPrice(price); + FlowerPack flowerPack = new FlowerPack(flower, quantity); + flowerBucket.addFlowerPack(flowerPack); + Assertions.assertEquals(price * quantity, flowerBucket.getPrice()); + } +} \ No newline at end of file diff --git a/src/test/java/flower/store/FlowerPackTest.java b/src/test/java/flower/store/FlowerPackTest.java new file mode 100644 index 00000000..50826ecd --- /dev/null +++ b/src/test/java/flower/store/FlowerPackTest.java @@ -0,0 +1,48 @@ +package flower.store; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.Assertions; + +public class FlowerPackTest { + private Flower flower; + private FlowerPack flowerPack; + + private final double vall = 10; + private final double valk = 5; + private final double delta = 0.001; + + + + @BeforeEach + public void init() { + // Create a flower object with specific attributes + flower = new Flower(); + flower.setPrice(vall); // Set price per flower + flower.setSepalLength(valk); + flower.setFlowerType(FlowerType.ROSE); + flower.setColor(FlowerColor.RED); + + // Create a flower pack with 5 flowers + flowerPack = new FlowerPack(flower, (int) valk); + } + + @Test + public void testGetPrice() { + // Test if the price is calculated correctly + double expectedPrice = vall * valk; // Price per flower * amount + Assertions.assertEquals(expectedPrice, flowerPack.getPrice(), + delta, "Price calculation failed"); + } + + @Test + public void testSetAmount() { + // Change the amount of flowers in the pack + flowerPack.setAmount((int) vall); + + // Test if the new price reflects the updated amount + double expectedPrice = vall * vall; // Price per flower * new amount + Assertions.assertEquals(expectedPrice, flowerPack.getPrice(), + delta, + "Updated price calculation failed"); + } +}