diff --git a/src/main/java/ch/zhaw/gartenverwaltung/backgroundtasks/weather/WeatherGradenTaskPlanner.java b/src/main/java/ch/zhaw/gartenverwaltung/backgroundtasks/weather/WeatherGradenTaskPlanner.java index ea9acfc..7affb02 100644 --- a/src/main/java/ch/zhaw/gartenverwaltung/backgroundtasks/weather/WeatherGradenTaskPlanner.java +++ b/src/main/java/ch/zhaw/gartenverwaltung/backgroundtasks/weather/WeatherGradenTaskPlanner.java @@ -20,7 +20,7 @@ public class WeatherGradenTaskPlanner { private final PlantList plantList; private final CropList cropList; 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) { this.taskList = taskList; @@ -64,7 +64,7 @@ public class WeatherGradenTaskPlanner { 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", - dateSevereWeather.minusDays(1L),dateSevereWeather.plusDays(1L)); + dateSevereWeather.minusDays(1L),dateSevereWeather.plusDays(1L),1L); taskList.saveTask(preHailTask); } @@ -76,7 +76,7 @@ public class WeatherGradenTaskPlanner { private void createPreFrostTask() throws IOException { Task preFrostTask = new Task("Frost", "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); } @@ -87,7 +87,7 @@ public class WeatherGradenTaskPlanner { private void createPreSnowTask() throws IOException { Task preSnowTask = new Task("Snow", "The weather brings little snowfall. Cover your crops", - dateSevereWeather.minusDays(1L),dateSevereWeather.plusDays(1L)); + dateSevereWeather.minusDays(1L),dateSevereWeather.plusDays(1L),1L); taskList.saveTask(preSnowTask); } @@ -113,9 +113,6 @@ public class WeatherGradenTaskPlanner { /** * Method to set next execution date of the water plant tasks * @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 cropTaskList){ for(Task task : cropTaskList){ diff --git a/src/main/java/ch/zhaw/gartenverwaltung/types/Task.java b/src/main/java/ch/zhaw/gartenverwaltung/types/Task.java index 017b18f..7b8a78e 100644 --- a/src/main/java/ch/zhaw/gartenverwaltung/types/Task.java +++ b/src/main/java/ch/zhaw/gartenverwaltung/types/Task.java @@ -55,10 +55,11 @@ public class Task { * @param startDate The start date of the task * @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.description = description; this.startDate = startDate; + nextExecution = startDate; this.endDate = endDate; } diff --git a/src/test/java/ch/zhaw/gartenverwaltung/backgroundtasks/weather/WeatherGardenTaskPlannerTest.java b/src/test/java/ch/zhaw/gartenverwaltung/backgroundtasks/weather/WeatherGardenTaskPlannerTest.java new file mode 100644 index 0000000..8222484 --- /dev/null +++ b/src/test/java/ch/zhaw/gartenverwaltung/backgroundtasks/weather/WeatherGardenTaskPlannerTest.java @@ -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 cropList; + List 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 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 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()); + } +} diff --git a/src/test/resources/ch/zhaw/gartenverwaltung/backgroundtask/weather/test-taskdb.json b/src/test/resources/ch/zhaw/gartenverwaltung/backgroundtask/weather/test-taskdb.json new file mode 100644 index 0000000..32960f8 --- /dev/null +++ b/src/test/resources/ch/zhaw/gartenverwaltung/backgroundtask/weather/test-taskdb.json @@ -0,0 +1,2 @@ +[ +] \ No newline at end of file