Compare commits
5 Commits
28f76e7a04
...
00be979863
Author | SHA1 | Date |
---|---|---|
Gian-Andrea Hutter | 00be979863 | |
Gian-Andrea Hutter | 86386d8a91 | |
Gian-Andrea Hutter | d119fd1331 | |
gulerdav | 92ee656a5d | |
Elias Csomor | c64339c945 |
|
@ -20,7 +20,7 @@ public class WeatherGradenTaskPlanner {
|
||||||
private final PlantList plantList;
|
private final PlantList plantList;
|
||||||
private final CropList cropList;
|
private final CropList cropList;
|
||||||
WeatherService weatherService;
|
WeatherService weatherService;
|
||||||
private final LocalDate dateSevereWeather = LocalDate.of(2022,12,15);
|
private final LocalDate dateSevereWeather = LocalDate.now();
|
||||||
|
|
||||||
public WeatherGradenTaskPlanner(TaskList taskList, PlantList plantList, CropList cropList) {
|
public WeatherGradenTaskPlanner(TaskList taskList, PlantList plantList, CropList cropList) {
|
||||||
this.taskList = taskList;
|
this.taskList = taskList;
|
||||||
|
@ -64,7 +64,7 @@ public class WeatherGradenTaskPlanner {
|
||||||
|
|
||||||
Task preHailTask = new Task("Hail",
|
Task preHailTask = new Task("Hail",
|
||||||
"During a summer Thunderstorm it could hail heavily. THe Hail could damage the crops. To prevent damage cover the plants with a strong tarpaulin",
|
"During a summer Thunderstorm it could hail heavily. THe Hail could damage the crops. To prevent damage cover the plants with a strong tarpaulin",
|
||||||
dateSevereWeather.minusDays(1L),dateSevereWeather.plusDays(1L));
|
dateSevereWeather.minusDays(1L),dateSevereWeather.plusDays(1L),1L);
|
||||||
taskList.saveTask(preHailTask);
|
taskList.saveTask(preHailTask);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -76,7 +76,7 @@ public class WeatherGradenTaskPlanner {
|
||||||
private void createPreFrostTask() throws IOException {
|
private void createPreFrostTask() throws IOException {
|
||||||
Task preFrostTask = new Task("Frost",
|
Task preFrostTask = new Task("Frost",
|
||||||
"The temperatur falls below zero degrees, cover especially the root with wool",
|
"The temperatur falls below zero degrees, cover especially the root with wool",
|
||||||
dateSevereWeather.minusDays(1L),dateSevereWeather.plusDays(1L));
|
dateSevereWeather.minusDays(1L),dateSevereWeather.plusDays(1L),1L);
|
||||||
taskList.saveTask(preFrostTask);
|
taskList.saveTask(preFrostTask);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -87,7 +87,7 @@ public class WeatherGradenTaskPlanner {
|
||||||
private void createPreSnowTask() throws IOException {
|
private void createPreSnowTask() throws IOException {
|
||||||
Task preSnowTask = new Task("Snow",
|
Task preSnowTask = new Task("Snow",
|
||||||
"The weather brings little snowfall. Cover your crops",
|
"The weather brings little snowfall. Cover your crops",
|
||||||
dateSevereWeather.minusDays(1L),dateSevereWeather.plusDays(1L));
|
dateSevereWeather.minusDays(1L),dateSevereWeather.plusDays(1L),1L);
|
||||||
taskList.saveTask(preSnowTask);
|
taskList.saveTask(preSnowTask);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -113,9 +113,6 @@ public class WeatherGradenTaskPlanner {
|
||||||
/**
|
/**
|
||||||
* Method to set next execution date of the water plant tasks
|
* Method to set next execution date of the water plant tasks
|
||||||
* @param cropTaskList List with tasks from crops
|
* @param cropTaskList List with tasks from crops
|
||||||
* @throws IOException If the database cannot be accessed
|
|
||||||
* @throws HardinessZoneNotSetException If the hardiness zone is not available
|
|
||||||
* @throws PlantNotFoundException if the plant is not available for the watering task
|
|
||||||
*/
|
*/
|
||||||
private void adjustNextExecutionOfWateringTasks(List<Task> cropTaskList){
|
private void adjustNextExecutionOfWateringTasks(List<Task> cropTaskList){
|
||||||
for(Task task : cropTaskList){
|
for(Task task : cropTaskList){
|
||||||
|
|
|
@ -21,13 +21,9 @@ public class PlantImageDeserializer extends JsonDeserializer<Image> {
|
||||||
@Override
|
@Override
|
||||||
public Image deserialize(JsonParser parser, DeserializationContext context) throws IOException {
|
public Image deserialize(JsonParser parser, DeserializationContext context) throws IOException {
|
||||||
Image result = null;
|
Image result = null;
|
||||||
URL imageUrl = PlantList.class.getResource(String.format("images/%s", parser.getText()));
|
InputStream is = PlantList.class.getResourceAsStream(String.format("images/%s", parser.getText()));
|
||||||
if (imageUrl != null) {
|
if (is != null) {
|
||||||
try (InputStream is = new FileInputStream(new File(imageUrl.toURI()))) {
|
result = new Image(is);
|
||||||
result = new Image(is);
|
|
||||||
} catch (IllegalArgumentException | URISyntaxException e) {
|
|
||||||
throw new IOException(String.format("Cannot find Image \"%s\"\n", imageUrl.getFile()));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,10 +44,11 @@ public class Task {
|
||||||
/**
|
/**
|
||||||
* Constructor for weather events
|
* Constructor for weather events
|
||||||
*/
|
*/
|
||||||
public Task(String name, String description, LocalDate startDate, LocalDate endDate) {
|
public Task(String name, String description, LocalDate startDate, LocalDate endDate, long cropId) {
|
||||||
this.name = name;
|
this.name = name;
|
||||||
this.description = description;
|
this.description = description;
|
||||||
this.startDate = startDate;
|
this.startDate = startDate;
|
||||||
|
nextExecution = startDate;
|
||||||
this.endDate = endDate;
|
this.endDate = endDate;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,91 @@
|
||||||
|
package ch.zhaw.gartenverwaltung.backgroundtasks.weather;
|
||||||
|
|
||||||
|
import ch.zhaw.gartenverwaltung.io.*;
|
||||||
|
import ch.zhaw.gartenverwaltung.models.PlantNotFoundException;
|
||||||
|
import ch.zhaw.gartenverwaltung.types.*;
|
||||||
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.time.MonthDay;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
|
import static org.mockito.Mockito.mock;
|
||||||
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
|
public class WeatherGardenTaskPlannerTest {
|
||||||
|
private final URL testFile = JsonCropListTest.class.getResource("test-taskdb.json");
|
||||||
|
Plant examplePlantOnion;
|
||||||
|
Crop exampleCropOnion;
|
||||||
|
Task exampleTask;
|
||||||
|
Task exampleWeatherTask;
|
||||||
|
List<Crop> cropList;
|
||||||
|
List<Plant> plantList;
|
||||||
|
TaskList taskList;
|
||||||
|
|
||||||
|
@BeforeEach
|
||||||
|
void setUp() {
|
||||||
|
examplePlantOnion = 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.",
|
||||||
|
null,
|
||||||
|
"15,30,2",
|
||||||
|
0,
|
||||||
|
"sandy to loamy, loose soil, free of stones",
|
||||||
|
new ArrayList<>(),
|
||||||
|
new WateringCycle(15, 3, null),
|
||||||
|
List.of(new GrowthPhase(MonthDay.of(6, 4), MonthDay.of(12, 4), 0, GrowthPhaseType.HARVEST, HardinessZone.ZONE_8A, new ArrayList<>()),
|
||||||
|
new GrowthPhase(MonthDay.of(4, 3), MonthDay.of(12, 4), 0, GrowthPhaseType.PLANT, HardinessZone.ZONE_8A, new ArrayList<>()),
|
||||||
|
new GrowthPhase(MonthDay.of(8, 5), MonthDay.of(12, 4), 0, GrowthPhaseType.PLANT, HardinessZone.ZONE_8A, new ArrayList<>()),
|
||||||
|
new GrowthPhase(MonthDay.of(2, 8), MonthDay.of(12, 4), 0, GrowthPhaseType.PLANT, HardinessZone.ZONE_8A, new ArrayList<>()),
|
||||||
|
new GrowthPhase(MonthDay.of(10, 2), MonthDay.of(12, 4), 0, GrowthPhaseType.PLANT, HardinessZone.ZONE_8A, new ArrayList<>())));
|
||||||
|
|
||||||
|
exampleCropOnion = new Crop(examplePlantOnion.id(), LocalDate.of(2022, 12, 5))
|
||||||
|
.withId(3L);
|
||||||
|
exampleTask = new Task("water plant","water the plant until the ground is wet enough",LocalDate.now(), LocalDate.now().plusDays(2L),3L);
|
||||||
|
exampleTask.setNextExecution(LocalDate.now().plusDays(1L));
|
||||||
|
exampleWeatherTask = new Task("Hail",
|
||||||
|
"During a summer Thunderstorm it could hail heavily. THe Hail could damage the crops. To prevent damage cover the plants with a strong tarpaulin",
|
||||||
|
LocalDate.now().minusDays(1L),LocalDate.now().plusDays(1L),3L);
|
||||||
|
|
||||||
|
taskList = new JsonTaskList(testFile);
|
||||||
|
|
||||||
|
plantList = new ArrayList<>();
|
||||||
|
plantList.add(examplePlantOnion);
|
||||||
|
|
||||||
|
cropList = new ArrayList<>();
|
||||||
|
cropList.add(exampleCropOnion);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
CropList mockCropList(List<Crop> cropList) throws IOException {
|
||||||
|
CropList croplist = mock(CropList.class);
|
||||||
|
when(croplist.getCrops()).thenReturn(cropList);
|
||||||
|
when(croplist.getCropById(3)).thenReturn(java.util.Optional.ofNullable(exampleCropOnion));
|
||||||
|
return croplist;
|
||||||
|
}
|
||||||
|
|
||||||
|
PlantList mockPlantDatabase(List<Plant> plantList) throws HardinessZoneNotSetException, IOException {
|
||||||
|
PlantList plantDatabase = mock(JsonPlantList.class);
|
||||||
|
when(plantDatabase.getPlantList(HardinessZone.ZONE_8A)).thenReturn(plantList);
|
||||||
|
when(plantDatabase.getPlantById(HardinessZone.ZONE_8A,20)).thenReturn(Optional.of(plantList.get(0)));
|
||||||
|
return plantDatabase;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void refreshtasks() throws HardinessZoneNotSetException, IOException, PlantNotFoundException {
|
||||||
|
WeatherGradenTaskPlanner weatherGradenTaskPlanner = new WeatherGradenTaskPlanner(taskList, mockPlantDatabase(plantList), mockCropList(cropList));
|
||||||
|
taskList.saveTask(exampleTask);
|
||||||
|
weatherGradenTaskPlanner.refreshTasks();
|
||||||
|
assertEquals(exampleTask.getName(),taskList.getTaskList(LocalDate.now(),LocalDate.now().plusDays(7)).get(0).getName());
|
||||||
|
assertEquals(LocalDate.now().plusDays(2L),taskList.getTaskList(LocalDate.now(),LocalDate.now().plusDays(7)).get(0).getNextExecution());
|
||||||
|
assertEquals(exampleWeatherTask.getName(),taskList.getTaskList(LocalDate.now(),LocalDate.now().plusDays(7)).get(1).getName());
|
||||||
|
assertEquals(exampleWeatherTask.getStartDate(),taskList.getTaskList(LocalDate.now(),LocalDate.now().plusDays(7)).get(1).getStartDate());
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,2 @@
|
||||||
|
[
|
||||||
|
]
|
Loading…
Reference in New Issue