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
21 changes: 15 additions & 6 deletions src/main/java/flower/store/Flower.java
Original file line number Diff line number Diff line change
@@ -1,21 +1,30 @@
package flower.store;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;



@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class Flower {
@Getter
private double sepalLength;
private FlowerColor color;
@Getter
private double price;
@Getter
private FlowerType flowerType;

public Flower(Flower flower) {
this.color = flower.color;
this.flowerType = flower.flowerType;
this.price = flower.price;
this.sepalLength = flower.sepalLength;
}

public String getColor() {
return color.toString();
return color.getCode();
}
}
31 changes: 31 additions & 0 deletions src/main/java/flower/store/FlowerBucket.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package flower.store;

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

import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
public class FlowerBucket {
private List<FlowerPack> flowerPacks;

public FlowerBucket() {
flowerPacks = new ArrayList<>();
}

public void add(FlowerPack flowerPack) {
flowerPacks.add(flowerPack);
}

public double getPrice() {
double price = 0.;

for (FlowerPack flowerPack : flowerPacks) {
price += flowerPack.getCount() * flowerPack.getFlower().getPrice();
}

return price;
}
}
18 changes: 7 additions & 11 deletions src/main/java/flower/store/FlowerColor.java
Original file line number Diff line number Diff line change
@@ -1,18 +1,14 @@
package flower.store;

import lombok.Getter;

@Getter
public enum FlowerColor {
/**
* Flower colors.
*/
RED("#FF0000"), BLUE("#0000FF");
private final String stringRepresentation;

FlowerColor(String stringRepresentation) {
this.stringRepresentation = stringRepresentation;
}
RED("#FF0000"), WHITE("#FFFFFF"), YELLOW("#FFFF00");
private String code;

@Override
public String toString() {
return stringRepresentation;
FlowerColor(String code) {
this.code = code;
}
}
15 changes: 14 additions & 1 deletion src/main/java/flower/store/FlowerPack.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,19 @@
package flower.store;

import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

@Getter
@Setter
@NoArgsConstructor

public class FlowerPack {
private Flower flower;
private int quantity;
private int count;
public FlowerPack(Flower flower, int count) {
this.flower = flower;
this.count = count;
}

}
2 changes: 1 addition & 1 deletion src/main/java/flower/store/FlowerType.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
package flower.store;

public enum FlowerType {
CHAMOMILE, ROSE, TULIP;
ROSE, CHAMOMILE, TULIP;
}
26 changes: 26 additions & 0 deletions src/main/java/flower/store/Store.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package flower.store;

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

public class Store {
private List<Flower> flowers;

public Store() {
flowers = new ArrayList<>();
}

public void addFlower(Flower flower) {
flowers.add(flower);
}

public List<Flower> search(FlowerType flowerType, FlowerColor flowerColor) {
List<Flower> result = new ArrayList<>();
for (Flower flower : flowers) {
if (flower.getFlowerType() == flowerType && flower.getColor().equals(flowerColor.getCode())) {
result.add(flower);
}
}
return result;
}
}
80 changes: 80 additions & 0 deletions src/test/java/flower/store/FlowerBucketTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
package flower.store;

import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

import org.junit.jupiter.api.Assertions;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;

import java.util.List;
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.setPrice(price);
FlowerPack flowerPack = new FlowerPack(flower, quantity);
flowerBucket.add(flowerPack);
Assertions.assertEquals(price * quantity, flowerBucket.getPrice());
}

private Store store;

@BeforeEach
public void setUp() {
store = new Store();
}

@Test
public void testAddFlower() {
Flower flower = new Flower(5.0, FlowerColor.RED, 10.0, FlowerType.ROSE);
store.addFlower(flower);
List<Flower> flowers = store.search(FlowerType.ROSE, FlowerColor.RED);
assertEquals(1, flowers.size());
assertEquals(flower, flowers.get(0));
}

@Test
public void testSearchByTypeAndColor() {
Flower flower1 = new Flower(5.0, FlowerColor.RED, 10.0, FlowerType.ROSE);
Flower flower2 = new Flower(6.0, FlowerColor.WHITE, 12.0, FlowerType.CHAMOMILE);
Flower flower3 = new Flower(4.5, FlowerColor.YELLOW, 8.0, FlowerType.ROSE);
store.addFlower(flower1);
store.addFlower(flower2);
store.addFlower(flower3);

List<Flower> result = store.search(FlowerType.ROSE, FlowerColor.RED);
assertEquals(1, result.size());
assertEquals(flower1, result.get(0));

result = store.search(FlowerType.CHAMOMILE, FlowerColor.WHITE);
assertEquals(1, result.size());
assertEquals(flower2, result.get(0));

result = store.search(FlowerType.ROSE, FlowerColor.YELLOW);
assertEquals(1, result.size());
assertEquals(flower3, result.get(0));
}

@Test
public void testSearchNoResults() {
List<Flower> result = store.search(FlowerType.ROSE, FlowerColor.WHITE);
assertTrue(result.isEmpty());
}
}