Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions src/main/java/flower/store/Chamomile.java
Original file line number Diff line number Diff line change
@@ -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);
}
}
32 changes: 22 additions & 10 deletions src/main/java/flower/store/Flower.java
Original file line number Diff line number Diff line change
@@ -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;
}
}
25 changes: 25 additions & 0 deletions src/main/java/flower/store/FlowerBucket.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package flower.store;

import java.util.ArrayList;

public class FlowerBucket {
private ArrayList<FlowerPack> packs = new ArrayList<>();

public void add(FlowerPack pack) {
packs.add(pack);
}

public double price() {
return packs.stream().mapToDouble(FlowerPack::getPrice).sum();
}

public ArrayList<FlowerPack> getPacks() {
return packs;
}

public double getPrice() {
return price();
}
}


30 changes: 30 additions & 0 deletions src/main/java/flower/store/FlowerPack.java
Original file line number Diff line number Diff line change
Expand Up @@ -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());
}
}

17 changes: 17 additions & 0 deletions src/main/java/flower/store/Rose.java
Original file line number Diff line number Diff line change
@@ -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);
}
}
27 changes: 27 additions & 0 deletions src/main/java/flower/store/Store.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package flower.store;

import java.util.ArrayList;
import java.util.List;

public class Store {
private List<FlowerBucket> buckets = new ArrayList<>();

public void addBucket(FlowerBucket bucket) {
buckets.add(bucket);
}

public List<FlowerBucket> search(FlowerType type, FlowerColor color) {
List<FlowerBucket> 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;
}
}
10 changes: 10 additions & 0 deletions src/main/java/flower/store/Tulip.java
Original file line number Diff line number Diff line change
@@ -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);
}
}
31 changes: 31 additions & 0 deletions src/test/java/flower/store/FlowerBucketTest.java
Original file line number Diff line number Diff line change
@@ -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());
}
}
52 changes: 52 additions & 0 deletions src/test/java/flower/store/FlowerStoreTests.java
Original file line number Diff line number Diff line change
@@ -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");
}
}