From a4571a2e7a1411808e6322fe87c91fc4610cc942 Mon Sep 17 00:00:00 2001 From: Hannah Holzheu <hh062@hdm-stuttgart.de> Date: Wed, 6 Dec 2023 17:17:35 +0100 Subject: [PATCH] added Tests for Search Endpoint #23 --- .../models/search/PlantSpecification.java | 22 +---- .../growbros/models/search/SearchRequest.java | 2 - .../models/search/PlantSpecificationTest.java | 80 ++++++++++++++++++- 3 files changed, 79 insertions(+), 25 deletions(-) diff --git a/src/main/java/hdm/mi/growbros/models/search/PlantSpecification.java b/src/main/java/hdm/mi/growbros/models/search/PlantSpecification.java index ec2568b..a7a0780 100644 --- a/src/main/java/hdm/mi/growbros/models/search/PlantSpecification.java +++ b/src/main/java/hdm/mi/growbros/models/search/PlantSpecification.java @@ -22,8 +22,6 @@ public class PlantSpecification { Collection<Predicate> predicatesAND = new ArrayList<>(); Collection<Predicate> plantWeekONE= new ArrayList<>(); Collection<Predicate> plantWeekTWO= new ArrayList<>(); - Collection<Predicate> harvestWeekONE= new ArrayList<>(); - Collection<Predicate> harvestWeekTWO= new ArrayList<>(); if (StringUtils.hasText(searchRequest.getSearchTerm())) { @@ -41,21 +39,9 @@ public class PlantSpecification { predicatesAND.add(criteriaBuilder.equal(root.get("waterDemand"),searchRequest.getWaterDemand())); } if(searchRequest.getLightingDemand()!=null){ - predicatesAND.add(criteriaBuilder.equal(root.get("lightningDemand"),searchRequest.getLightingDemand())); + predicatesAND.add(criteriaBuilder.equal(root.get("lightingDemand"),searchRequest.getLightingDemand())); } - if(searchRequest.getHarvestWeekStart()!=null & searchRequest.getHarvestWeekEnd()!=null){ - //searchRequest start oder end zwischen root start und ende sein - harvestWeekONE.add(criteriaBuilder.lessThanOrEqualTo(root.get("harvestWeekStart"), searchRequest.getHarvestWeekStart())); - //und - harvestWeekONE.add(criteriaBuilder.greaterThanOrEqualTo(root.get("harvestWeekEnd"), searchRequest.getHarvestWeekEnd())); - //oder - harvestWeekTWO.add(criteriaBuilder.lessThanOrEqualTo(root.get("harvestWeekStart"), searchRequest.getHarvestWeekStart())); - //und - harvestWeekTWO.add(criteriaBuilder.greaterThanOrEqualTo(root.get("harvestWeekEnd"), searchRequest.getHarvestWeekEnd())); - - - } if(searchRequest.getPlantWeekStart()!=null &searchRequest.getPlantWeekEnd()!=null) { plantWeekONE.add(criteriaBuilder.lessThanOrEqualTo(root.get("plantWeekStart"), searchRequest.getPlantWeekStart())); plantWeekONE.add(criteriaBuilder.greaterThanOrEqualTo(root.get("plantWeekEnd"), searchRequest.getPlantWeekStart())); @@ -73,12 +59,6 @@ public class PlantSpecification { criteriaBuilder.and( plantWeekTWO.toArray(new Predicate[0])) ), - criteriaBuilder.or( - criteriaBuilder.and( - harvestWeekONE.toArray(new Predicate[0])), - criteriaBuilder.and( - harvestWeekTWO.toArray(new Predicate[0])) - ), criteriaBuilder.and( predicatesAND.toArray(new Predicate[0])) ); diff --git a/src/main/java/hdm/mi/growbros/models/search/SearchRequest.java b/src/main/java/hdm/mi/growbros/models/search/SearchRequest.java index 5cb692d..673d2e3 100644 --- a/src/main/java/hdm/mi/growbros/models/search/SearchRequest.java +++ b/src/main/java/hdm/mi/growbros/models/search/SearchRequest.java @@ -24,8 +24,6 @@ public class SearchRequest { private LightingDemand lightingDemand; private Integer plantWeekStart; private Integer plantWeekEnd; - private Integer harvestWeekStart; - private Integer harvestWeekEnd; private Integer growthDurationMin; private Integer growthDurationMax; diff --git a/src/test/java/hdm/mi/growbros/models/search/PlantSpecificationTest.java b/src/test/java/hdm/mi/growbros/models/search/PlantSpecificationTest.java index cd89458..cb35c3d 100644 --- a/src/test/java/hdm/mi/growbros/models/search/PlantSpecificationTest.java +++ b/src/test/java/hdm/mi/growbros/models/search/PlantSpecificationTest.java @@ -3,7 +3,7 @@ package hdm.mi.growbros.models.search; import com.fasterxml.jackson.core.JacksonException; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; -import hdm.mi.growbros.models.plant.Plant; +import hdm.mi.growbros.models.plant.*; import hdm.mi.growbros.repositories.PlantRepository; import lombok.RequiredArgsConstructor; import org.junit.jupiter.api.BeforeAll; @@ -34,7 +34,7 @@ class PlantSpecificationTest { @BeforeAll public static void setUp(@Autowired PlantRepository plantRepository){ - String jsonData= "[{\"name\":\"Etampes\",\"latinName\":\"ns12\",\"growingTips\":\"Wunderbar nutzbringende Untersaat z.B. für Grünkohl. Als Winterbegrünung\\nvon Staudenbeeten oder Balkonkästen.\",\"description\":\"Alte, dunkelgrüne, etwas langsamer wachsende Sorte, für den Freilandanbau. Erträgt Kahlfröste besser als andere Sorten und stängelt im Frühjahr etwas später auf. Löffelt nicht.\",\"origin\":null,\"plantWeekStart\":10,\"plantWeekEnd\":19,\"harvestWeekStart\":39,\"harvestWeekEnd\":15,\"growthDuration\":20,\"nutrientDemand\":\"LOW\",\"lightingDemand\":\"HIGH\",\"waterDemand\":\"WET\",\"groundType\":null,\"imageUrl\":\"https://d3t240q2dksnz7.cloudfront.net/7c982b256c33faf0068e58854d46efc1.jpg\"},{\"name\":\"Elan\",\"latinName\":\"ns15\",\"growingTips\":\"Wenn Feldsalat im heißen und trockenen August ausgesät wird kann es zu erheblichen Auflaufproblemen kommen. Hier helfen eine Beschattung mit einem Vlies und das Bewässern des Bodens vor der Aussaat. Feldsalat braucht wenig Stickstoff und sollte keinesfalls nach Hülsenfrüchten anbaut werden.\",\"description\":\"Sehr raschwachsende und mehltautolerante Sorte, die sich sowohl für den Anbau im Freien wie unter Glas und Folie eignet. Noch rascher im Wuchs als die Sorte Vit. Kompakte, glattblättrige Pflanzen mit hohem Einzelpflanzengewicht. Robust gegen falschen Mehltau. Neigt bei früher Aussaat zum Löffeln, daher nicht für die ersten Sätze im Sommer geeignet. \",\"origin\":null,\"plantWeekStart\":10,\"plantWeekEnd\":19,\"harvestWeekStart\":37,\"harvestWeekEnd\":15,\"growthDuration\":18,\"nutrientDemand\":\"LOW\",\"lightingDemand\":\"HIGH\",\"waterDemand\":\"WET\",\"groundType\":null,\"imageUrl\":\"https://d3t240q2dksnz7.cloudfront.net/3b9ebf9fc01ef9b543a658efca59d56a.jpg\"},{\"name\":\"Postelein\",\"latinName\":\"Claytonia perfoliata L.\",\"growingTips\":\"Die Samen des Postelein keimen erst bei einer Temperatur unter 12 °C und werden darum in der Zeit von September bis März in Reihen mit 15–20 cm Abstand ausgesät (daher der Name \\\"Winterportulak\\\"). Meist stammt der im Handel erhältliche Postelein aus dem Gewächshausanbau. Auch wenn die Pflanzen etwas Kälte vertragen, solltest du sie mit einem Gartenvlies vor starkem Frost schützen. Während der Kultur ist der Postelein ziemlich anspruchslos. Zu Ernte schneidest du die (möglichst noch jungen) Blätter und Stiele nicht zu tief über dem Boden ab. So kann der Postelein noch einmal austreiben und es sind mehrere Ernten möglich.\\n\\n\",\"description\":\"Das \\\"Gewöhnliche Tellerkraut\\\" bzw. \\\"Postelein\\\" (Claytonia perfoliata) ist eine Pflanzenart aus der Familie der Quellkrautgewächse (Montiaceae). Sie wird in Mitteleuropa angebaut, ist winterhart und wird darum teilweise auch als \\\"modernes\\\" Wintergemüse verwendet.\",\"origin\":\"Die Berg- und Küstenregionen im Westen Nordamerikas\",\"plantWeekStart\":null,\"plantWeekEnd\":null,\"harvestWeekStart\":39,\"harvestWeekEnd\":20,\"growthDuration\":12,\"nutrientDemand\":\"LOW\",\"lightingDemand\":\"LOW\",\"waterDemand\":\"WET\",\"groundType\":null,\"imageUrl\":\"https://d3t240q2dksnz7.cloudfront.net/b42b406101112ef7f194a4e9cb3afff2.jpg\"}]"; + String jsonData= "[{\"name\":\"Etampes\",\"latinName\":\"ns12\",\"growingTips\":\"Wunderbar nutzbringende Untersaat z.B. für Grünkohl. Als Winterbegrünung\\nvon Staudenbeeten oder Balkonkästen.\",\"description\":\"Alte, dunkelgrüne, etwas langsamer wachsende Sorte, für den Freilandanbau. Erträgt Kahlfröste besser als andere Sorten und stängelt im Frühjahr etwas später auf. Löffelt nicht.\",\"origin\":null,\"plantWeekStart\":10,\"plantWeekEnd\":19,\"harvestWeekStart\":39,\"harvestWeekEnd\":15,\"growthDuration\":20,\"nutrientDemand\":\"LOW\",\"lightingDemand\":\"HIGH\",\"waterDemand\":\"DRY\",\"groundType\":\"HEAVY\",\"imageUrl\":\"https://d3t240q2dksnz7.cloudfront.net/7c982b256c33faf0068e58854d46efc1.jpg\"},{\"name\":\"Elan\",\"latinName\":\"ns15\",\"growingTips\":\"Wenn Feldsalat im heißen und trockenen August ausgesät wird kann es zu erheblichen Auflaufproblemen kommen. Hier helfen eine Beschattung mit einem Vlies und das Bewässern des Bodens vor der Aussaat. Feldsalat braucht wenig Stickstoff und sollte keinesfalls nach Hülsenfrüchten anbaut werden.\",\"description\":\"Sehr raschwachsende und mehltautolerante Sorte, die sich sowohl für den Anbau im Freien wie unter Glas und Folie eignet. Noch rascher im Wuchs als die Sorte Vit. Kompakte, glattblättrige Pflanzen mit hohem Einzelpflanzengewicht. Robust gegen falschen Mehltau. Neigt bei früher Aussaat zum Löffeln, daher nicht für die ersten Sätze im Sommer geeignet. \",\"origin\":null,\"plantWeekStart\":10,\"plantWeekEnd\":19,\"harvestWeekStart\":37,\"harvestWeekEnd\":15,\"growthDuration\":18,\"nutrientDemand\":\"LOW\",\"lightingDemand\":\"HIGH\",\"waterDemand\":\"WET\",\"groundType\":null,\"imageUrl\":\"https://d3t240q2dksnz7.cloudfront.net/3b9ebf9fc01ef9b543a658efca59d56a.jpg\"},{\"name\":\"Postelein\",\"latinName\":\"Claytonia perfoliata L.\",\"growingTips\":\"Die Samen des Postelein keimen erst bei einer Temperatur unter 12 °C und werden darum in der Zeit von September bis März in Reihen mit 15–20 cm Abstand ausgesät (daher der Name \\\"Winterportulak\\\"). Meist stammt der im Handel erhältliche Postelein aus dem Gewächshausanbau. Auch wenn die Pflanzen etwas Kälte vertragen, solltest du sie mit einem Gartenvlies vor starkem Frost schützen. Während der Kultur ist der Postelein ziemlich anspruchslos. Zu Ernte schneidest du die (möglichst noch jungen) Blätter und Stiele nicht zu tief über dem Boden ab. So kann der Postelein noch einmal austreiben und es sind mehrere Ernten möglich.\\n\\n\",\"description\":\"Das \\\"Gewöhnliche Tellerkraut\\\" bzw. \\\"Postelein\\\" (Claytonia perfoliata) ist eine Pflanzenart aus der Familie der Quellkrautgewächse (Montiaceae). Sie wird in Mitteleuropa angebaut, ist winterhart und wird darum teilweise auch als \\\"modernes\\\" Wintergemüse verwendet.\",\"origin\":\"Die Berg- und Küstenregionen im Westen Nordamerikas\",\"plantWeekStart\":null,\"plantWeekEnd\":null,\"harvestWeekStart\":39,\"harvestWeekEnd\":20,\"growthDuration\":12,\"nutrientDemand\":\"HIGH\",\"lightingDemand\":\"LOW\",\"waterDemand\":\"WET\",\"groundType\":null,\"imageUrl\":\"https://d3t240q2dksnz7.cloudfront.net/b42b406101112ef7f194a4e9cb3afff2.jpg\"}]"; try { final ObjectMapper objectMapper = new ObjectMapper(); @@ -78,5 +78,81 @@ class PlantSpecificationTest { assertEquals(List.of(plant1),plantRepository.findAll(spec)); } + @Test + public void testWaterDemand(){ + SearchRequest searchRequest= SearchRequest.builder().waterDemand(WaterDemand.WET).build(); + var spec= plantSpecification.withSearchCriteria(searchRequest); + assertEquals(List.of(plant2,plant3),plantRepository.findAll(spec)); + } + + @Test + public void testNutrientDemand(){ + SearchRequest searchRequest= SearchRequest.builder().nutrientDemand(NutrientDemand.LOW).build(); + var spec= plantSpecification.withSearchCriteria(searchRequest); + assertEquals(List.of(plant1,plant2),plantRepository.findAll(spec)); + } + + @Test + public void testLightingDemand(){ + SearchRequest searchRequest= SearchRequest.builder().lightingDemand(LightingDemand.HIGH).build(); + var spec= plantSpecification.withSearchCriteria(searchRequest); + assertEquals(List.of(plant1,plant2),plantRepository.findAll(spec)); + } + + @Test + public void testGroundType(){ + SearchRequest searchRequest= SearchRequest.builder().groundType(GroundType.HEAVY).build(); + var spec= plantSpecification.withSearchCriteria(searchRequest); + assertEquals(List.of(plant1),plantRepository.findAll(spec)); + } + + + @Test + public void testPlantWeek1(){ + SearchRequest searchRequest= SearchRequest.builder().plantWeekStart(2).plantWeekEnd(10).build(); + var spec= plantSpecification.withSearchCriteria(searchRequest); + assertEquals(List.of(plant1,plant2),plantRepository.findAll(spec)); + } + @Test + public void testPlantWeek2(){ + SearchRequest searchRequest= SearchRequest.builder().plantWeekStart(13).plantWeekEnd(15).build(); + var spec= plantSpecification.withSearchCriteria(searchRequest); + assertEquals(List.of(plant1,plant2),plantRepository.findAll(spec)); + } + + @Test + public void testPlantWeek3(){ + SearchRequest searchRequest= SearchRequest.builder().plantWeekStart(19).plantWeekEnd(33).build(); + var spec= plantSpecification.withSearchCriteria(searchRequest); + assertEquals(List.of(plant1,plant2),plantRepository.findAll(spec)); + } + + @Test + public void testGrowthDuration1(){ + SearchRequest searchRequest= SearchRequest.builder().growthDurationMin(11).growthDurationMax(20).build(); + var spec= plantSpecification.withSearchCriteria(searchRequest); + assertEquals(List.of(plant1,plant2,plant3),plantRepository.findAll(spec)); + } + + @Test + public void testGrowthDuration2(){ + SearchRequest searchRequest= SearchRequest.builder().growthDurationMin(20).growthDurationMax(50).build(); + var spec= plantSpecification.withSearchCriteria(searchRequest); + assertEquals(List.of(plant1),plantRepository.findAll(spec)); + } + + @Test + public void testGrowthDuration3(){ + SearchRequest searchRequest= SearchRequest.builder().growthDurationMin(1).growthDurationMax(19).build(); + var spec= plantSpecification.withSearchCriteria(searchRequest); + assertEquals(List.of(plant2,plant3),plantRepository.findAll(spec)); + } + + + + + + + } -- GitLab