Skip to content
Snippets Groups Projects
Commit 038e8988 authored by Holzheu Hannah's avatar Holzheu Hannah
Browse files

added Tests for Search Endpoint #23

parent 8df71a2f
No related branches found
No related tags found
1 merge request!19finished Search Endpoint
......@@ -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;
......
......@@ -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);
......
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;
......
......@@ -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);
}
}
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
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment