From 038e89882f8a12569480d9220af06bf753e2c68e Mon Sep 17 00:00:00 2001 From: Hannah Holzheu <hh062@hdm-stuttgart.de> Date: Wed, 6 Dec 2023 16:29:36 +0100 Subject: [PATCH] added Tests for Search Endpoint #23 --- .../growbros/auth/AuthenticationService.java | 2 +- .../controllers/PlantsController.java | 5 ++ .../growbros/security/ApplicationConfig.java | 2 +- .../mi/growbros/service/PlantsService.java | 4 - .../models/search/PlantSpecificationTest.java | 74 ++++++++++++++++++- 5 files changed, 78 insertions(+), 9 deletions(-) diff --git a/src/main/java/hdm/mi/growbros/auth/AuthenticationService.java b/src/main/java/hdm/mi/growbros/auth/AuthenticationService.java index acecf64..bccca6c 100644 --- a/src/main/java/hdm/mi/growbros/auth/AuthenticationService.java +++ b/src/main/java/hdm/mi/growbros/auth/AuthenticationService.java @@ -2,7 +2,7 @@ package hdm.mi.growbros.auth; import hdm.mi.growbros.models.user.Role; import hdm.mi.growbros.models.user.User; -import hdm.mi.growbros.models.user.UserRepository; +import hdm.mi.growbros.repositories.UserRepository; import hdm.mi.growbros.security.JwtService; import lombok.RequiredArgsConstructor; import org.springframework.security.authentication.AuthenticationManager; diff --git a/src/main/java/hdm/mi/growbros/controllers/PlantsController.java b/src/main/java/hdm/mi/growbros/controllers/PlantsController.java index af75593..1d20d7e 100644 --- a/src/main/java/hdm/mi/growbros/controllers/PlantsController.java +++ b/src/main/java/hdm/mi/growbros/controllers/PlantsController.java @@ -29,6 +29,11 @@ public class PlantsController { @GetMapping("/plants/randomPlants/{numberOfPlants}") public Collection<Plant> getRandomPlants(@PathVariable Integer numberOfPlants) {return plantsService.getRandomPlants(numberOfPlants);} + @GetMapping("/plants/search") + public Collection<Plant> getPlantsSearchedFor(@RequestBody @Valid SearchRequest searchRequest){ + return plantsService.getPlantsSearchedFor(searchRequest); + } + @PostMapping("/plants") public void createPlant(@RequestBody @Valid Plant plant) { plantsService.createPlant(plant); diff --git a/src/main/java/hdm/mi/growbros/security/ApplicationConfig.java b/src/main/java/hdm/mi/growbros/security/ApplicationConfig.java index 5c2d13d..87f6685 100644 --- a/src/main/java/hdm/mi/growbros/security/ApplicationConfig.java +++ b/src/main/java/hdm/mi/growbros/security/ApplicationConfig.java @@ -1,6 +1,6 @@ package hdm.mi.growbros.security; -import hdm.mi.growbros.models.user.UserRepository; +import hdm.mi.growbros.repositories.UserRepository; import lombok.RequiredArgsConstructor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; diff --git a/src/main/java/hdm/mi/growbros/service/PlantsService.java b/src/main/java/hdm/mi/growbros/service/PlantsService.java index 2fda4d7..a39a32d 100644 --- a/src/main/java/hdm/mi/growbros/service/PlantsService.java +++ b/src/main/java/hdm/mi/growbros/service/PlantsService.java @@ -66,8 +66,4 @@ public class PlantsService { log.info("Saving plant '{}' to repository.", plant.getName()); plantRepository.save(plant); } - - public List<Plant> search(String search) { - return plantRepository.findByNameIsLike(search); - } } 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 d7f0fa2..cd89458 100644 --- a/src/test/java/hdm/mi/growbros/models/search/PlantSpecificationTest.java +++ b/src/test/java/hdm/mi/growbros/models/search/PlantSpecificationTest.java @@ -1,14 +1,82 @@ 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.repositories.PlantRepository; +import lombok.RequiredArgsConstructor; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Tag; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.ActiveProfiles; + +import java.util.List; import static org.junit.jupiter.api.Assertions.*; +@SpringBootTest class PlantSpecificationTest { - private final PlantRepository plantRepository; - private final PlantSpecification plantSpecification; + @Autowired + private PlantRepository plantRepository; + @Autowired + private PlantSpecification plantSpecification; + + private static Plant plant1; + private static Plant plant2; + private static Plant plant3; + + + @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\"}]"; + + try { + final ObjectMapper objectMapper = new ObjectMapper(); + List<Plant> plants = objectMapper.readValue(jsonData, new TypeReference<>() { + }); + plant1=plants.get(0); + plant2=plants.get(1); + plant3=plants.get(2); + plantRepository.saveAll(plants); + System.out.println("plants saved"); + } catch (JacksonException e) { + e.printStackTrace(); + } + + } +@Test + public void testNameExact(){ + SearchRequest searchRequest= SearchRequest.builder().searchTerm("Etampes").build(); + var spec=plantSpecification.withSearchCriteria(searchRequest); + assertEquals(List.of(plant1),plantRepository.findAll(spec)); + } + + @Test + public void testNameIgnoreCase(){ + SearchRequest searchRequest= SearchRequest.builder().searchTerm("etampes").build(); + var spec=plantSpecification.withSearchCriteria(searchRequest); + assertEquals(List.of(plant1),plantRepository.findAll(spec)); + } + + @Test + public void testNameIgnoreCase2(){ + SearchRequest searchRequest= SearchRequest.builder().searchTerm("eTaMpEs").build(); + var spec=plantSpecification.withSearchCriteria(searchRequest); + assertEquals(List.of(plant1),plantRepository.findAll(spec)); + } + @Test + public void testNameIncomplete(){ + SearchRequest searchRequest= SearchRequest.builder().searchTerm("ampe").build(); + var spec=plantSpecification.withSearchCriteria(searchRequest); + assertEquals(List.of(plant1),plantRepository.findAll(spec)); + } -} \ No newline at end of file +} -- GitLab