feat: 增加query查询测试
This commit is contained in:
@@ -50,10 +50,10 @@ public class Query {
|
||||
private Map<String, Object> notEqual;
|
||||
private Map<String, String> like;
|
||||
private Map<String, String> notLike;
|
||||
private Map<String, Comparable<Object>> great;
|
||||
private Map<String, Comparable<Object>> less;
|
||||
private Map<String, Comparable<Object>> greatEqual;
|
||||
private Map<String, Comparable<Object>> lessEqual;
|
||||
private Map<String, Object> great;
|
||||
private Map<String, Object> less;
|
||||
private Map<String, Object> greatEqual;
|
||||
private Map<String, Object> lessEqual;
|
||||
private Map<String, List<Object>> in;
|
||||
private Map<String, List<Object>> notIn;
|
||||
private Map<String, Between> between;
|
||||
@@ -123,35 +123,35 @@ public class Query {
|
||||
this.notLike = notLike;
|
||||
}
|
||||
|
||||
public Map<String, Comparable<Object>> getGreat() {
|
||||
public Map<String, Object> getGreat() {
|
||||
return great;
|
||||
}
|
||||
|
||||
public void setGreat(Map<String, Comparable<Object>> great) {
|
||||
public void setGreat(Map<String, Object> great) {
|
||||
this.great = great;
|
||||
}
|
||||
|
||||
public Map<String, Comparable<Object>> getLess() {
|
||||
public Map<String, Object> getLess() {
|
||||
return less;
|
||||
}
|
||||
|
||||
public void setLess(Map<String, Comparable<Object>> less) {
|
||||
public void setLess(Map<String, Object> less) {
|
||||
this.less = less;
|
||||
}
|
||||
|
||||
public Map<String, Comparable<Object>> getGreatEqual() {
|
||||
public Map<String, Object> getGreatEqual() {
|
||||
return greatEqual;
|
||||
}
|
||||
|
||||
public void setGreatEqual(Map<String, Comparable<Object>> greatEqual) {
|
||||
public void setGreatEqual(Map<String, Object> greatEqual) {
|
||||
this.greatEqual = greatEqual;
|
||||
}
|
||||
|
||||
public Map<String, Comparable<Object>> getLessEqual() {
|
||||
public Map<String, Object> getLessEqual() {
|
||||
return lessEqual;
|
||||
}
|
||||
|
||||
public void setLessEqual(Map<String, Comparable<Object>> lessEqual) {
|
||||
public void setLessEqual(Map<String, Object> lessEqual) {
|
||||
this.lessEqual = lessEqual;
|
||||
}
|
||||
|
||||
|
||||
@@ -37,7 +37,7 @@ public abstract class SimpleServiceSupport<ENTITY extends SimpleEntity> implemen
|
||||
if (ObjectHelper.isNotNull(entity.getId())) {
|
||||
var id = entity.getId();
|
||||
var targetEntity = repository.findById(entity.getId()).orElseThrow(() -> new IdNotFoundException(id));
|
||||
BeanUtils.copyProperties(entity, targetEntity, "id", "created_time", "modified_time");
|
||||
BeanUtils.copyProperties(entity, targetEntity, "id", "createdTime", "modifiedTime");
|
||||
entity = targetEntity;
|
||||
}
|
||||
entity = repository.save(entity);
|
||||
@@ -107,6 +107,7 @@ public abstract class SimpleServiceSupport<ENTITY extends SimpleEntity> implemen
|
||||
return value;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
protected List<Predicate> queryPredicates(Query.Queryable queryable, Root<ENTITY> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
|
||||
var predicates = new ArrayList<Predicate>();
|
||||
if (ObjectHelper.isNull(queryable)) {
|
||||
@@ -116,7 +117,7 @@ public abstract class SimpleServiceSupport<ENTITY extends SimpleEntity> implemen
|
||||
queryable.getNullEqual().forEach(column -> predicates.add(builder.isNull(column(root, column))));
|
||||
}
|
||||
if (ObjectHelper.isNotEmpty(queryable.getNotNullEqual())) {
|
||||
queryable.getNotNullEqual().forEach(column -> predicates.add(builder.isNull(column(root, column))));
|
||||
queryable.getNotNullEqual().forEach(column -> predicates.add(builder.isNotNull(column(root, column))));
|
||||
}
|
||||
if (ObjectHelper.isNotEmpty(queryable.getEmpty())) {
|
||||
queryable.getEmpty().forEach(column -> predicates.add(builder.isEmpty(column(root, column))));
|
||||
@@ -143,16 +144,16 @@ public abstract class SimpleServiceSupport<ENTITY extends SimpleEntity> implemen
|
||||
queryable.getNotLike().forEach((column, value) -> predicates.add(builder.notLike(column(root, column), value)));
|
||||
}
|
||||
if (ObjectHelper.isNotEmpty(queryable.getGreat())) {
|
||||
queryable.getGreat().forEach((column, value) -> predicates.add(builder.greaterThan(column(root, column), value)));
|
||||
queryable.getGreat().forEach((column, value) -> predicates.add(builder.greaterThan(column(root, column), (Comparable<Object>) value)));
|
||||
}
|
||||
if (ObjectHelper.isNotEmpty(queryable.getLess())) {
|
||||
queryable.getLess().forEach((column, value) -> predicates.add(builder.lessThan(column(root, column), value)));
|
||||
queryable.getLess().forEach((column, value) -> predicates.add(builder.lessThan(column(root, column), (Comparable<Object>) value)));
|
||||
}
|
||||
if (ObjectHelper.isNotEmpty(queryable.getGreatEqual())) {
|
||||
queryable.getGreatEqual().forEach((column, value) -> predicates.add(builder.greaterThanOrEqualTo(column(root, column), value)));
|
||||
queryable.getGreatEqual().forEach((column, value) -> predicates.add(builder.greaterThanOrEqualTo(column(root, column), (Comparable<Object>) value)));
|
||||
}
|
||||
if (ObjectHelper.isNotEmpty(queryable.getLessEqual())) {
|
||||
queryable.getLessEqual().forEach((column, value) -> predicates.add(builder.lessThanOrEqualTo(column(root, column), value)));
|
||||
queryable.getLessEqual().forEach((column, value) -> predicates.add(builder.lessThanOrEqualTo(column(root, column), (Comparable<Object>) value)));
|
||||
}
|
||||
if (ObjectHelper.isNotEmpty(queryable.getIn())) {
|
||||
queryable.getIn().forEach((column, value) -> predicates.add(builder.in(column(root, column)).value(value)));
|
||||
@@ -175,12 +176,12 @@ public abstract class SimpleServiceSupport<ENTITY extends SimpleEntity> implemen
|
||||
|
||||
@Override
|
||||
public Page<ENTITY> list(Query listQuery) {
|
||||
var pageRequest = PageRequest.of(DEFAULT_PAGE_INDEX - 1, DEFAULT_PAGE_SIZE, Sort.by("created_time").descending());
|
||||
var pageRequest = PageRequest.of(DEFAULT_PAGE_INDEX - 1, DEFAULT_PAGE_SIZE, Sort.by("createdTime").descending());
|
||||
if (ObjectHelper.isNotNull(listQuery.getPage())) {
|
||||
pageRequest = PageRequest.of(
|
||||
ObjectHelper.defaultIfNull(listQuery.getPage().getIndex(), DEFAULT_PAGE_INDEX) - 1,
|
||||
ObjectHelper.defaultIfNull(listQuery.getPage().getSize(), DEFAULT_PAGE_SIZE),
|
||||
Sort.by("create_time").descending()
|
||||
Sort.by("createdTime").descending()
|
||||
);
|
||||
}
|
||||
return repository.findAll(
|
||||
|
||||
@@ -37,15 +37,63 @@ public class TestApplication {
|
||||
@EventListener(ApplicationReadyEvent.class)
|
||||
public void runTests() throws JsonProcessingException {
|
||||
// 增
|
||||
var cid1 = saveItem("company", "{\"name\": \"Apple\"}").get("data").asLong();
|
||||
var cid2 = saveItem("company", "{\"name\": \"Banana\"}").get("data").asLong();
|
||||
var cid3 = saveItem("company", "{\"name\": \"Cheery\"}").get("data").asLong();
|
||||
var cid1 = saveItem("company", "{\"name\": \"Apple\",\"members\": 10}").get("data").asLong();
|
||||
var cid2 = saveItem("company", "{\"name\": \"Banana\",\"members\": 20}").get("data").asLong();
|
||||
var cid3 = saveItem("company", "{\"name\": \"Cheery\",\"members\": 20}").get("data").asLong();
|
||||
|
||||
// 查
|
||||
var companies = listItems("company");
|
||||
Assert.isTrue(companies.at("/data/items").size() == 3, "数量错误");
|
||||
Assert.isTrue(companies.at("/data/total").asLong() == 3, "返回数量错误");
|
||||
|
||||
// language=JSON
|
||||
var companies2 = listItems("company", "{\n" +
|
||||
" \"page\": {\n" +
|
||||
" \"index\": 1,\n" +
|
||||
" \"size\": 2\n" +
|
||||
" }\n" +
|
||||
"}");
|
||||
Assert.isTrue(companies2.at("/data/items").size() == 2, "数量错误");
|
||||
Assert.isTrue(companies2.at("/data/total").asLong() == 3, "返回数量错误");
|
||||
// language=JSON
|
||||
var companies3 = listItems("company", "{\n" +
|
||||
" \"query\": {\n" +
|
||||
" \"notNullEqual\": [\n" +
|
||||
" \"name\"\n" +
|
||||
" ],\n" +
|
||||
" \"equal\": {\n" +
|
||||
" \"name\": \"Apple\"\n" +
|
||||
" },\n" +
|
||||
" \"like\": {\n" +
|
||||
" \"name\": \"Appl%\"\n" +
|
||||
" },\n" +
|
||||
" \"less\": {\n" +
|
||||
" \"members\": 50\n" +
|
||||
" },\n" +
|
||||
" \"greatEqual\": {\n" +
|
||||
" \"members\": 0\n" +
|
||||
" },\n" +
|
||||
" \"in\": {\n" +
|
||||
" \"name\": [\n" +
|
||||
" \"Apple\",\n" +
|
||||
" \"Banana\"\n" +
|
||||
" ]\n" +
|
||||
" },\n" +
|
||||
" \"between\": {\n" +
|
||||
" \"members\": {\n" +
|
||||
" \"start\": 0,\n" +
|
||||
" \"end\": 50\n" +
|
||||
" }\n" +
|
||||
" }\n" +
|
||||
" },\n" +
|
||||
" \"page\": {\n" +
|
||||
" \"index\": 1,\n" +
|
||||
" \"size\": 2\n" +
|
||||
" }\n" +
|
||||
"}");
|
||||
Assert.isTrue(companies3.at("/data/items").size() == 1, "数量错误");
|
||||
Assert.isTrue(companies3.at("/data/total").asLong() == 1, "返回数量错误");
|
||||
|
||||
var company1 = detailItem("company", cid1);
|
||||
Assert.isTrue(cid1 == company1.at("/data/id").asLong(), "id错误");
|
||||
Assert.isTrue("Apple".equals(company1.at("/data/name").asText()), "name错误");
|
||||
@@ -91,6 +139,17 @@ public class TestApplication {
|
||||
return MAPPER.readTree(response.getBody());
|
||||
}
|
||||
|
||||
private JsonNode listItems(String path, String query) throws JsonProcessingException {
|
||||
var response = REST_CLIENT.postForEntity(
|
||||
"%s/%s/list".formatted(BASE_URL, path),
|
||||
new HttpEntity<>(query, headers()),
|
||||
String.class
|
||||
);
|
||||
Assert.isTrue(response.getStatusCode().is2xxSuccessful(), "请求失败");
|
||||
Assert.notNull(response.getBody(), "请求失败");
|
||||
return MAPPER.readTree(response.getBody());
|
||||
}
|
||||
|
||||
private JsonNode detailItem(String path, Long id) throws JsonProcessingException {
|
||||
var response = REST_CLIENT.getForEntity(
|
||||
"%s/%s/detail/%d".formatted(BASE_URL, path, id),
|
||||
|
||||
@@ -23,6 +23,7 @@ public class CompanyController extends SimpleControllerSupport<Company, CompanyC
|
||||
var company = new Company();
|
||||
company.setId(item.getId());
|
||||
company.setName(item.getName());
|
||||
company.setMembers(item.getMembers());
|
||||
return company;
|
||||
};
|
||||
}
|
||||
@@ -33,6 +34,7 @@ public class CompanyController extends SimpleControllerSupport<Company, CompanyC
|
||||
var item = new ListItem();
|
||||
item.setId(company.getId());
|
||||
item.setName(company.getName());
|
||||
item.setMembers(company.getMembers());
|
||||
return item;
|
||||
};
|
||||
}
|
||||
@@ -43,6 +45,7 @@ public class CompanyController extends SimpleControllerSupport<Company, CompanyC
|
||||
var item = new DetailItem();
|
||||
item.setId(company.getId());
|
||||
item.setName(company.getName());
|
||||
item.setMembers(company.getMembers());
|
||||
item.setCreatedTime(company.getCreatedTime());
|
||||
item.setModifiedTime(company.getModifiedTime());
|
||||
return item;
|
||||
@@ -52,6 +55,7 @@ public class CompanyController extends SimpleControllerSupport<Company, CompanyC
|
||||
public static class SaveItem {
|
||||
private Long id;
|
||||
private String name;
|
||||
private Integer members;
|
||||
|
||||
public Long getId() {
|
||||
return id;
|
||||
@@ -69,11 +73,20 @@ public class CompanyController extends SimpleControllerSupport<Company, CompanyC
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public Integer getMembers() {
|
||||
return members;
|
||||
}
|
||||
|
||||
public void setMembers(Integer members) {
|
||||
this.members = members;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "SaveItem{" +
|
||||
"id=" + id +
|
||||
", name='" + name + '\'' +
|
||||
", members=" + members +
|
||||
'}';
|
||||
}
|
||||
}
|
||||
@@ -81,6 +94,7 @@ public class CompanyController extends SimpleControllerSupport<Company, CompanyC
|
||||
public static class ListItem {
|
||||
private Long id;
|
||||
private String name;
|
||||
private Integer members;
|
||||
|
||||
public Long getId() {
|
||||
return id;
|
||||
@@ -98,11 +112,20 @@ public class CompanyController extends SimpleControllerSupport<Company, CompanyC
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public Integer getMembers() {
|
||||
return members;
|
||||
}
|
||||
|
||||
public void setMembers(Integer members) {
|
||||
this.members = members;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "ListItem{" +
|
||||
"id=" + id +
|
||||
", name='" + name + '\'' +
|
||||
", members=" + members +
|
||||
'}';
|
||||
}
|
||||
}
|
||||
@@ -110,6 +133,7 @@ public class CompanyController extends SimpleControllerSupport<Company, CompanyC
|
||||
public static class DetailItem {
|
||||
private Long id;
|
||||
private String name;
|
||||
private Integer members;
|
||||
private LocalDateTime createdTime;
|
||||
private LocalDateTime modifiedTime;
|
||||
|
||||
@@ -129,6 +153,14 @@ public class CompanyController extends SimpleControllerSupport<Company, CompanyC
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public Integer getMembers() {
|
||||
return members;
|
||||
}
|
||||
|
||||
public void setMembers(Integer members) {
|
||||
this.members = members;
|
||||
}
|
||||
|
||||
public LocalDateTime getCreatedTime() {
|
||||
return createdTime;
|
||||
}
|
||||
@@ -150,6 +182,7 @@ public class CompanyController extends SimpleControllerSupport<Company, CompanyC
|
||||
return "DetailItem{" +
|
||||
"id=" + id +
|
||||
", name='" + name + '\'' +
|
||||
", members=" + members +
|
||||
", createdTime=" + createdTime +
|
||||
", modifiedTime=" + modifiedTime +
|
||||
'}';
|
||||
|
||||
@@ -13,6 +13,7 @@ import org.springframework.data.jpa.domain.support.AuditingEntityListener;
|
||||
@Comment("企业")
|
||||
public class Company extends SimpleEntity {
|
||||
private String name;
|
||||
private Integer members;
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
@@ -22,10 +23,19 @@ public class Company extends SimpleEntity {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public Integer getMembers() {
|
||||
return members;
|
||||
}
|
||||
|
||||
public void setMembers(Integer members) {
|
||||
this.members = members;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Company{" +
|
||||
"name='" + name + '\'' +
|
||||
", members=" + members +
|
||||
"} " + super.toString();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user