|
|
|
|
@@ -25,7 +25,15 @@ import lombok.AllArgsConstructor;
|
|
|
|
|
import lombok.Data;
|
|
|
|
|
import lombok.NoArgsConstructor;
|
|
|
|
|
|
|
|
|
|
import java.util.ArrayList;
|
|
|
|
|
import java.util.Arrays;
|
|
|
|
|
import java.util.HashSet;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
import java.util.Objects;
|
|
|
|
|
import java.util.Optional;
|
|
|
|
|
import java.util.Set;
|
|
|
|
|
import java.util.stream.Collector;
|
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
|
|
import org.junit.jupiter.api.BeforeEach;
|
|
|
|
|
import org.junit.jupiter.api.Test;
|
|
|
|
|
@@ -33,6 +41,7 @@ import org.springframework.data.annotation.Id;
|
|
|
|
|
import org.springframework.data.domain.Example;
|
|
|
|
|
import org.springframework.data.domain.ExampleMatcher;
|
|
|
|
|
import org.springframework.data.relational.core.mapping.RelationalMappingContext;
|
|
|
|
|
import org.springframework.data.relational.core.query.CriteriaDefinition;
|
|
|
|
|
import org.springframework.data.relational.core.query.Query;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
@@ -89,10 +98,9 @@ public class RelationalExampleMapperTests {
|
|
|
|
|
Example<Person> example = Example.of(person);
|
|
|
|
|
|
|
|
|
|
Query query = exampleMapper.getMappedExample(example);
|
|
|
|
|
|
|
|
|
|
assertThat(query.getCriteria()) //
|
|
|
|
|
.map(Object::toString) //
|
|
|
|
|
.hasValue("(firstname = 'Frodo') AND (lastname = 'Baggins')");
|
|
|
|
|
String actual = query.getCriteria().map(Object::toString).get();
|
|
|
|
|
String expected = "(firstname = 'Frodo') AND (lastname = 'Baggins')";
|
|
|
|
|
assertThat(compareStrWithFlakiness(expected, actual, "AND")).isTrue();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test // GH-929
|
|
|
|
|
@@ -122,10 +130,9 @@ public class RelationalExampleMapperTests {
|
|
|
|
|
Example<Person> example = Example.of(person, matcher);
|
|
|
|
|
|
|
|
|
|
Query query = exampleMapper.getMappedExample(example);
|
|
|
|
|
|
|
|
|
|
assertThat(query.getCriteria()) //
|
|
|
|
|
.map(Object::toString) //
|
|
|
|
|
.hasValue("(firstname IS NULL OR firstname = 'Bilbo') AND (lastname IS NULL OR lastname = 'Baggins')");
|
|
|
|
|
String actual = query.getCriteria().map(Object::toString).get();
|
|
|
|
|
String expected = "(firstname IS NULL OR firstname = 'Bilbo') AND (lastname IS NULL OR lastname = 'Baggins')";
|
|
|
|
|
assertThat(compareStrWithFlakiness(expected, actual, "AND")).isTrue();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test // GH-929
|
|
|
|
|
@@ -366,10 +373,9 @@ public class RelationalExampleMapperTests {
|
|
|
|
|
Example<Person> example = Example.of(person, matcher);
|
|
|
|
|
|
|
|
|
|
Query query = exampleMapper.getMappedExample(example);
|
|
|
|
|
|
|
|
|
|
assertThat(query.getCriteria()) //
|
|
|
|
|
.map(Object::toString) //
|
|
|
|
|
.hasValue("(firstname = 'Frodo') OR (lastname = 'Baggins')");
|
|
|
|
|
String actual = query.getCriteria().map(Object::toString).get();
|
|
|
|
|
String expected = "(firstname = 'Frodo') OR (lastname = 'Baggins')";
|
|
|
|
|
assertThat(compareStrWithFlakiness(expected, actual, "OR")).isTrue();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test // GH-929
|
|
|
|
|
@@ -382,10 +388,9 @@ public class RelationalExampleMapperTests {
|
|
|
|
|
Example<Person> example = Example.of(person);
|
|
|
|
|
|
|
|
|
|
Query query = exampleMapper.getMappedExample(example);
|
|
|
|
|
|
|
|
|
|
assertThat(query.getCriteria()) //
|
|
|
|
|
.map(Object::toString) //
|
|
|
|
|
.hasValue("(firstname = 'Frodo') AND (secret = 'I have the ring!')");
|
|
|
|
|
String actual = query.getCriteria().map(Object::toString).get();
|
|
|
|
|
String expected = "(firstname = 'Frodo') AND (secret = 'I have the ring!')";
|
|
|
|
|
assertThat(compareStrWithFlakiness(expected, actual, "AND")).isTrue();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test // GH-929
|
|
|
|
|
@@ -413,11 +418,19 @@ public class RelationalExampleMapperTests {
|
|
|
|
|
Example<Person> example = Example.of(person, matcher);
|
|
|
|
|
|
|
|
|
|
Query query = exampleMapper.getMappedExample(example);
|
|
|
|
|
String actual = query.getCriteria().map(Object::toString).get();
|
|
|
|
|
String expected = "(firstname = 'FRODO') AND (lastname = 'baggins') AND (secret = 'I have the ring!')";
|
|
|
|
|
assertThat(compareStrWithFlakiness(expected, actual, "AND")).isTrue();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
assertThat(query.getCriteria()) //
|
|
|
|
|
.map(Object::toString) //
|
|
|
|
|
.hasValue("(firstname = 'FRODO') AND (lastname = 'baggins') AND (secret = 'I have the ring!')");
|
|
|
|
|
|
|
|
|
|
private boolean compareStrWithFlakiness(String expected, String actual, String regex) {
|
|
|
|
|
String[] flakyParts = expected.split(regex);
|
|
|
|
|
for (String part : flakyParts) {
|
|
|
|
|
if (!actual.contains(part)) {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Data
|
|
|
|
|
|