From c17f6c0d24a9e8f0ebd37bf59ff18a81fab21253 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Thu, 1 Mar 2018 14:36:15 +0100 Subject: [PATCH] Fix RSQL duplicate entries (#645) * Add more tests and and fix distinct problem. Signed-off-by: kaizimmerm * Correct test numbers. Signed-off-by: kaizimmerm * Fix tests. Signed-off-by: kaizimmerm --- .../repository/jpa/rsql/RSQLUtility.java | 1 + .../jpa/rsql/RSQLActionFieldsTest.java | 2 + .../rsql/RSQLDistributionSetFieldTest.java | 6 ++- .../jpa/rsql/RSQLRolloutGroupFields.java | 9 +++-- .../jpa/rsql/RSQLSoftwareModuleFieldTest.java | 5 +++ .../RSQLSoftwareModuleTypeFieldsTest.java | 4 ++ .../jpa/rsql/RSQLTagFieldsTest.java | 6 +++ .../jpa/rsql/RSQLTargetFieldTest.java | 39 ++++++++++++------- 8 files changed, 53 insertions(+), 19 deletions(-) diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLUtility.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLUtility.java index e0bc52456..e7a003537 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLUtility.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLUtility.java @@ -165,6 +165,7 @@ public final class RSQLUtility { @Override public Predicate toPredicate(final Root root, final CriteriaQuery query, final CriteriaBuilder cb) { final Node rootNode = parseRsql(rsql); + query.distinct(true); final JpqQueryRSQLVisitor jpqQueryRSQLVisitor = new JpqQueryRSQLVisitor<>(root, cb, enumType, virtualPropertyReplacer); diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLActionFieldsTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLActionFieldsTest.java index 52238eaba..3821d9f3f 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLActionFieldsTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLActionFieldsTest.java @@ -66,6 +66,7 @@ public class RSQLActionFieldsTest extends AbstractJpaIntegrationTest { @Description("Test filter action by id") public void testFilterByParameterId() { assertRSQLQuery(ActionFields.ID.name() + "==" + action.getId(), 1); + assertRSQLQuery(ActionFields.ID.name() + "!=" + action.getId(), 10); assertRSQLQuery(ActionFields.ID.name() + "==noExist*", 0); assertRSQLQuery(ActionFields.ID.name() + "=in=(" + action.getId() + ",1000000)", 1); assertRSQLQuery(ActionFields.ID.name() + "=out=(" + action.getId() + ",1000000)", 10); @@ -75,6 +76,7 @@ public class RSQLActionFieldsTest extends AbstractJpaIntegrationTest { @Description("Test action by status") public void testFilterByParameterStatus() { assertRSQLQuery(ActionFields.STATUS.name() + "==pending", 5); + assertRSQLQuery(ActionFields.STATUS.name() + "!=pending", 6); assertRSQLQuery(ActionFields.STATUS.name() + "=in=(pending)", 5); assertRSQLQuery(ActionFields.STATUS.name() + "=out=(pending)", 6); diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLDistributionSetFieldTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLDistributionSetFieldTest.java index d247f1212..9c633d950 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLDistributionSetFieldTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLDistributionSetFieldTest.java @@ -63,6 +63,7 @@ public class RSQLDistributionSetFieldTest extends AbstractJpaIntegrationTest { @Description("Test filter distribution set by name") public void testFilterByParameterName() { assertRSQLQuery(DistributionSetFields.NAME.name() + "==DS", 1); + assertRSQLQuery(DistributionSetFields.NAME.name() + "!=DS", 3); assertRSQLQuery(DistributionSetFields.NAME.name() + "==*DS", 4); assertRSQLQuery(DistributionSetFields.NAME.name() + "==noExist*", 0); assertRSQLQuery(DistributionSetFields.NAME.name() + "=in=(DS,notexist)", 1); @@ -73,6 +74,7 @@ public class RSQLDistributionSetFieldTest extends AbstractJpaIntegrationTest { @Description("Test filter distribution set by description") public void testFilterByParameterDescription() { assertRSQLQuery(DistributionSetFields.DESCRIPTION.name() + "==DS", 1); + assertRSQLQuery(DistributionSetFields.DESCRIPTION.name() + "!=DS", 3); assertRSQLQuery(DistributionSetFields.DESCRIPTION.name() + "==DS*", 2); assertRSQLQuery(DistributionSetFields.DESCRIPTION.name() + "==DS%", 1); assertRSQLQuery(DistributionSetFields.DESCRIPTION.name() + "==noExist*", 0); @@ -108,10 +110,12 @@ public class RSQLDistributionSetFieldTest extends AbstractJpaIntegrationTest { @Description("Test filter distribution set by tag") public void testFilterByTag() { assertRSQLQuery(DistributionSetFields.TAG.name() + "==Tag1", 2); + // does not include untagged sets + assertRSQLQuery(DistributionSetFields.TAG.name() + "!=Tag1", 0); assertRSQLQuery(DistributionSetFields.TAG.name() + "==T*", 2); assertRSQLQuery(DistributionSetFields.TAG.name() + "==noExist*", 0); assertRSQLQuery(DistributionSetFields.TAG.name() + "=in=(Tag1,notexist)", 2); - assertRSQLQuery(DistributionSetFields.TAG.name() + "=out=(Tag1,notexist)", 0); + assertRSQLQuery(DistributionSetFields.TAG.name() + "=out=(null)", 2); } @Test diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLRolloutGroupFields.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLRolloutGroupFields.java index 9be11d4b1..ac3146cdc 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLRolloutGroupFields.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLRolloutGroupFields.java @@ -41,14 +41,14 @@ public class RSQLRolloutGroupFields extends AbstractJpaIntegrationTest { rollout = createRollout("rollout1", 4, dsA.getId(), "controllerId==rollout*"); rollout = rolloutManagement.get(rollout.getId()).get(); - this.rolloutGroupId = rolloutGroupManagement.findByRollout(PAGE, rollout.getId()).getContent() - .get(0).getId(); + this.rolloutGroupId = rolloutGroupManagement.findByRollout(PAGE, rollout.getId()).getContent().get(0).getId(); } @Test @Description("Test filter rollout group by id") public void testFilterByParameterId() { assertRSQLQuery(RolloutGroupFields.ID.name() + "==" + rolloutGroupId, 1); + assertRSQLQuery(RolloutGroupFields.ID.name() + "!=" + rolloutGroupId, 3); assertRSQLQuery(RolloutGroupFields.ID.name() + "==noExist*", 0); assertRSQLQuery(RolloutGroupFields.ID.name() + "=in=(" + rolloutGroupId + ")", 1); assertRSQLQuery(RolloutGroupFields.ID.name() + "=out=(" + rolloutGroupId + ")", 3); @@ -58,6 +58,7 @@ public class RSQLRolloutGroupFields extends AbstractJpaIntegrationTest { @Description("Test filter rollout group by name") public void testFilterByParameterName() { assertRSQLQuery(RolloutGroupFields.NAME.name() + "==group-1", 1); + assertRSQLQuery(RolloutGroupFields.NAME.name() + "!=group-1", 3); assertRSQLQuery(RolloutGroupFields.NAME.name() + "==*", 4); assertRSQLQuery(RolloutGroupFields.NAME.name() + "==noExist*", 0); assertRSQLQuery(RolloutGroupFields.NAME.name() + "=in=(group-1,group-2)", 2); @@ -68,6 +69,7 @@ public class RSQLRolloutGroupFields extends AbstractJpaIntegrationTest { @Description("Test filter rollout group by description") public void testFilterByParameterDescription() { assertRSQLQuery(RolloutGroupFields.DESCRIPTION.name() + "==group-1", 1); + assertRSQLQuery(RolloutGroupFields.DESCRIPTION.name() + "!=group-1", 3); assertRSQLQuery(RolloutGroupFields.DESCRIPTION.name() + "==group*", 4); assertRSQLQuery(RolloutGroupFields.DESCRIPTION.name() + "==noExist*", 0); assertRSQLQuery(RolloutGroupFields.DESCRIPTION.name() + "=in=(group-1,notexist)", 1); @@ -85,8 +87,7 @@ public class RSQLRolloutGroupFields extends AbstractJpaIntegrationTest { private Rollout createRollout(final String name, final int amountGroups, final long distributionSetId, final String targetFilterQuery) { return rolloutManagement.create( - entityFactory.rollout().create() - .set(distributionSetManagement.get(distributionSetId).get()).name(name) + entityFactory.rollout().create().set(distributionSetManagement.get(distributionSetId).get()).name(name) .targetFilterQuery(targetFilterQuery), amountGroups, new RolloutGroupConditionBuilder().withDefaults() .successCondition(RolloutGroupSuccessCondition.THRESHOLD, "100").build()); diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLSoftwareModuleFieldTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLSoftwareModuleFieldTest.java index b2afc9882..8d82a340d 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLSoftwareModuleFieldTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLSoftwareModuleFieldTest.java @@ -60,6 +60,7 @@ public class RSQLSoftwareModuleFieldTest extends AbstractJpaIntegrationTest { @Description("Test filter software module by name") public void testFilterByParameterName() { assertRSQLQuery(SoftwareModuleFields.NAME.name() + "==agent-hub", 1); + assertRSQLQuery(SoftwareModuleFields.NAME.name() + "!=agent-hub", 3); assertRSQLQuery(SoftwareModuleFields.NAME.name() + "==agent-hub*", 2); assertRSQLQuery(SoftwareModuleFields.NAME.name() + "!=agent-hub*", 2); assertRSQLQuery(SoftwareModuleFields.NAME.name() + "==noExist*", 0); @@ -71,6 +72,7 @@ public class RSQLSoftwareModuleFieldTest extends AbstractJpaIntegrationTest { @Description("Test filter software module by description") public void testFilterByParameterDescription() { assertRSQLQuery(SoftwareModuleFields.DESCRIPTION.name() + "==agent-hub", 1); + assertRSQLQuery(SoftwareModuleFields.DESCRIPTION.name() + "!=agent-hub", 3); assertRSQLQuery(SoftwareModuleFields.DESCRIPTION.name() + "==noExist*", 0); assertRSQLQuery(SoftwareModuleFields.DESCRIPTION.name() + "=in=(agent-hub,notexist)", 1); assertRSQLQuery(SoftwareModuleFields.DESCRIPTION.name() + "=out=(agent-hub,notexist)", 3); @@ -89,6 +91,7 @@ public class RSQLSoftwareModuleFieldTest extends AbstractJpaIntegrationTest { @Description("Test filter software module by type") public void testFilterByType() { assertRSQLQuery(SoftwareModuleFields.TYPE.name() + "==" + TestdataFactory.SM_TYPE_APP, 2); + assertRSQLQuery(SoftwareModuleFields.TYPE.name() + "!=" + TestdataFactory.SM_TYPE_APP, 2); assertRSQLQuery(SoftwareModuleFields.TYPE.name() + "==noExist*", 0); assertRSQLQuery(SoftwareModuleFields.TYPE.name() + "=in=(" + TestdataFactory.SM_TYPE_APP + ")", 2); assertRSQLQuery(SoftwareModuleFields.TYPE.name() + "=out=(" + TestdataFactory.SM_TYPE_APP + ")", 2); @@ -98,6 +101,8 @@ public class RSQLSoftwareModuleFieldTest extends AbstractJpaIntegrationTest { @Description("Test filter software module by metadata") public void testFilterByMetadata() { assertRSQLQuery(SoftwareModuleFields.METADATA.name() + ".metaKey==metaValue", 1); + assertRSQLQuery(SoftwareModuleFields.METADATA.name() + ".metaKey!=metaValue", 1); + assertRSQLQuery(SoftwareModuleFields.METADATA.name() + ".metaKey!=notexist", 2); assertRSQLQuery(SoftwareModuleFields.METADATA.name() + ".metaKey==*v*", 2); assertRSQLQuery(SoftwareModuleFields.METADATA.name() + ".metaKey==noExist*", 0); assertRSQLQuery(SoftwareModuleFields.METADATA.name() + ".metaKey=in=(metaValue,value)", 2); diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLSoftwareModuleTypeFieldsTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLSoftwareModuleTypeFieldsTest.java index 77eaa81f6..00d0c95c0 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLSoftwareModuleTypeFieldsTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLSoftwareModuleTypeFieldsTest.java @@ -36,12 +36,14 @@ public class RSQLSoftwareModuleTypeFieldsTest extends AbstractJpaIntegrationTest @Description("Test filter software module test type by name") public void testFilterByParameterName() { assertRSQLQuery(SoftwareModuleTypeFields.NAME.name() + "==" + Constants.SMT_DEFAULT_OS_NAME, 1); + assertRSQLQuery(SoftwareModuleTypeFields.NAME.name() + "!=" + Constants.SMT_DEFAULT_OS_NAME, 2); } @Test @Description("Test filter software module test type by description") public void testFilterByParameterDescription() { assertRSQLQuery(SoftwareModuleTypeFields.DESCRIPTION.name() + "==Updated*", 3); + assertRSQLQuery(SoftwareModuleTypeFields.DESCRIPTION.name() + "!=Updated*", 0); assertRSQLQuery(SoftwareModuleTypeFields.DESCRIPTION.name() + "==noExist*", 0); } @@ -49,6 +51,7 @@ public class RSQLSoftwareModuleTypeFieldsTest extends AbstractJpaIntegrationTest @Description("Test filter software module test type by key") public void testFilterByParameterKey() { assertRSQLQuery(SoftwareModuleTypeFields.KEY.name() + "==os", 1); + assertRSQLQuery(SoftwareModuleTypeFields.KEY.name() + "!=os", 2); assertRSQLQuery(SoftwareModuleTypeFields.KEY.name() + "=in=(os)", 1); assertRSQLQuery(SoftwareModuleTypeFields.KEY.name() + "=out=(os)", 2); } @@ -57,6 +60,7 @@ public class RSQLSoftwareModuleTypeFieldsTest extends AbstractJpaIntegrationTest @Description("Test filter software module test type by max") public void testFilterByMaxAssignment() { assertRSQLQuery(SoftwareModuleTypeFields.MAXASSIGNMENTS.name() + "==1", 2); + assertRSQLQuery(SoftwareModuleTypeFields.MAXASSIGNMENTS.name() + "!=1", 1); } private void assertRSQLQuery(final String rsqlParam, final long excpectedEntity) { diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLTagFieldsTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLTagFieldsTest.java index 620c9dd6e..cb1fefa46 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLTagFieldsTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLTagFieldsTest.java @@ -43,6 +43,7 @@ public class RSQLTagFieldsTest extends AbstractJpaIntegrationTest { @Description("Test filter target tag by name") public void testFilterTargetTagByParameterName() { assertRSQLQueryTarget(TagFields.NAME.name() + "==1", 1); + assertRSQLQueryTarget(TagFields.NAME.name() + "!=1", 4); assertRSQLQueryTarget(TagFields.NAME.name() + "==*", 5); assertRSQLQueryTarget(TagFields.NAME.name() + "==noExist*", 0); assertRSQLQueryTarget(TagFields.NAME.name() + "=in=(1,notexist)", 1); @@ -53,6 +54,7 @@ public class RSQLTagFieldsTest extends AbstractJpaIntegrationTest { @Description("Test filter target tag by description") public void testFilterTargetTagByParameterDescription() { assertRSQLQueryTarget(TagFields.DESCRIPTION.name() + "==1", 1); + assertRSQLQueryTarget(TagFields.DESCRIPTION.name() + "!=1", 4); assertRSQLQueryTarget(TagFields.DESCRIPTION.name() + "==*", 5); assertRSQLQueryTarget(TagFields.DESCRIPTION.name() + "==noExist*", 0); assertRSQLQueryTarget(TagFields.DESCRIPTION.name() + "=in=(1,notexist)", 1); @@ -63,6 +65,7 @@ public class RSQLTagFieldsTest extends AbstractJpaIntegrationTest { @Description("Test filter target tag by colour") public void testFilterTargetTagByParameterColour() { assertRSQLQueryTarget(TagFields.COLOUR.name() + "==red", 3); + assertRSQLQueryTarget(TagFields.COLOUR.name() + "!=red", 2); assertRSQLQueryTarget(TagFields.COLOUR.name() + "==r*", 3); assertRSQLQueryTarget(TagFields.COLOUR.name() + "==noExist*", 0); assertRSQLQueryTarget(TagFields.COLOUR.name() + "=in=(red,notexist)", 3); @@ -73,6 +76,7 @@ public class RSQLTagFieldsTest extends AbstractJpaIntegrationTest { @Description("Test filter distribution set tag by name") public void testFilterDistributionSetTagByParameterName() { assertRSQLQueryDistributionSet(TagFields.NAME.name() + "==1", 1); + assertRSQLQueryDistributionSet(TagFields.NAME.name() + "!=1", 4); assertRSQLQueryDistributionSet(TagFields.NAME.name() + "==*", 5); assertRSQLQueryDistributionSet(TagFields.NAME.name() + "==noExist*", 0); assertRSQLQueryDistributionSet(TagFields.NAME.name() + "=in=(1,2)", 2); @@ -83,6 +87,7 @@ public class RSQLTagFieldsTest extends AbstractJpaIntegrationTest { @Description("Test filter distribution set by description") public void testFilterDistributionSetTagByParameterDescription() { assertRSQLQueryDistributionSet(TagFields.DESCRIPTION.name() + "==1", 1); + assertRSQLQueryDistributionSet(TagFields.DESCRIPTION.name() + "!=1", 4); assertRSQLQueryDistributionSet(TagFields.DESCRIPTION.name() + "==*", 5); assertRSQLQueryDistributionSet(TagFields.DESCRIPTION.name() + "==noExist*", 0); assertRSQLQueryDistributionSet(TagFields.DESCRIPTION.name() + "=in=(1,2)", 2); @@ -93,6 +98,7 @@ public class RSQLTagFieldsTest extends AbstractJpaIntegrationTest { @Description("Test filter distribution set by colour") public void testFilterDistributionSetTagByParameterColour() { assertRSQLQueryDistributionSet(TagFields.COLOUR.name() + "==red", 3); + assertRSQLQueryDistributionSet(TagFields.COLOUR.name() + "!=red", 2); assertRSQLQueryDistributionSet(TagFields.COLOUR.name() + "==r*", 3); assertRSQLQueryDistributionSet(TagFields.COLOUR.name() + "==noExist*", 0); assertRSQLQueryDistributionSet(TagFields.COLOUR.name() + "=in=(red,notexist)", 3); diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLTargetFieldTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLTargetFieldTest.java index fe15ae2d1..2ecc3251e 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLTargetFieldTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLTargetFieldTest.java @@ -57,17 +57,23 @@ public class RSQLTargetFieldTest extends AbstractJpaIntegrationTest { target2 = controllerManagement.updateControllerAttributes(target2.getControllerId(), attributes); target2 = controllerManagement.findOrRegisterTargetIfItDoesNotexist(target2.getControllerId(), LOCALHOST); - testdataFactory.createTarget("targetId1235"); - testdataFactory.createTarget("targetId1236"); + final Target target3 = testdataFactory.createTarget("targetId1235"); + final Target target4 = testdataFactory.createTarget("targetId1236"); + testdataFactory.createTarget("targetId1237"); final TargetTag targetTag = targetTagManagement.create(entityFactory.tag().create().name("Tag1")); - targetTagManagement.create(entityFactory.tag().create().name("Tag2")); - targetTagManagement.create(entityFactory.tag().create().name("Tag3")); + final TargetTag targetTag2 = targetTagManagement.create(entityFactory.tag().create().name("Tag2")); + final TargetTag targetTag3 = targetTagManagement.create(entityFactory.tag().create().name("Tag3")); targetTagManagement.create(entityFactory.tag().create().name("Tag4")); targetManagement.assignTag(Arrays.asList(target.getControllerId(), target2.getControllerId()), targetTag.getId()); + targetManagement.assignTag(Arrays.asList(target3.getControllerId(), target4.getControllerId()), + targetTag2.getId()); + targetManagement.assignTag(Arrays.asList(target3.getControllerId(), target4.getControllerId()), + targetTag3.getId()); + assignDistributionSet(ds.getId(), target.getControllerId()); } @@ -75,20 +81,20 @@ public class RSQLTargetFieldTest extends AbstractJpaIntegrationTest { @Description("Test filter target by (controller) id") public void testFilterByParameterId() { assertRSQLQuery(TargetFields.ID.name() + "==targetId123", 1); - assertRSQLQuery(TargetFields.ID.name() + "==target*", 4); + assertRSQLQuery(TargetFields.ID.name() + "==target*", 5); assertRSQLQuery(TargetFields.ID.name() + "==noExist*", 0); assertRSQLQuery(TargetFields.ID.name() + "=in=(targetId123,notexist)", 1); - assertRSQLQuery(TargetFields.ID.name() + "=out=(targetId123,notexist)", 3); + assertRSQLQuery(TargetFields.ID.name() + "=out=(targetId123,notexist)", 4); } @Test @Description("Test filter target by name") public void testFilterByParameterName() { assertRSQLQuery(TargetFields.NAME.name() + "==targetName123", 1); - assertRSQLQuery(TargetFields.NAME.name() + "==target*", 4); + assertRSQLQuery(TargetFields.NAME.name() + "==target*", 5); assertRSQLQuery(TargetFields.NAME.name() + "==noExist*", 0); assertRSQLQuery(TargetFields.NAME.name() + "=in=(targetName123,notexist)", 1); - assertRSQLQuery(TargetFields.NAME.name() + "=out=(targetName123,notexist)", 3); + assertRSQLQuery(TargetFields.NAME.name() + "=out=(targetName123,notexist)", 4); } @Test @@ -105,17 +111,17 @@ public class RSQLTargetFieldTest extends AbstractJpaIntegrationTest { @Description("Test filter target by controller id") public void testFilterByParameterControllerId() { assertRSQLQuery(TargetFields.CONTROLLERID.name() + "==targetId123", 1); - assertRSQLQuery(TargetFields.CONTROLLERID.name() + "==target*", 4); + assertRSQLQuery(TargetFields.CONTROLLERID.name() + "==target*", 5); assertRSQLQuery(TargetFields.CONTROLLERID.name() + "==noExist*", 0); assertRSQLQuery(TargetFields.CONTROLLERID.name() + "=in=(targetId123,notexist)", 1); - assertRSQLQuery(TargetFields.CONTROLLERID.name() + "=out=(targetId123,notexist)", 3); + assertRSQLQuery(TargetFields.CONTROLLERID.name() + "=out=(targetId123,notexist)", 4); } @Test @Description("Test filter target by status") public void testFilterByParameterUpdateStatus() { assertRSQLQuery(TargetFields.UPDATESTATUS.name() + "==pending", 1); - assertRSQLQuery(TargetFields.UPDATESTATUS.name() + "!=pending", 3); + assertRSQLQuery(TargetFields.UPDATESTATUS.name() + "!=pending", 4); try { assertRSQLQuery(TargetFields.UPDATESTATUS.name() + "==noExist*", 0); fail("RSQLParameterUnsupportedFieldException was expected since update status unknown"); @@ -123,13 +129,14 @@ public class RSQLTargetFieldTest extends AbstractJpaIntegrationTest { // test ok - exception was excepted } assertRSQLQuery(TargetFields.UPDATESTATUS.name() + "=in=(pending,error)", 1); - assertRSQLQuery(TargetFields.UPDATESTATUS.name() + "=out=(pending,error)", 3); + assertRSQLQuery(TargetFields.UPDATESTATUS.name() + "=out=(pending,error)", 4); } @Test @Description("Test filter target by attribute") public void testFilterByAttribute() { assertRSQLQuery(TargetFields.ATTRIBUTE.name() + ".revision==1.1", 1); + assertRSQLQuery(TargetFields.ATTRIBUTE.name() + ".revision!=1.1", 1); assertRSQLQuery(TargetFields.ATTRIBUTE.name() + ".revision==1*", 2); assertRSQLQuery(TargetFields.ATTRIBUTE.name() + ".revision==noExist*", 0); assertRSQLQuery(TargetFields.ATTRIBUTE.name() + ".revision=in=(1.1,notexist)", 1); @@ -162,10 +169,14 @@ public class RSQLTargetFieldTest extends AbstractJpaIntegrationTest { @Description("Test filter target by tag") public void testFilterByTag() { assertRSQLQuery(TargetFields.TAG.name() + "==Tag1", 2); - assertRSQLQuery(TargetFields.TAG.name() + "==T*", 2); + assertRSQLQuery(TargetFields.TAG.name() + "!=Tag1", 2); + assertRSQLQuery(TargetFields.TAG.name() + "==T*", 4); assertRSQLQuery(TargetFields.TAG.name() + "==noExist*", 0); + assertRSQLQuery(TargetFields.TAG.name() + "!=notexist", 4); assertRSQLQuery(TargetFields.TAG.name() + "=in=(Tag1,notexist)", 2); - assertRSQLQuery(TargetFields.TAG.name() + "=out=(Tag1,notexist)", 0); + assertRSQLQuery(TargetFields.TAG.name() + "=in=(null)", 0); + assertRSQLQuery(TargetFields.TAG.name() + "=out=(Tag1,notexist)", 2); + assertRSQLQuery(TargetFields.TAG.name() + "=out=(null)", 4); } @Test