parent
fb237e47c0
commit
d686469336
|
@ -39,6 +39,7 @@ dependencies {
|
||||||
testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:${junitVersion}")
|
testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:${junitVersion}")
|
||||||
implementation group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.13.4'
|
implementation group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.13.4'
|
||||||
implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.13.4'
|
implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.13.4'
|
||||||
|
testImplementation 'org.mockito:mockito-core:4.3.+'
|
||||||
}
|
}
|
||||||
|
|
||||||
test {
|
test {
|
||||||
|
|
|
@ -13,17 +13,30 @@ import java.util.List;
|
||||||
import java.util.function.Predicate;
|
import java.util.function.Predicate;
|
||||||
|
|
||||||
public class PlantListModel {
|
public class PlantListModel {
|
||||||
private final PlantDatabase plantDatabase;
|
private PlantDatabase plantDatabase;
|
||||||
private HardinessZone currentZone;
|
private HardinessZone currentZone;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Comparators to create sorted Plant List
|
* Comparators to create sorted Plant List
|
||||||
*/
|
*/
|
||||||
public final Comparator<Plant> sortByName = (Plant o1, Plant o2) -> o1.name().compareTo(o2.name());
|
static final Comparator<Plant> sortByName = (Plant o1, Plant o2) -> o1.name().compareTo(o2.name());
|
||||||
public final Comparator<Plant> getSortById = (Plant o1, Plant o2) -> Long.compare(o1.id(), o2.id());
|
static final Comparator<Plant> SortById = (Plant o1, Plant o2) -> Long.compare(o1.id(), o2.id());
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor to create Database Object.
|
||||||
|
*/
|
||||||
public PlantListModel() {
|
public PlantListModel() {
|
||||||
plantDatabase = new JsonPlantDatabase();
|
plantDatabase = new JsonPlantDatabase();
|
||||||
|
setDefaultZone();
|
||||||
|
}
|
||||||
|
|
||||||
|
public PlantListModel(PlantDatabase plantDatabase){
|
||||||
|
this.plantDatabase = plantDatabase;
|
||||||
|
setDefaultZone();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setDefaultZone(){
|
||||||
|
currentZone = HardinessZone.ZONE_8A; // TODO: get Default Zone from Config
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setCurrentZone(HardinessZone currentZone) {
|
public void setCurrentZone(HardinessZone currentZone) {
|
||||||
|
|
|
@ -0,0 +1,155 @@
|
||||||
|
package ch.zhaw.gartenverwaltung.plantList;
|
||||||
|
|
||||||
|
import ch.zhaw.gartenverwaltung.io.HardinessZoneNotSetException;
|
||||||
|
import ch.zhaw.gartenverwaltung.io.JsonPlantDatabase;
|
||||||
|
import ch.zhaw.gartenverwaltung.io.PlantDatabase;
|
||||||
|
import ch.zhaw.gartenverwaltung.types.HardinessZone;
|
||||||
|
import ch.zhaw.gartenverwaltung.types.Plant;
|
||||||
|
import org.junit.jupiter.api.AfterEach;
|
||||||
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Locale;
|
||||||
|
import java.util.Optional;
|
||||||
|
import java.util.function.Predicate;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
|
import static org.mockito.Mockito.mock;
|
||||||
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
|
|
||||||
|
class PlantListModelTest {
|
||||||
|
PlantDatabase plantDatabase;
|
||||||
|
List<Plant> examplePlantList;
|
||||||
|
PlantListModel model;
|
||||||
|
|
||||||
|
@BeforeEach
|
||||||
|
void setUp() throws HardinessZoneNotSetException, IOException {
|
||||||
|
createExamplePlantList();
|
||||||
|
plantDatabase = mockPlantDatabase(examplePlantList);
|
||||||
|
model = new PlantListModel(plantDatabase);
|
||||||
|
}
|
||||||
|
|
||||||
|
@AfterEach
|
||||||
|
void tearDown() {
|
||||||
|
}
|
||||||
|
|
||||||
|
void createExamplePlantList(){
|
||||||
|
examplePlantList = new ArrayList<>();
|
||||||
|
examplePlantList.add(new Plant(
|
||||||
|
20,
|
||||||
|
"summertime onion",
|
||||||
|
"Onion, (Allium cepa), herbaceous biennial plant in the amaryllis family (Amaryllidaceae) grown for its edible bulb. The onion is likely native to southwestern Asia but is now grown throughout the world, chiefly in the temperate zones. Onions are low in nutrients but are valued for their flavour and are used widely in cooking. They add flavour to such dishes as stews, roasts, soups, and salads and are also served as a cooked vegetable.",
|
||||||
|
"15,30,2",
|
||||||
|
0,
|
||||||
|
"sandy to loamy, loose soil, free of stones",
|
||||||
|
new ArrayList<>(),
|
||||||
|
new ArrayList<>())
|
||||||
|
);
|
||||||
|
examplePlantList.add(new Plant(
|
||||||
|
0,
|
||||||
|
"Potato",
|
||||||
|
"The potato is a tuber, round or oval, with small white roots called 'eyes', that are growth buds. The size varies depending on the variety; the colour of the skin can be white, yellow or even purple.",
|
||||||
|
"35",
|
||||||
|
6,
|
||||||
|
"sandy",
|
||||||
|
new ArrayList<>(),
|
||||||
|
new ArrayList<>())
|
||||||
|
);
|
||||||
|
examplePlantList.add(new Plant(
|
||||||
|
1,
|
||||||
|
"Early Carrot",
|
||||||
|
"Carrot, (Daucus carota), herbaceous, generally biennial plant of the Apiaceae family that produces an edible taproot. Among common varieties root shapes range from globular to long, with lower ends blunt to pointed. Besides the orange-coloured roots, white-, yellow-, and purple-fleshed varieties are known.",
|
||||||
|
"5,35,2.5",
|
||||||
|
0,
|
||||||
|
"sandy to loamy, loose soil, free of stones",
|
||||||
|
new ArrayList<>(),
|
||||||
|
new ArrayList<>())
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
PlantDatabase mockPlantDatabase(List<Plant> plantList) throws HardinessZoneNotSetException, IOException {
|
||||||
|
PlantDatabase plantDatabase = mock(JsonPlantDatabase.class);
|
||||||
|
when(plantDatabase.getPlantList(HardinessZone.ZONE_8A)).thenReturn(plantList);
|
||||||
|
when(plantDatabase.getPlantList(HardinessZone.ZONE_1A)).thenReturn(new ArrayList<>());
|
||||||
|
when(plantDatabase.getPlantById(HardinessZone.ZONE_8A, 0)).thenReturn(Optional.of(plantList.get(1)));
|
||||||
|
when(plantDatabase.getPlantById(HardinessZone.ZONE_8A, 1)).thenReturn(Optional.of(plantList.get(2)));
|
||||||
|
when(plantDatabase.getPlantById(HardinessZone.ZONE_8A, 20)).thenReturn(Optional.of(plantList.get(0)));
|
||||||
|
when(plantDatabase.getPlantById(HardinessZone.ZONE_8A, 2)).thenReturn(Optional.empty());
|
||||||
|
|
||||||
|
return plantDatabase;
|
||||||
|
}
|
||||||
|
|
||||||
|
void checkCurrentZone(HardinessZone expectedZone) {
|
||||||
|
assertEquals(expectedZone, model.getCurrentZone());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void setCurrentZone() {
|
||||||
|
checkCurrentZone(HardinessZone.ZONE_8A); // TODO change to get default zone from config
|
||||||
|
model.setCurrentZone(HardinessZone.ZONE_1A);
|
||||||
|
checkCurrentZone(HardinessZone.ZONE_1A);
|
||||||
|
model.setCurrentZone(HardinessZone.ZONE_8A);
|
||||||
|
checkCurrentZone(HardinessZone.ZONE_8A);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void getPlantList() throws HardinessZoneNotSetException, IOException {
|
||||||
|
model.setCurrentZone(HardinessZone.ZONE_1A);
|
||||||
|
List<Plant> plantListResult = model.getPlantList(HardinessZone.ZONE_8A);
|
||||||
|
checkCurrentZone(HardinessZone.ZONE_8A);
|
||||||
|
assertEquals(examplePlantList.size(), plantListResult.size());
|
||||||
|
assertEquals(examplePlantList.get(2), plantListResult.get(0));
|
||||||
|
assertEquals(examplePlantList.get(1), plantListResult.get(1));
|
||||||
|
assertEquals(examplePlantList.get(0), plantListResult.get(2));
|
||||||
|
|
||||||
|
assertEquals(0, model.getPlantList(HardinessZone.ZONE_1A).size());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void getSortedPlantList() throws HardinessZoneNotSetException, IOException {
|
||||||
|
model.setCurrentZone(HardinessZone.ZONE_1A);
|
||||||
|
List<Plant> plantListResult = model.getSortedPlantList(HardinessZone.ZONE_8A, PlantListModel.sortByName);
|
||||||
|
checkCurrentZone(HardinessZone.ZONE_8A);
|
||||||
|
assertEquals(examplePlantList.size(), plantListResult.size());
|
||||||
|
assertEquals(examplePlantList.get(2), plantListResult.get(0));
|
||||||
|
assertEquals(examplePlantList.get(1), plantListResult.get(1));
|
||||||
|
assertEquals(examplePlantList.get(0), plantListResult.get(2));
|
||||||
|
|
||||||
|
plantListResult = model.getSortedPlantList(HardinessZone.ZONE_8A, PlantListModel.SortById);
|
||||||
|
assertEquals(examplePlantList.size(), plantListResult.size());
|
||||||
|
assertEquals(examplePlantList.get(1), plantListResult.get(0));
|
||||||
|
assertEquals(examplePlantList.get(2), plantListResult.get(1));
|
||||||
|
assertEquals(examplePlantList.get(0), plantListResult.get(2));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void getFilteredPlantList() throws HardinessZoneNotSetException, IOException {
|
||||||
|
model.setCurrentZone(HardinessZone.ZONE_1A);
|
||||||
|
Predicate<Plant> predicate = new Predicate<Plant>() {
|
||||||
|
@Override
|
||||||
|
public boolean test(Plant plant) {
|
||||||
|
return plant.name().toUpperCase(Locale.ROOT).contains("E");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
List<Plant> plantListResult = model.getFilteredPlantList(HardinessZone.ZONE_8A, predicate);
|
||||||
|
checkCurrentZone(HardinessZone.ZONE_8A);
|
||||||
|
assertEquals(2, plantListResult.size());
|
||||||
|
assertEquals(examplePlantList.get(2), plantListResult.get(0));
|
||||||
|
assertEquals(examplePlantList.get(0), plantListResult.get(1));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void getFilteredPlantListById() throws HardinessZoneNotSetException, IOException {
|
||||||
|
model.setCurrentZone(HardinessZone.ZONE_1A);
|
||||||
|
List<Plant> plantListResult = model.getFilteredPlantListById(HardinessZone.ZONE_8A, 2L);
|
||||||
|
assertEquals(0, plantListResult.size());
|
||||||
|
plantListResult = model.getFilteredPlantListById(HardinessZone.ZONE_8A, 20L);
|
||||||
|
assertEquals(1, plantListResult.size());
|
||||||
|
assertEquals(examplePlantList.get(0), plantListResult.get(0));
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue