Commit 112b92503e2a477e9f5f54f08121d3a9d167a2aa

Authored by zbeacon
Committed by Andrew Shvayka
1 parent 02f928b9

Added tests for predication queries

... ... @@ -925,7 +925,9 @@ public abstract class BaseEntityServiceTest extends AbstractServiceTest {
925 925 new EntityKey(EntityKeyType.ENTITY_FIELD, "createdTime"), EntityDataSortOrder.Direction.DESC
926 926 );
927 927
928   - List<EntityKey> entityFields = Arrays.asList(new EntityKey(EntityKeyType.ENTITY_FIELD, "name"), new EntityKey(EntityKeyType.ENTITY_FIELD, "deviceType"));
  928 + List<EntityKey> entityFields = Arrays.asList(new EntityKey(EntityKeyType.ENTITY_FIELD, "name"),
  929 + new EntityKey(EntityKeyType.ENTITY_FIELD, "entityType"));
  930 +
929 931 List<EntityKey> latestValues = Collections.singletonList(new EntityKey(EntityKeyType.CLIENT_ATTRIBUTE, "attributeString"));
930 932
931 933 List<KeyFilter> keyFiltersEqualString = createStringKeyFilters("attributeString", EntityKeyType.CLIENT_ATTRIBUTE, StringFilterPredicate.StringOperation.EQUAL, "equal");
... ... @@ -940,7 +942,7 @@ public abstract class BaseEntityServiceTest extends AbstractServiceTest {
940 942
941 943 List<KeyFilter> keyFiltersNotContainsString = createStringKeyFilters("attributeString", EntityKeyType.CLIENT_ATTRIBUTE, StringFilterPredicate.StringOperation.NOT_CONTAINS, "NOT_CONTAINS");
942 944
943   - List<KeyFilter> deviceTypeFilters = createStringKeyFilters("entityType", EntityKeyType.ENTITY_FIELD, StringFilterPredicate.StringOperation.EQUAL, "EQUAL");
  945 + List<KeyFilter> deviceTypeFilters = createStringKeyFilters("entityType", EntityKeyType.ENTITY_FIELD, StringFilterPredicate.StringOperation.NOT_EQUAL, "NOT_EQUAL");
944 946
945 947 // Equal Operation
946 948
... ... @@ -1032,7 +1034,124 @@ public abstract class BaseEntityServiceTest extends AbstractServiceTest {
1032 1034 }
1033 1035
1034 1036 @Test
1035   - public void testBuildSimplePredicateQueryOperations() throws JsonMappingException, JsonProcessingException, ExecutionException, InterruptedException{
  1037 + public void testBuildStringPredicateQueryOperationsForEntityType() throws ExecutionException, InterruptedException{
  1038 +
  1039 + List<Device> devices = new ArrayList<>();
  1040 +
  1041 + for (int i = 0; i < 10; i++) {
  1042 + Device device = new Device();
  1043 + device.setTenantId(tenantId);
  1044 + device.setName("Device" + i);
  1045 + device.setType("default");
  1046 + device.setLabel("testLabel" + (int) (Math.random() * 1000));
  1047 + devices.add(deviceService.saveDevice(device));
  1048 + //TO make sure devices have different created time
  1049 + Thread.sleep(1);
  1050 + }
  1051 +
  1052 + DeviceTypeFilter filter = new DeviceTypeFilter();
  1053 + filter.setDeviceType("default");
  1054 + filter.setDeviceNameFilter("");
  1055 +
  1056 + EntityDataSortOrder sortOrder = new EntityDataSortOrder(
  1057 + new EntityKey(EntityKeyType.ENTITY_FIELD, "createdTime"), EntityDataSortOrder.Direction.DESC
  1058 + );
  1059 +
  1060 + List<EntityKey> entityFields = Arrays.asList(new EntityKey(EntityKeyType.ENTITY_FIELD, "name"),
  1061 + new EntityKey(EntityKeyType.ENTITY_FIELD, "entityType"));
  1062 +
  1063 + List<KeyFilter> keyFiltersEqualString = createStringKeyFilters("entityType", EntityKeyType.ENTITY_FIELD, StringFilterPredicate.StringOperation.EQUAL, "device");
  1064 + List<KeyFilter> keyFiltersNotEqualString = createStringKeyFilters("entityType", EntityKeyType.ENTITY_FIELD, StringFilterPredicate.StringOperation.NOT_EQUAL, "asset");
  1065 + List<KeyFilter> keyFiltersStartsWithString = createStringKeyFilters("entityType", EntityKeyType.ENTITY_FIELD, StringFilterPredicate.StringOperation.STARTS_WITH, "dev");
  1066 + List<KeyFilter> keyFiltersEndsWithString = createStringKeyFilters("entityType", EntityKeyType.ENTITY_FIELD, StringFilterPredicate.StringOperation.ENDS_WITH, "ice");
  1067 + List<KeyFilter> keyFiltersContainsString = createStringKeyFilters("entityType", EntityKeyType.ENTITY_FIELD, StringFilterPredicate.StringOperation.CONTAINS, "vic");
  1068 + List<KeyFilter> keyFiltersNotContainsString = createStringKeyFilters("entityType", EntityKeyType.ENTITY_FIELD, StringFilterPredicate.StringOperation.NOT_CONTAINS, "dolphin");
  1069 +
  1070 + // Equal Operation
  1071 +
  1072 + EntityDataPageLink pageLink = new EntityDataPageLink(100, 0, null, sortOrder);
  1073 + EntityDataQuery query = new EntityDataQuery(filter, pageLink, entityFields, null, keyFiltersEqualString);
  1074 + PageData<EntityData> data = entityService.findEntityDataByQuery(tenantId, new CustomerId(CustomerId.NULL_UUID), query);
  1075 + List<EntityData> loadedEntities = getLoadedEntities(data, query);
  1076 + Assert.assertEquals(devices.size(), loadedEntities.size());
  1077 +
  1078 + List<String> loadedStrings = loadedEntities.stream().map(entityData ->
  1079 + entityData.getLatest().get(EntityKeyType.ENTITY_FIELD).get("name").getValue()).collect(Collectors.toList());
  1080 +
  1081 + List<String> devicesNames = devices.stream().map(Device::getName).collect(Collectors.toList());
  1082 +
  1083 + Assert.assertTrue(listEqualWithoutOrder(devicesNames, loadedStrings));
  1084 +
  1085 + // Not equal Operation
  1086 +
  1087 + pageLink = new EntityDataPageLink(100, 0, null, sortOrder);
  1088 + query = new EntityDataQuery(filter, pageLink, entityFields, null, keyFiltersNotEqualString);
  1089 + data = entityService.findEntityDataByQuery(tenantId, new CustomerId(CustomerId.NULL_UUID), query);
  1090 + loadedEntities = getLoadedEntities(data, query);
  1091 + Assert.assertEquals(devices.size(), loadedEntities.size());
  1092 +
  1093 + loadedStrings = loadedEntities.stream().map(entityData ->
  1094 + entityData.getLatest().get(EntityKeyType.ENTITY_FIELD).get("name").getValue()).collect(Collectors.toList());
  1095 +
  1096 + Assert.assertTrue(listEqualWithoutOrder(devicesNames, loadedStrings));
  1097 +
  1098 + // Starts with Operation
  1099 +
  1100 + pageLink = new EntityDataPageLink(100, 0, null, sortOrder);
  1101 + query = new EntityDataQuery(filter, pageLink, entityFields, null, keyFiltersStartsWithString);
  1102 + data = entityService.findEntityDataByQuery(tenantId, new CustomerId(CustomerId.NULL_UUID), query);
  1103 + loadedEntities = getLoadedEntities(data, query);
  1104 + Assert.assertEquals(devices.size(), loadedEntities.size());
  1105 +
  1106 + loadedStrings = loadedEntities.stream().map(entityData ->
  1107 + entityData.getLatest().get(EntityKeyType.ENTITY_FIELD).get("name").getValue()).collect(Collectors.toList());
  1108 +
  1109 + Assert.assertTrue(listEqualWithoutOrder(devicesNames, loadedStrings));
  1110 +
  1111 + // Ends with Operation
  1112 +
  1113 + pageLink = new EntityDataPageLink(100, 0, null, sortOrder);
  1114 + query = new EntityDataQuery(filter, pageLink, entityFields, null, keyFiltersEndsWithString);
  1115 + data = entityService.findEntityDataByQuery(tenantId, new CustomerId(CustomerId.NULL_UUID), query);
  1116 + loadedEntities = getLoadedEntities(data, query);
  1117 + Assert.assertEquals(devices.size(), loadedEntities.size());
  1118 +
  1119 + loadedStrings = loadedEntities.stream().map(entityData ->
  1120 + entityData.getLatest().get(EntityKeyType.ENTITY_FIELD).get("name").getValue()).collect(Collectors.toList());
  1121 +
  1122 + Assert.assertTrue(listEqualWithoutOrder(devicesNames, loadedStrings));
  1123 +
  1124 + // Contains Operation
  1125 +
  1126 + pageLink = new EntityDataPageLink(100, 0, null, sortOrder);
  1127 + query = new EntityDataQuery(filter, pageLink, entityFields, null, keyFiltersContainsString);
  1128 + data = entityService.findEntityDataByQuery(tenantId, new CustomerId(CustomerId.NULL_UUID), query);
  1129 + loadedEntities = getLoadedEntities(data, query);
  1130 + Assert.assertEquals(devices.size(), loadedEntities.size());
  1131 +
  1132 + loadedStrings = loadedEntities.stream().map(entityData ->
  1133 + entityData.getLatest().get(EntityKeyType.ENTITY_FIELD).get("name").getValue()).collect(Collectors.toList());
  1134 +
  1135 + Assert.assertTrue(listEqualWithoutOrder(devicesNames, loadedStrings));
  1136 +
  1137 + // Not contains Operation
  1138 +
  1139 + pageLink = new EntityDataPageLink(100, 0, null, sortOrder);
  1140 + query = new EntityDataQuery(filter, pageLink, entityFields, null, keyFiltersNotContainsString);
  1141 + data = entityService.findEntityDataByQuery(tenantId, new CustomerId(CustomerId.NULL_UUID), query);
  1142 + loadedEntities = getLoadedEntities(data, query);
  1143 + Assert.assertEquals(devices.size(), loadedEntities.size());
  1144 +
  1145 + loadedStrings = loadedEntities.stream().map(entityData ->
  1146 + entityData.getLatest().get(EntityKeyType.ENTITY_FIELD).get("name").getValue()).collect(Collectors.toList());
  1147 +
  1148 + Assert.assertTrue(listEqualWithoutOrder(devicesNames, loadedStrings));
  1149 +
  1150 + deviceService.deleteDevicesByTenantId(tenantId);
  1151 + }
  1152 +
  1153 + @Test
  1154 + public void testBuildSimplePredicateQueryOperations() throws InterruptedException{
1036 1155
1037 1156 List<Device> devices = new ArrayList<>();
1038 1157
... ... @@ -1053,7 +1172,7 @@ public abstract class BaseEntityServiceTest extends AbstractServiceTest {
1053 1172
1054 1173 EntityDataSortOrder sortOrder = new EntityDataSortOrder(new EntityKey(EntityKeyType.ENTITY_FIELD, "name"), EntityDataSortOrder.Direction.DESC);
1055 1174
1056   - List<KeyFilter> deviceTypeFilters = createStringKeyFilters("entityType", EntityKeyType.ENTITY_FIELD, StringFilterPredicate.StringOperation.EQUAL, "EQUAL");
  1175 + List<KeyFilter> deviceTypeFilters = createStringKeyFilters("type", EntityKeyType.ENTITY_FIELD, StringFilterPredicate.StringOperation.EQUAL, "default");
1057 1176
1058 1177 KeyFilter createdTimeFilter = createNumericKeyFilter("createdTime", EntityKeyType.ENTITY_FIELD, NumericFilterPredicate.NumericOperation.GREATER, 1L);
1059 1178 List<KeyFilter> createdTimeFilters = Collections.singletonList(createdTimeFilter);
... ...