Compare commits

...

5 Commits

Author SHA1 Message Date
gulerdav ccaff13df3 Merge pull request #78 from schrom01/feature_weather
Feature weather
2022-12-09 12:59:53 +01:00
gulerdav c9baf4dfb1 Merge branch 'dev' into feature_weather 2022-12-09 12:59:43 +01:00
Gian-Andrea Hutter 00be979863 #23 implemented test class for WeatherGradenTaskPlanner 2022-12-09 00:08:32 +01:00
Gian-Andrea Hutter 86386d8a91 #23 implemented test class for WeatherGradenTaskPlanner 2022-12-09 00:02:21 +01:00
Gian-Andrea Hutter d119fd1331 Merge branch 'dev' into feature_weather 2022-12-05 11:40:53 +01:00
4 changed files with 99 additions and 8 deletions

View File

@ -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){

View File

@ -55,10 +55,11 @@ public class Task {
* @param startDate The start date of the task * @param startDate The start date of the task
* @param endDate The maximum date on which the task should be executed * @param endDate The maximum date on which the task should be executed
*/ */
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;
} }

View File

@ -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());
}
}