This is an automated email from the ASF dual-hosted git repository. taybou pushed a commit to branch UNOMI-424-build-query in repository https://gitbox.apache.org/repos/asf/unomi.git
commit 24036e01f461a3e559675bd06d881c28162947c8 Author: Taybou <[email protected]> AuthorDate: Thu Feb 4 12:52:41 2021 +0100 UNOMI-424 Fix buildQuery for BooleanConditionESQueryBuilder add and fix IT --- .../apache/unomi/itests/ConditionEvaluatorIT.java | 105 ++++++++++++--------- .../conditions/BooleanConditionESQueryBuilder.java | 6 +- 2 files changed, 59 insertions(+), 52 deletions(-) diff --git a/itests/src/test/java/org/apache/unomi/itests/ConditionEvaluatorIT.java b/itests/src/test/java/org/apache/unomi/itests/ConditionEvaluatorIT.java index 5a2421e..a1f93a6 100644 --- a/itests/src/test/java/org/apache/unomi/itests/ConditionEvaluatorIT.java +++ b/itests/src/test/java/org/apache/unomi/itests/ConditionEvaluatorIT.java @@ -43,7 +43,6 @@ import static org.junit.Assert.*; @RunWith(PaxExam.class) @ExamReactorStrategy(PerSuite.class) public class ConditionEvaluatorIT extends BaseIT { - protected ConditionBuilder builder; protected Item item; protected Date lastVisit; @@ -61,8 +60,9 @@ public class ConditionEvaluatorIT extends BaseIT { public void setUp() { assertNotNull("Definition service should be available", definitionsService); assertNotNull("Persistence service should be available", persistenceService); + builder = new ConditionBuilder(definitionsService); - lastVisit = new GregorianCalendar(2015,1,1,20,30,0).getTime(); + lastVisit = new GregorianCalendar(2015, Calendar.FEBRUARY,1,20,30,0).getTime(); Profile profile = new Profile("profile-" + UUID.randomUUID().toString()); profile.setProperty("firstVisit", lastVisit); @@ -70,37 +70,34 @@ public class ConditionEvaluatorIT extends BaseIT { profile.setProperty("gender", "female"); profile.setProperty("lastVisit", lastVisit); profile.setProperty("randomStats", 0.15); - profile.setSegments(new HashSet<String>(Arrays.asList("s1", "s2", "s3"))); - this.item = profile; - builder = new ConditionBuilder(definitionsService); - + profile.setSegments(new HashSet<>(Arrays.asList("s1", "s2", "s3"))); + item = profile; } @Test public void testCompound() { // test AND assertTrue(eval(builder.and(builder.profileProperty("properties.gender").equalTo("female"), - builder.profileProperty("properties.age").equalTo(Integer.valueOf(30))).build())); - //assertFalse(eval(builder.and(builder.profileProperty("properties.gender").equalTo("male"), - // builder.profileProperty("properties.age").equalTo(Integer.valueOf(30))).build())); - //assertFalse(eval(builder.and(builder.profileProperty("properties.gender").equalTo("female"), - // builder.profileProperty("properties.age").equalTo(Integer.valueOf(40))).build())); + builder.profileProperty("properties.age").equalTo(30)).build())); + assertFalse(eval(builder.and(builder.profileProperty("properties.gender").equalTo("male"), + builder.profileProperty("properties.age").equalTo(30)).build())); + assertFalse(eval(builder.and(builder.profileProperty("properties.gender").equalTo("female"), + builder.profileProperty("properties.age").equalTo(40)).build())); // test OR assertTrue(eval(builder.or(builder.profileProperty("properties.gender").equalTo("female"), - builder.profileProperty("properties.age").equalTo(Integer.valueOf(40))).build())); + builder.profileProperty("properties.age").equalTo(40)).build())); assertTrue(eval(builder.or(builder.profileProperty("properties.gender").equalTo("male"), - builder.profileProperty("properties.age").equalTo(Integer.valueOf(30))).build())); - //assertFalse(eval(builder.or(builder.profileProperty("properties.gender").equalTo("male"), - // builder.profileProperty("properties.age").equalTo(Integer.valueOf(40))).build())); + builder.profileProperty("properties.age").equalTo(30)).build())); + assertFalse(eval(builder.or(builder.profileProperty("properties.gender").equalTo("male"), + builder.profileProperty("properties.age").equalTo(40)).build())); // test NOT assertTrue(eval(builder.not(builder.profileProperty("properties.gender").equalTo("male")).build())); - //assertFalse(eval(builder.not(builder.profileProperty("properties.age").equalTo(Integer.valueOf(30))).build())); - + assertFalse(eval(builder.not(builder.profileProperty("properties.age").equalTo(30)).build())); } - //@Test + @Test public void testDate() { assertTrue(eval(builder.profileProperty("properties.lastVisit").equalTo(lastVisit).build())); assertTrue(eval(builder.profileProperty("properties.lastVisit") @@ -118,34 +115,31 @@ public class ConditionEvaluatorIT extends BaseIT { .all(new Date(lastVisit.getTime() + 10000), lastVisit).build())); assertTrue(eval(builder.profileProperty("properties.lastVisit").isDay(lastVisit).build())); - assertTrue(eval(builder.profileProperty("properties.lastVisit").isNotDay(new Date(lastVisit.getTime() + 10000)).build())); + assertTrue(eval(builder.profileProperty("properties.lastVisit").isNotDay(new Date(lastVisit.getTime() + (24*60*60*1000))).build())); } @Test public void testExistence() { - /*assertTrue("Gender property does not exist", - eval(builder.profileProperty("properties.gender").exists().build())); + assertTrue("Gender property does not exist", eval(builder.profileProperty("properties.gender").exists().build())); assertFalse("Gender property missing", eval(builder.profileProperty("properties.gender").missing().build())); assertTrue("Strange property exists", eval(builder.profileProperty("properties.unknown").missing().build())); - assertFalse("Strange property exists", eval(builder.profileProperty("properties.unknown").exists().build()));*/ + assertFalse("Strange property exists", eval(builder.profileProperty("properties.unknown").exists().build())); } @Test public void testInteger() { - assertTrue(eval(builder.profileProperty("properties.age").equalTo(Integer.valueOf(30)).build())); - assertTrue(eval(builder.not(builder.profileProperty("properties.age").equalTo(Integer.valueOf(40))).build())); - assertTrue(eval(builder.profileProperty("properties.age").notEqualTo(Integer.valueOf(40)).build())); - assertTrue(eval(builder.profileProperty("properties.age").lessThan(Integer.valueOf(40)).build())); - assertTrue(eval(builder.profileProperty("properties.age").greaterThan(Integer.valueOf(20)).build())); - assertTrue(eval(builder.profileProperty("properties.age").greaterThanOrEqualTo(Integer.valueOf(30)).build())); - //assertFalse(eval(builder.profileProperty("properties.age").greaterThanOrEqualTo(Integer.valueOf(31)).build())); - - assertTrue(eval(builder.profileProperty("properties.age").in(Integer.valueOf(30)).build())); - assertTrue(eval(builder.profileProperty("properties.age").in(Integer.valueOf(31), Integer.valueOf(30)).build())); - assertTrue(eval(builder.profileProperty("properties.age").notIn(Integer.valueOf(25), Integer.valueOf(26)) - .build())); - //assertFalse(eval(builder.profileProperty("properties.age").notIn(Integer.valueOf(25), Integer.valueOf(30)) - // .build())); + assertTrue(eval(builder.profileProperty("properties.age").equalTo(30).build())); + assertTrue(eval(builder.not(builder.profileProperty("properties.age").equalTo(40)).build())); + assertTrue(eval(builder.profileProperty("properties.age").notEqualTo(40).build())); + assertTrue(eval(builder.profileProperty("properties.age").lessThan(40).build())); + assertTrue(eval(builder.profileProperty("properties.age").greaterThan(20).build())); + assertTrue(eval(builder.profileProperty("properties.age").greaterThanOrEqualTo(30).build())); + assertFalse(eval(builder.profileProperty("properties.age").greaterThanOrEqualTo(31).build())); + + assertTrue(eval(builder.profileProperty("properties.age").in(30).build())); + assertTrue(eval(builder.profileProperty("properties.age").in(31, 30).build())); + assertTrue(eval(builder.profileProperty("properties.age").notIn(25, 26).build())); + assertFalse(eval(builder.profileProperty("properties.age").notIn(25, 30).build())); } @Test @@ -167,34 +161,51 @@ public class ConditionEvaluatorIT extends BaseIT { public void testMultiValue() { assertTrue(eval(builder.property("profileSegmentCondition", "segments").parameter("matchType", "in") .parameter("segments", "s10", "s20", "s2").build())); - //assertFalse(eval(builder.property("profileSegmentCondition", "segments").parameter("matchType", "in") - // .parameter("segments", "s10", "s20", "s30").build())); + assertFalse(eval(builder.property("profileSegmentCondition", "segments").parameter("matchType", "in") + .parameter("segments", "s10", "s20", "s30").build())); assertTrue(eval(builder.property("profileSegmentCondition", "segments").parameter("matchType", "notIn") .parameter("segments", "s10", "s20", "s30").build())); - //assertFalse(eval(builder.property("profileSegmentCondition", "segments").parameter("matchType", "notIn") - // .parameter("segments", "s10", "s20", "s2").build())); + assertFalse(eval(builder.property("profileSegmentCondition", "segments").parameter("matchType", "notIn") + .parameter("segments", "s10", "s20", "s2").build())); assertTrue(eval(builder.property("profileSegmentCondition", "segments").parameter("matchType", "all") .parameter("segments", "s1", "s2").build())); - //assertFalse(eval(builder.property("profileSegmentCondition", "segments").parameter("matchType", "all") - // .parameter("segments", "s1", "s5").build())); + assertFalse(eval(builder.property("profileSegmentCondition", "segments").parameter("matchType", "all") + .parameter("segments", "s1", "s5").build())); } @Test public void testString() { assertTrue(eval(builder.profileProperty("properties.gender").equalTo("female").build())); - //assertFalse(eval(builder.not(builder.profileProperty("properties.gender").equalTo("female")).build())); + assertFalse(eval(builder.not(builder.profileProperty("properties.gender").equalTo("female")).build())); assertTrue(eval(builder.profileProperty("properties.gender").notEqualTo("male").build())); - //assertFalse(eval(builder.not(builder.profileProperty("properties.gender").notEqualTo("male")).build())); + assertFalse(eval(builder.not(builder.profileProperty("properties.gender").notEqualTo("male")).build())); assertTrue(eval(builder.profileProperty("properties.gender").startsWith("fe").build())); assertTrue(eval(builder.profileProperty("properties.gender").endsWith("le").build())); assertTrue(eval(builder.profileProperty("properties.gender").contains("fem").build())); - //assertFalse(eval(builder.profileProperty("properties.gender").contains("mu").build())); + assertFalse(eval(builder.profileProperty("properties.gender").contains("mu").build())); assertTrue(eval(builder.profileProperty("properties.gender").matchesRegex(".*ale").build())); assertTrue(eval(builder.profileProperty("properties.gender").in("male", "female").build())); assertTrue(eval(builder.profileProperty("properties.gender").notIn("one", "two").build())); - //assertFalse(eval(builder.profileProperty("properties.gender").notIn("one", "two", "female").build())); + assertFalse(eval(builder.profileProperty("properties.gender").notIn("one", "two", "female").build())); assertTrue(eval(builder.profileProperty("properties.gender").all("female").build())); - //assertFalse(eval(builder.profileProperty("properties.gender").all("male", "female").build())); + assertFalse(eval(builder.profileProperty("properties.gender").all("male", "female").build())); + } + + @Test + public void testRange() { + // test AND + Condition condition = builder.and( + builder.profileProperty("properties.gender").equalTo("female"), + builder.profileProperty("properties.age").greaterThanOrEqualTo(40) + ).build(); + assertFalse(eval(condition)); + + // test OR + condition = builder.or( + builder.profileProperty("properties.gender").equalTo("female"), + builder.profileProperty("properties.age").greaterThanOrEqualTo(40) + ).build(); + assertTrue(eval(condition)); } } diff --git a/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/BooleanConditionESQueryBuilder.java b/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/BooleanConditionESQueryBuilder.java index 8a7a381..574fcc8 100644 --- a/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/BooleanConditionESQueryBuilder.java +++ b/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/BooleanConditionESQueryBuilder.java @@ -65,11 +65,7 @@ public class BooleanConditionESQueryBuilder implements ConditionESQueryBuilder { } else { QueryBuilder orFilter = dispatcher.buildFilter(conditions.get(i), context); if (orFilter != null) { - if (orFilter.getName().equals("range")) { - boolQueryBuilder.filter(orFilter); - } else { - boolQueryBuilder.should(orFilter); - } + boolQueryBuilder.should(orFilter); } else { logger.warn("Null filter for boolean OR sub condition " + conditions.get(i)); }
