From 23c5a8b0b507dbcadec7c88dd510c6e4e6882ad3 Mon Sep 17 00:00:00 2001 From: hkorets Date: Sun, 13 Oct 2024 11:33:40 +0300 Subject: [PATCH] Flower bucket updates --- src/main/java/flower/store/Chamomile.java | 10 ++++ src/main/java/flower/store/Flower.java | 32 ++++++++---- src/main/java/flower/store/FlowerBucket.java | 25 +++++++++ src/main/java/flower/store/FlowerPack.java | 30 +++++++++++ src/main/java/flower/store/Rose.java | 17 ++++++ src/main/java/flower/store/Store.java | 27 ++++++++++ src/main/java/flower/store/Tulip.java | 10 ++++ .../java/flower/store/FlowerBucketTest.java | 31 +++++++++++ .../java/flower/store/FlowerStoreTests.java | 52 +++++++++++++++++++ 9 files changed, 224 insertions(+), 10 deletions(-) create mode 100644 src/main/java/flower/store/Chamomile.java create mode 100644 src/main/java/flower/store/FlowerBucket.java create mode 100644 src/main/java/flower/store/Rose.java create mode 100644 src/main/java/flower/store/Store.java create mode 100644 src/main/java/flower/store/Tulip.java create mode 100644 src/test/java/flower/store/FlowerBucketTest.java create mode 100644 src/test/java/flower/store/FlowerStoreTests.java diff --git a/src/main/java/flower/store/Chamomile.java b/src/main/java/flower/store/Chamomile.java new file mode 100644 index 00000000..6a77d0bd --- /dev/null +++ b/src/main/java/flower/store/Chamomile.java @@ -0,0 +1,10 @@ +package flower.store; + +public class Chamomile extends Flower{ + public Chamomile(double sepalLength, FlowerColor color, double price) { + this.setSepalLength(sepalLength); + this.setColor(color); + this.setPrice(price); + this.setFlowerType(FlowerType.CHAMOMILE); + } +} diff --git a/src/main/java/flower/store/Flower.java b/src/main/java/flower/store/Flower.java index 206ef870..469b3c20 100644 --- a/src/main/java/flower/store/Flower.java +++ b/src/main/java/flower/store/Flower.java @@ -1,21 +1,33 @@ package flower.store; -import lombok.Getter; -import lombok.Setter; - - - -@Setter public class Flower { - @Getter private double sepalLength; private FlowerColor color; - @Getter private double price; - @Getter private FlowerType flowerType; public String getColor() { return color.toString(); } -} + public void setColor(FlowerColor color) { + this.color = color; + } + public void setPrice(double price) { + this.price = price; + } + public double getPrice(){ + return this.price; + } + public void setSepalLength(double len) { + this.sepalLength = len; + } + public double getSepalLength(){ + return this.sepalLength; + } + public void setFlowerType(FlowerType type){ + this.flowerType = type; + } + public FlowerType getFlowerType(){ + return this.flowerType; + } +} \ No newline at end of file diff --git a/src/main/java/flower/store/FlowerBucket.java b/src/main/java/flower/store/FlowerBucket.java new file mode 100644 index 00000000..bd40f657 --- /dev/null +++ b/src/main/java/flower/store/FlowerBucket.java @@ -0,0 +1,25 @@ +package flower.store; + +import java.util.ArrayList; + +public class FlowerBucket { + private ArrayList packs = new ArrayList<>(); + + public void add(FlowerPack pack) { + packs.add(pack); + } + + public double price() { + return packs.stream().mapToDouble(FlowerPack::getPrice).sum(); + } + + public ArrayList getPacks() { + return packs; + } + + public double getPrice() { + return price(); + } +} + + diff --git a/src/main/java/flower/store/FlowerPack.java b/src/main/java/flower/store/FlowerPack.java index 44c99495..45ac6bf8 100644 --- a/src/main/java/flower/store/FlowerPack.java +++ b/src/main/java/flower/store/FlowerPack.java @@ -3,4 +3,34 @@ public class FlowerPack { private Flower flower; private int quantity; + + public FlowerPack(Flower flower, int quantity){ + this.flower = flower; + this.quantity = quantity; + } + + public double getPrice() { + return flower.getPrice() * quantity; + } + + public Flower getFlower() { + return flower; + } + + public int getQuantity() { + return quantity; + } + + public static void main(String[] args) { + Flower flower = new Flower(); + flower.setPrice(10); + + FlowerPack pack = new FlowerPack(flower, 5); + FlowerBucket bucket = new FlowerBucket(); + bucket.add(pack); + + // This should print 50 (10 * 5) + System.out.println("Bucket price: " + bucket.getPrice()); + } } + diff --git a/src/main/java/flower/store/Rose.java b/src/main/java/flower/store/Rose.java new file mode 100644 index 00000000..59da2d64 --- /dev/null +++ b/src/main/java/flower/store/Rose.java @@ -0,0 +1,17 @@ +package flower.store; + +public class Rose extends Flower { + public Rose () { + this.setSepalLength(0); + this.setColor(FlowerColor.BLUE); + this.setPrice(0); + this.setFlowerType(FlowerType.ROSE); + } + + public Rose(double sepalLength, FlowerColor color, double price) { + this.setSepalLength(sepalLength); + this.setColor(color); + this.setPrice(price); + this.setFlowerType(FlowerType.ROSE); + } +} diff --git a/src/main/java/flower/store/Store.java b/src/main/java/flower/store/Store.java new file mode 100644 index 00000000..7891776a --- /dev/null +++ b/src/main/java/flower/store/Store.java @@ -0,0 +1,27 @@ +package flower.store; + +import java.util.ArrayList; +import java.util.List; + +public class Store { + private List buckets = new ArrayList<>(); + + public void addBucket(FlowerBucket bucket) { + buckets.add(bucket); + } + + public List search(FlowerType type, FlowerColor color) { + List result = new ArrayList<>(); + + for (FlowerBucket bucket : buckets) { + for (FlowerPack pack : bucket.getPacks()) { + if (pack.getFlower().getFlowerType() == type && pack.getFlower().getColor().equals(color.toString())) { + result.add(bucket); + break; + } + } + } + + return result; + } +} diff --git a/src/main/java/flower/store/Tulip.java b/src/main/java/flower/store/Tulip.java new file mode 100644 index 00000000..3bb8a2bf --- /dev/null +++ b/src/main/java/flower/store/Tulip.java @@ -0,0 +1,10 @@ +package flower.store; + +public class Tulip extends Flower { + public Tulip(double sepalLength, FlowerColor color, double price) { + this.setSepalLength(sepalLength); + this.setColor(color); + this.setPrice(price); + this.setFlowerType(FlowerType.TULIP); + } +} diff --git a/src/test/java/flower/store/FlowerBucketTest.java b/src/test/java/flower/store/FlowerBucketTest.java new file mode 100644 index 00000000..a568ac8e --- /dev/null +++ b/src/test/java/flower/store/FlowerBucketTest.java @@ -0,0 +1,31 @@ +package flower.store; + +import java.util.Random; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +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 Rose(); + flower.setPrice(10); + FlowerPack flowerPack = new FlowerPack(flower, quantity); + flowerBucket.add(flowerPack); + Assertions.assertEquals(price * quantity, flowerBucket.getPrice()); + } +} diff --git a/src/test/java/flower/store/FlowerStoreTests.java b/src/test/java/flower/store/FlowerStoreTests.java new file mode 100644 index 00000000..f58b5e61 --- /dev/null +++ b/src/test/java/flower/store/FlowerStoreTests.java @@ -0,0 +1,52 @@ +package flower.store; +import static org.junit.jupiter.api.Assertions.assertEquals; +import org.junit.jupiter.api.Test; + +public class FlowerStoreTests { + + // Test Flower class + @Test + public void testFlowerCreation() { + Flower flower = new Flower(); + flower.setSepalLength(5.0); + flower.setPrice(12.5); + flower.setColor(FlowerColor.RED); + flower.setFlowerType(FlowerType.ROSE); + + assertEquals(5.0, flower.getSepalLength(), "Sepal length should be 5.0"); + assertEquals(12.5, flower.getPrice(), "Price should be 12.5"); + assertEquals("#FF0000", flower.getColor(), "Color should be red (#FF0000)"); + assertEquals(FlowerType.ROSE, flower.getFlowerType(), "Flower type should be ROSE"); + } + + // Test FlowerPack class + @Test + public void testFlowerPackCreation() { + Flower flower = new Flower(); + flower.setPrice(10.0); + FlowerPack pack = new FlowerPack(flower, 5); + + assertEquals(10.0, pack.getFlower().getPrice(), "Flower price should be 10.0"); + assertEquals(5, pack.getQuantity(), "Pack quantity should be 5"); + assertEquals(50.0, pack.getPrice(), "Pack price should be 50.0"); + } + + // Test FlowerBucket class + @Test + public void testFlowerBucket() { + Flower flower1 = new Flower(); + flower1.setPrice(15.0); + FlowerPack pack1 = new FlowerPack(flower1, 2); + + Flower flower2 = new Flower(); + flower2.setPrice(10.0); + FlowerPack pack2 = new FlowerPack(flower2, 3); + + FlowerBucket bucket = new FlowerBucket(); + bucket.add(pack1); + bucket.add(pack2); + + assertEquals(60.0, bucket.getPrice(), "Bucket price should be 60.0 (15 * 2 + 10 * 3)"); + assertEquals(2, bucket.getPacks().size(), "Bucket should contain 2 packs"); + } +}