Skip to content

Commit f04a800

Browse files
committed
fix jpa querydsl test
1 parent 05e2e58 commit f04a800

File tree

8 files changed

+158
-100
lines changed

8 files changed

+158
-100
lines changed

spring-security-rest-full/src/main/java/org/baeldung/persistence/dao/MyUserPrdicates.java

Lines changed: 0 additions & 23 deletions
This file was deleted.
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
package org.baeldung.persistence.dao;
2+
3+
import org.baeldung.persistence.model.MyUser;
4+
import org.baeldung.web.util.SearchCriteria;
5+
6+
import com.mysema.query.types.expr.BooleanExpression;
7+
import com.mysema.query.types.path.NumberPath;
8+
import com.mysema.query.types.path.PathBuilder;
9+
import com.mysema.query.types.path.StringPath;
10+
11+
public class MyUserPredicate {
12+
13+
private SearchCriteria criteria;
14+
15+
public MyUserPredicate() {
16+
17+
}
18+
19+
public MyUserPredicate(final SearchCriteria criteria) {
20+
this.criteria = criteria;
21+
}
22+
23+
public BooleanExpression getPredicate() {
24+
final PathBuilder<MyUser> entityPath = new PathBuilder<MyUser>(MyUser.class, "myUser");
25+
26+
if (isNumeric(criteria.getValue().toString())) {
27+
System.out.println("Nuumber");
28+
final NumberPath<Integer> path = entityPath.getNumber(criteria.getKey(), Integer.class);
29+
final int value = Integer.parseInt(criteria.getValue().toString());
30+
if (criteria.getOperation().equalsIgnoreCase(":")) {
31+
return path.eq(value);
32+
} else if (criteria.getOperation().equalsIgnoreCase(">")) {
33+
return path.goe(value);
34+
} else if (criteria.getOperation().equalsIgnoreCase("<")) {
35+
return path.loe(value);
36+
}
37+
} else {
38+
final StringPath path = entityPath.getString(criteria.getKey());
39+
if (criteria.getOperation().equalsIgnoreCase(":")) {
40+
return path.containsIgnoreCase(criteria.getValue().toString());
41+
}
42+
}
43+
return null;
44+
}
45+
46+
public SearchCriteria getCriteria() {
47+
return criteria;
48+
}
49+
50+
public void setCriteria(final SearchCriteria criteria) {
51+
this.criteria = criteria;
52+
}
53+
54+
public static boolean isNumeric(final String str) {
55+
try {
56+
Integer.parseInt(str);
57+
} catch (final NumberFormatException e) {
58+
return false;
59+
}
60+
return true;
61+
}
62+
}

spring-security-rest-full/src/main/java/org/baeldung/persistence/dao/MyUserPredicatesBuilder.java

Lines changed: 10 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,25 @@
11
package org.baeldung.persistence.dao;
22

3-
import static org.baeldung.persistence.dao.MyUserPrdicates.ageIsGreaterThan;
4-
import static org.baeldung.persistence.dao.MyUserPrdicates.firstNameIsLike;
5-
import static org.baeldung.persistence.dao.MyUserPrdicates.lastNameIsLike;
6-
73
import java.util.ArrayList;
84
import java.util.List;
9-
import java.util.Map;
5+
6+
import org.baeldung.web.util.SearchCriteria;
107

118
import com.mysema.query.types.expr.BooleanExpression;
129

1310
public class MyUserPredicatesBuilder {
14-
public static BooleanExpression buildUserPredicates(final Map<String, Object> params) {
11+
public static BooleanExpression buildUserPredicates(final List<SearchCriteria> params) {
1512
if (params.size() == 0)
1613
return null;
1714

1815
final List<BooleanExpression> predicates = new ArrayList<BooleanExpression>();
19-
String key, value;
20-
21-
for (final Map.Entry<String, Object> param : params.entrySet()) {
22-
key = param.getKey();
23-
value = param.getValue().toString();
24-
if (key.equalsIgnoreCase("age")) {
25-
predicates.add(ageIsGreaterThan(Integer.parseInt(value)));
26-
} else if (key.equalsIgnoreCase("firstName")) {
27-
predicates.add(firstNameIsLike(value));
28-
} else if (key.equalsIgnoreCase("lastName")) {
29-
predicates.add(lastNameIsLike(value));
16+
MyUserPredicate predicate;
17+
18+
for (final SearchCriteria param : params) {
19+
predicate = new MyUserPredicate(param);
20+
final BooleanExpression exp = predicate.getPredicate();
21+
if (exp != null) {
22+
predicates.add(exp);
3023
}
3124
}
3225

spring-security-rest-full/src/main/java/org/baeldung/persistence/service/impl/MyUserService.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
package org.baeldung.persistence.service.impl;
22

3-
import java.util.Map;
3+
import java.util.List;
44

55
import org.baeldung.persistence.dao.MyUserPredicatesBuilder;
66
import org.baeldung.persistence.dao.MyUserRepository;
77
import org.baeldung.persistence.model.MyUser;
8+
import org.baeldung.web.util.SearchCriteria;
89
import org.springframework.beans.factory.annotation.Autowired;
910
import org.springframework.stereotype.Service;
1011
import org.springframework.transaction.annotation.Transactional;
@@ -22,7 +23,7 @@ public MyUserService() {
2223
super();
2324
}
2425

25-
public Iterable<MyUser> search(final Map<String, Object> params) {
26+
public Iterable<MyUser> search(final List<SearchCriteria> params) {
2627
final BooleanExpression predicate = MyUserPredicatesBuilder.buildUserPredicates(params);
2728
if (predicate == null)
2829
return repository.findAll();

spring-security-rest-full/src/main/java/org/baeldung/web/controller/UserController.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
package org.baeldung.web.controller;
22

33
import java.util.ArrayList;
4-
import java.util.HashMap;
54
import java.util.List;
6-
import java.util.Map;
75
import java.util.regex.Matcher;
86
import java.util.regex.Pattern;
97

@@ -65,13 +63,13 @@ public List<User> findAllBySpecification(@RequestParam(value = "search", require
6563
@RequestMapping(method = RequestMethod.GET, value = "/myusers")
6664
@ResponseBody
6765
public Iterable<MyUser> findAllByQuerydsl(@RequestParam(value = "search", required = false) final String search) {
68-
final Map<String, Object> params = new HashMap<String, Object>();
66+
final List<SearchCriteria> params = new ArrayList<SearchCriteria>();
6967

7068
if (search != null) {
71-
final Pattern pattern = Pattern.compile("(\\w+?):(\\w+?),");
69+
final Pattern pattern = Pattern.compile("(\\w+?)(:|<|>)(\\w+?),");
7270
final Matcher matcher = pattern.matcher(search + ",");
7371
while (matcher.find()) {
74-
params.put(matcher.group(1), matcher.group(2));
72+
params.add(new SearchCriteria(matcher.group(1), matcher.group(2), matcher.group(3)));
7573
}
7674
}
7775
return myService.search(params);

spring-security-rest-full/src/test/java/org/baeldung/persistence/query/JPACriteriaQueryTest.java

Lines changed: 22 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
package org.baeldung.persistence.query;
22

3-
import static org.junit.Assert.assertEquals;
3+
import static org.hamcrest.MatcherAssert.assertThat;
4+
import static org.hamcrest.collection.IsIn.isIn;
5+
import static org.hamcrest.core.IsNot.not;
46

57
import java.util.ArrayList;
68
import java.util.List;
79

10+
import org.baeldung.persistence.dao.IUserDAO;
811
import org.baeldung.persistence.model.User;
9-
import org.baeldung.persistence.service.impl.UserService;
1012
import org.baeldung.spring.PersistenceConfig;
1113
import org.baeldung.web.util.SearchCriteria;
1214
import org.junit.Before;
@@ -26,7 +28,7 @@
2628
public class JPACriteriaQueryTest {
2729

2830
@Autowired
29-
private UserService userService;
31+
private IUserDAO userApi;
3032

3133
private User userJohn;
3234

@@ -39,14 +41,14 @@ public void init() {
3941
userJohn.setLastName("Doe");
4042
userJohn.setEmail("[email protected]");
4143
userJohn.setAge(22);
42-
userService.saveUser(userJohn);
44+
userApi.save(userJohn);
4345

4446
userTom = new User();
4547
userTom.setFirstName("Tom");
4648
userTom.setLastName("Doe");
4749
userTom.setEmail("[email protected]");
4850
userTom.setAge(26);
49-
userService.saveUser(userTom);
51+
userApi.save(userTom);
5052
}
5153

5254
@Test
@@ -55,19 +57,20 @@ public void givenFirstAndLastName_whenGettingListOfUsers_thenCorrect() {
5557
params.add(new SearchCriteria("firstName", ":", "John"));
5658
params.add(new SearchCriteria("lastName", ":", "Doe"));
5759

58-
final List<User> result = userService.searchUser(params);
60+
final List<User> results = userApi.searchUser(params);
5961

60-
assertEquals(1, result.size());
61-
assertEquals(userJohn.getEmail(), result.get(0).getEmail());
62+
assertThat(userJohn, isIn(results));
63+
assertThat(userTom, not(isIn(results)));
6264
}
6365

6466
@Test
6567
public void givenLast_whenGettingListOfUsers_thenCorrect() {
6668
final List<SearchCriteria> params = new ArrayList<SearchCriteria>();
6769
params.add(new SearchCriteria("lastName", ":", "Doe"));
6870

69-
final List<User> result = userService.searchUser(params);
70-
assertEquals(2, result.size());
71+
final List<User> results = userApi.searchUser(params);
72+
assertThat(userJohn, isIn(results));
73+
assertThat(userTom, isIn(results));
7174
}
7275

7376
@Test
@@ -76,10 +79,10 @@ public void givenLastAndAge_whenGettingListOfUsers_thenCorrect() {
7679
params.add(new SearchCriteria("lastName", ":", "Doe"));
7780
params.add(new SearchCriteria("age", ">", "25"));
7881

79-
final List<User> result = userService.searchUser(params);
82+
final List<User> results = userApi.searchUser(params);
8083

81-
assertEquals(1, result.size());
82-
assertEquals(userTom.getEmail(), result.get(0).getEmail());
84+
assertThat(userTom, isIn(results));
85+
assertThat(userJohn, not(isIn(results)));
8386
}
8487

8588
@Test
@@ -88,18 +91,19 @@ public void givenWrongFirstAndLast_whenGettingListOfUsers_thenCorrect() {
8891
params.add(new SearchCriteria("firstName", ":", "Adam"));
8992
params.add(new SearchCriteria("lastName", ":", "Fox"));
9093

91-
final List<User> result = userService.searchUser(params);
92-
assertEquals(0, result.size());
94+
final List<User> results = userApi.searchUser(params);
95+
assertThat(userJohn, not(isIn(results)));
96+
assertThat(userTom, not(isIn(results)));
9397
}
9498

9599
@Test
96100
public void givenPartialFirst_whenGettingListOfUsers_thenCorrect() {
97101
final List<SearchCriteria> params = new ArrayList<SearchCriteria>();
98102
params.add(new SearchCriteria("firstName", ":", "jo"));
99103

100-
final List<User> result = userService.searchUser(params);
104+
final List<User> results = userApi.searchUser(params);
101105

102-
assertEquals(1, result.size());
103-
assertEquals(userJohn.getEmail(), result.get(0).getEmail());
106+
assertThat(userJohn, isIn(results));
107+
assertThat(userTom, not(isIn(results)));
104108
}
105109
}

0 commit comments

Comments
 (0)