From 112b92503e2a477e9f5f54f08121d3a9d167a2aa Mon Sep 17 00:00:00 2001 From: zbeacon Date: Mon, 27 Jul 2020 10:58:37 +0300 Subject: [PATCH] Added tests for predication queries --- .../dao/service/BaseEntityServiceTest.java | 127 +++++++++++++++++- 1 file changed, 123 insertions(+), 4 deletions(-) diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/BaseEntityServiceTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/BaseEntityServiceTest.java index 235627c766..ed8f1605e3 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/BaseEntityServiceTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/BaseEntityServiceTest.java @@ -925,7 +925,9 @@ public abstract class BaseEntityServiceTest extends AbstractServiceTest { new EntityKey(EntityKeyType.ENTITY_FIELD, "createdTime"), EntityDataSortOrder.Direction.DESC ); - List entityFields = Arrays.asList(new EntityKey(EntityKeyType.ENTITY_FIELD, "name"), new EntityKey(EntityKeyType.ENTITY_FIELD, "deviceType")); + List entityFields = Arrays.asList(new EntityKey(EntityKeyType.ENTITY_FIELD, "name"), + new EntityKey(EntityKeyType.ENTITY_FIELD, "entityType")); + List latestValues = Collections.singletonList(new EntityKey(EntityKeyType.CLIENT_ATTRIBUTE, "attributeString")); List keyFiltersEqualString = createStringKeyFilters("attributeString", EntityKeyType.CLIENT_ATTRIBUTE, StringFilterPredicate.StringOperation.EQUAL, "equal"); @@ -940,7 +942,7 @@ public abstract class BaseEntityServiceTest extends AbstractServiceTest { List keyFiltersNotContainsString = createStringKeyFilters("attributeString", EntityKeyType.CLIENT_ATTRIBUTE, StringFilterPredicate.StringOperation.NOT_CONTAINS, "NOT_CONTAINS"); - List deviceTypeFilters = createStringKeyFilters("entityType", EntityKeyType.ENTITY_FIELD, StringFilterPredicate.StringOperation.EQUAL, "EQUAL"); + List deviceTypeFilters = createStringKeyFilters("entityType", EntityKeyType.ENTITY_FIELD, StringFilterPredicate.StringOperation.NOT_EQUAL, "NOT_EQUAL"); // Equal Operation @@ -1032,7 +1034,124 @@ public abstract class BaseEntityServiceTest extends AbstractServiceTest { } @Test - public void testBuildSimplePredicateQueryOperations() throws JsonMappingException, JsonProcessingException, ExecutionException, InterruptedException{ + public void testBuildStringPredicateQueryOperationsForEntityType() throws ExecutionException, InterruptedException{ + + List devices = new ArrayList<>(); + + for (int i = 0; i < 10; i++) { + Device device = new Device(); + device.setTenantId(tenantId); + device.setName("Device" + i); + device.setType("default"); + device.setLabel("testLabel" + (int) (Math.random() * 1000)); + devices.add(deviceService.saveDevice(device)); + //TO make sure devices have different created time + Thread.sleep(1); + } + + DeviceTypeFilter filter = new DeviceTypeFilter(); + filter.setDeviceType("default"); + filter.setDeviceNameFilter(""); + + EntityDataSortOrder sortOrder = new EntityDataSortOrder( + new EntityKey(EntityKeyType.ENTITY_FIELD, "createdTime"), EntityDataSortOrder.Direction.DESC + ); + + List entityFields = Arrays.asList(new EntityKey(EntityKeyType.ENTITY_FIELD, "name"), + new EntityKey(EntityKeyType.ENTITY_FIELD, "entityType")); + + List keyFiltersEqualString = createStringKeyFilters("entityType", EntityKeyType.ENTITY_FIELD, StringFilterPredicate.StringOperation.EQUAL, "device"); + List keyFiltersNotEqualString = createStringKeyFilters("entityType", EntityKeyType.ENTITY_FIELD, StringFilterPredicate.StringOperation.NOT_EQUAL, "asset"); + List keyFiltersStartsWithString = createStringKeyFilters("entityType", EntityKeyType.ENTITY_FIELD, StringFilterPredicate.StringOperation.STARTS_WITH, "dev"); + List keyFiltersEndsWithString = createStringKeyFilters("entityType", EntityKeyType.ENTITY_FIELD, StringFilterPredicate.StringOperation.ENDS_WITH, "ice"); + List keyFiltersContainsString = createStringKeyFilters("entityType", EntityKeyType.ENTITY_FIELD, StringFilterPredicate.StringOperation.CONTAINS, "vic"); + List keyFiltersNotContainsString = createStringKeyFilters("entityType", EntityKeyType.ENTITY_FIELD, StringFilterPredicate.StringOperation.NOT_CONTAINS, "dolphin"); + + // Equal Operation + + EntityDataPageLink pageLink = new EntityDataPageLink(100, 0, null, sortOrder); + EntityDataQuery query = new EntityDataQuery(filter, pageLink, entityFields, null, keyFiltersEqualString); + PageData data = entityService.findEntityDataByQuery(tenantId, new CustomerId(CustomerId.NULL_UUID), query); + List loadedEntities = getLoadedEntities(data, query); + Assert.assertEquals(devices.size(), loadedEntities.size()); + + List loadedStrings = loadedEntities.stream().map(entityData -> + entityData.getLatest().get(EntityKeyType.ENTITY_FIELD).get("name").getValue()).collect(Collectors.toList()); + + List devicesNames = devices.stream().map(Device::getName).collect(Collectors.toList()); + + Assert.assertTrue(listEqualWithoutOrder(devicesNames, loadedStrings)); + + // Not equal Operation + + pageLink = new EntityDataPageLink(100, 0, null, sortOrder); + query = new EntityDataQuery(filter, pageLink, entityFields, null, keyFiltersNotEqualString); + data = entityService.findEntityDataByQuery(tenantId, new CustomerId(CustomerId.NULL_UUID), query); + loadedEntities = getLoadedEntities(data, query); + Assert.assertEquals(devices.size(), loadedEntities.size()); + + loadedStrings = loadedEntities.stream().map(entityData -> + entityData.getLatest().get(EntityKeyType.ENTITY_FIELD).get("name").getValue()).collect(Collectors.toList()); + + Assert.assertTrue(listEqualWithoutOrder(devicesNames, loadedStrings)); + + // Starts with Operation + + pageLink = new EntityDataPageLink(100, 0, null, sortOrder); + query = new EntityDataQuery(filter, pageLink, entityFields, null, keyFiltersStartsWithString); + data = entityService.findEntityDataByQuery(tenantId, new CustomerId(CustomerId.NULL_UUID), query); + loadedEntities = getLoadedEntities(data, query); + Assert.assertEquals(devices.size(), loadedEntities.size()); + + loadedStrings = loadedEntities.stream().map(entityData -> + entityData.getLatest().get(EntityKeyType.ENTITY_FIELD).get("name").getValue()).collect(Collectors.toList()); + + Assert.assertTrue(listEqualWithoutOrder(devicesNames, loadedStrings)); + + // Ends with Operation + + pageLink = new EntityDataPageLink(100, 0, null, sortOrder); + query = new EntityDataQuery(filter, pageLink, entityFields, null, keyFiltersEndsWithString); + data = entityService.findEntityDataByQuery(tenantId, new CustomerId(CustomerId.NULL_UUID), query); + loadedEntities = getLoadedEntities(data, query); + Assert.assertEquals(devices.size(), loadedEntities.size()); + + loadedStrings = loadedEntities.stream().map(entityData -> + entityData.getLatest().get(EntityKeyType.ENTITY_FIELD).get("name").getValue()).collect(Collectors.toList()); + + Assert.assertTrue(listEqualWithoutOrder(devicesNames, loadedStrings)); + + // Contains Operation + + pageLink = new EntityDataPageLink(100, 0, null, sortOrder); + query = new EntityDataQuery(filter, pageLink, entityFields, null, keyFiltersContainsString); + data = entityService.findEntityDataByQuery(tenantId, new CustomerId(CustomerId.NULL_UUID), query); + loadedEntities = getLoadedEntities(data, query); + Assert.assertEquals(devices.size(), loadedEntities.size()); + + loadedStrings = loadedEntities.stream().map(entityData -> + entityData.getLatest().get(EntityKeyType.ENTITY_FIELD).get("name").getValue()).collect(Collectors.toList()); + + Assert.assertTrue(listEqualWithoutOrder(devicesNames, loadedStrings)); + + // Not contains Operation + + pageLink = new EntityDataPageLink(100, 0, null, sortOrder); + query = new EntityDataQuery(filter, pageLink, entityFields, null, keyFiltersNotContainsString); + data = entityService.findEntityDataByQuery(tenantId, new CustomerId(CustomerId.NULL_UUID), query); + loadedEntities = getLoadedEntities(data, query); + Assert.assertEquals(devices.size(), loadedEntities.size()); + + loadedStrings = loadedEntities.stream().map(entityData -> + entityData.getLatest().get(EntityKeyType.ENTITY_FIELD).get("name").getValue()).collect(Collectors.toList()); + + Assert.assertTrue(listEqualWithoutOrder(devicesNames, loadedStrings)); + + deviceService.deleteDevicesByTenantId(tenantId); + } + + @Test + public void testBuildSimplePredicateQueryOperations() throws InterruptedException{ List devices = new ArrayList<>(); @@ -1053,7 +1172,7 @@ public abstract class BaseEntityServiceTest extends AbstractServiceTest { EntityDataSortOrder sortOrder = new EntityDataSortOrder(new EntityKey(EntityKeyType.ENTITY_FIELD, "name"), EntityDataSortOrder.Direction.DESC); - List deviceTypeFilters = createStringKeyFilters("entityType", EntityKeyType.ENTITY_FIELD, StringFilterPredicate.StringOperation.EQUAL, "EQUAL"); + List deviceTypeFilters = createStringKeyFilters("type", EntityKeyType.ENTITY_FIELD, StringFilterPredicate.StringOperation.EQUAL, "default"); KeyFilter createdTimeFilter = createNumericKeyFilter("createdTime", EntityKeyType.ENTITY_FIELD, NumericFilterPredicate.NumericOperation.GREATER, 1L); List createdTimeFilters = Collections.singletonList(createdTimeFilter);