Skip to content
Snippets Groups Projects
Commit 686f722c authored by Holzheu Hannah's avatar Holzheu Hannah :pig:
Browse files

added more Tests for Search Endpoint, focus on testing different searchRequest combinations #23

parent a4571a2e
No related branches found
No related tags found
1 merge request!19finished Search Endpoint
......@@ -18,50 +18,64 @@ public class PlantSpecification {
private final static Logger log = LogManager.getLogger(PlantSpecification.class);
public Specification<Plant> withSearchCriteria(SearchRequest searchRequest) {
return (root, query, criteriaBuilder) -> {
Collection<Predicate> predicatesAND = new ArrayList<>();
Collection<Predicate> plantWeekONE= new ArrayList<>();
Collection<Predicate> plantWeekTWO= new ArrayList<>();
return (root, query, criteriaBuilder) -> {
Collection<Predicate> predicatesAND = new ArrayList<>();
Collection<Predicate> plantWeekONE = new ArrayList<>();
Collection<Predicate> plantWeekTWO = new ArrayList<>();
if (StringUtils.hasText(searchRequest.getSearchTerm())) {
predicatesAND.add(criteriaBuilder.like(criteriaBuilder.lower(root.get("name")),
"%" + searchRequest.getSearchTerm().toLowerCase() + "%"));
}
if (searchRequest.getGroundType() != null) {
predicatesAND.add(criteriaBuilder.equal(root.get("groundType"), searchRequest.getGroundType()));
}
if(searchRequest.getNutrientDemand()!=null){
predicatesAND.add(criteriaBuilder.equal(root.get("nutrientDemand"),searchRequest.getNutrientDemand()));
}
if (StringUtils.hasText(searchRequest.getSearchTerm())) {
predicatesAND.add(criteriaBuilder.like(criteriaBuilder.lower(root.get("name")),
"%" + searchRequest.getSearchTerm().toLowerCase() + "%"));
}
if (searchRequest.getGroundType() != null) {
predicatesAND.add(criteriaBuilder.equal(root.get("groundType"), searchRequest.getGroundType()));
}
if (searchRequest.getNutrientDemand() != null) {
predicatesAND.add(criteriaBuilder.equal(root.get("nutrientDemand"), searchRequest.getNutrientDemand()));
}
if(searchRequest.getWaterDemand()!=null){
predicatesAND.add(criteriaBuilder.equal(root.get("waterDemand"),searchRequest.getWaterDemand()));
}
if(searchRequest.getLightingDemand()!=null){
predicatesAND.add(criteriaBuilder.equal(root.get("lightingDemand"),searchRequest.getLightingDemand()));
}
if (searchRequest.getWaterDemand() != null) {
predicatesAND.add(criteriaBuilder.equal(root.get("waterDemand"), searchRequest.getWaterDemand()));
}
if (searchRequest.getLightingDemand() != null) {
predicatesAND.add(criteriaBuilder.equal(root.get("lightingDemand"), searchRequest.getLightingDemand()));
}
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()));
plantWeekTWO.add(criteriaBuilder.lessThanOrEqualTo(root.get("plantWeekStart"), searchRequest.getPlantWeekEnd()));
plantWeekTWO.add(criteriaBuilder.greaterThanOrEqualTo(root.get("plantWeekEnd"), searchRequest.getPlantWeekEnd()));
}
if(searchRequest.getGrowthDurationMin()!=null & searchRequest.getGrowthDurationMax()!=null ){
predicatesAND.add(criteriaBuilder.greaterThanOrEqualTo(root.get("growthDuration"),searchRequest.getGrowthDurationMin()));
predicatesAND.add(criteriaBuilder.lessThanOrEqualTo(root.get("growthDuration"),searchRequest.getGrowthDurationMax()));
}
return criteriaBuilder.and(
criteriaBuilder.or(
criteriaBuilder.and(
plantWeekONE.toArray(new Predicate[0])),
criteriaBuilder.and(
plantWeekTWO.toArray(new Predicate[0]))
),
criteriaBuilder.and(
predicatesAND.toArray(new Predicate[0]))
);
};
}
if (searchRequest.getPlantWeekStart() != null && searchRequest.getPlantWeekEnd() != null) {
int start = searchRequest.getPlantWeekStart();
int end = searchRequest.getPlantWeekEnd();
if(start < end) {
plantWeekONE.add(criteriaBuilder.lessThanOrEqualTo(root.get("plantWeekStart"), start));
plantWeekONE.add(criteriaBuilder.greaterThanOrEqualTo(root.get("plantWeekEnd"), start));
plantWeekTWO.add(criteriaBuilder.lessThanOrEqualTo(root.get("plantWeekStart"), end));
plantWeekTWO.add(criteriaBuilder.greaterThanOrEqualTo(root.get("plantWeekEnd"), end));
} else {
//TODO fixen
//start: 40
//end: 10
// -> end: 62
plantWeekONE.add(criteriaBuilder.lessThanOrEqualTo(root.get("plantWeekStart"), start));
plantWeekONE.add(criteriaBuilder.greaterThanOrEqualTo(root.get("plantWeekEnd"), start));
plantWeekTWO.add(criteriaBuilder.lessThanOrEqualTo(root.get("plantWeekStart"), end));
plantWeekTWO.add(criteriaBuilder.greaterThanOrEqualTo(root.get("plantWeekEnd"), end));
}
}
if (searchRequest.getGrowthDurationMin() != null && searchRequest.getGrowthDurationMax() != null) {
predicatesAND.add(criteriaBuilder.greaterThanOrEqualTo(root.get("growthDuration"), searchRequest.getGrowthDurationMin()));
predicatesAND.add(criteriaBuilder.lessThanOrEqualTo(root.get("growthDuration"), searchRequest.getGrowthDurationMax()));
}
return criteriaBuilder.and(
criteriaBuilder.or(
criteriaBuilder.and(
plantWeekONE.toArray(new Predicate[0])),
criteriaBuilder.and(
plantWeekTWO.toArray(new Predicate[0]))
),
criteriaBuilder.and(
predicatesAND.toArray(new Predicate[0]))
);
};
}
}
......@@ -6,10 +6,7 @@ import com.fasterxml.jackson.databind.ObjectMapper;
import hdm.mi.growbros.models.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.junit.jupiter.api.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
import org.springframework.boot.test.context.SpringBootTest;
......@@ -148,11 +145,46 @@ class PlantSpecificationTest {
assertEquals(List.of(plant2,plant3),plantRepository.findAll(spec));
}
@Test
public void test_searchTerm_WaterDemand_1(){
SearchRequest searchRequest= SearchRequest.builder().searchTerm("Postelein").waterDemand(WaterDemand.WET).build();
var spec= plantSpecification.withSearchCriteria(searchRequest);
assertEquals(List.of(plant3),plantRepository.findAll(spec));
}
@Test
public void test_searchTerm_WaterDemand_2(){
SearchRequest searchRequest= SearchRequest.builder().searchTerm("Salat").waterDemand(WaterDemand.WET).build();
var spec= plantSpecification.withSearchCriteria(searchRequest);
assertEquals(List.of(),plantRepository.findAll(spec));
}
@Test
public void test_WaterDemand_NutrientDemand_1(){
SearchRequest searchRequest= SearchRequest.builder().waterDemand(WaterDemand.WET).nutrientDemand(NutrientDemand.LOW).build();
var spec= plantSpecification.withSearchCriteria(searchRequest);
assertEquals(List.of(plant2),plantRepository.findAll(spec));
}
@Test
public void test_WaterDemand_NutrientDemand_2(){
SearchRequest searchRequest= SearchRequest.builder().waterDemand(WaterDemand.WET).nutrientDemand(NutrientDemand.HIGH).build();
var spec= plantSpecification.withSearchCriteria(searchRequest);
assertEquals(List.of(plant3),plantRepository.findAll(spec));
}
@Test
public void test_WaterDemand_NutrientDemand_3(){
SearchRequest searchRequest= SearchRequest.builder().waterDemand(WaterDemand.DRY).nutrientDemand(NutrientDemand.HIGH).build();
var spec= plantSpecification.withSearchCriteria(searchRequest);
assertEquals(List.of(),plantRepository.findAll(spec));
}
@Test
public void test_WaterDemand_NutrientDemand_groundType(){
SearchRequest searchRequest= SearchRequest.builder().waterDemand(WaterDemand.DRY).nutrientDemand(NutrientDemand.LOW).groundType(GroundType.HEAVY).build();
var spec= plantSpecification.withSearchCriteria(searchRequest);
assertEquals(List.of(plant1),plantRepository.findAll(spec));
}
}
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