diff --git a/application/src/test/java/org/thingsboard/server/controller/BaseEntityViewControllerTest.java b/application/src/test/java/org/thingsboard/server/controller/BaseEntityViewControllerTest.java index 0daaeca72f..a877cbf71a 100644 --- a/application/src/test/java/org/thingsboard/server/controller/BaseEntityViewControllerTest.java +++ b/application/src/test/java/org/thingsboard/server/controller/BaseEntityViewControllerTest.java @@ -319,12 +319,62 @@ public abstract class BaseEntityViewControllerTest extends AbstractControllerTes } @Test - public void testTheCopyOfAttrsThatMatchWithDeviceCriteriaForTheView() throws Exception { + public void testTheCopyOfAttrsIntoTSForTheView() throws Exception { + Set actualAttributesSet = + getAttributesByKeys("{\"caValue1\":\"value1\", \"caValue2\":true, \"caValue3\":42.0, \"caValue4\":73}"); - String viewDeviceId = testDevice.getId().getId().toString(); - DeviceCredentials deviceCredentials - = doGet("/api/device/" + viewDeviceId + "/credentials", DeviceCredentials.class); + Set expectedActualAttributesSet = + new HashSet<>(Arrays.asList("caValue1", "caValue2", "caValue3", "caValue4")); + assertTrue(actualAttributesSet.containsAll(expectedActualAttributesSet)); + Thread.sleep(1000); + + EntityView savedView = getNewSavedEntityView("Test entity view"); + String urlOfTelemetryValues = "/api/plugins/telemetry/ENTITY_VIEW/" + savedView.getId().getId().toString() + + "/values/attributes?keys=" + String.join(",", actualAttributesSet); + List> values = doGetAsync(urlOfTelemetryValues, List.class); + + assertEquals("value1", getValue(values, "caValue1")); + assertEquals(true, getValue(values, "caValue2")); + assertEquals(42.0, getValue(values, "caValue3")); + assertEquals(73, getValue(values, "caValue4")); + } + + @Test + public void testTheCopyOfAttrsOutOfTSForTheView() throws Exception { + Set actualAttributesSet = + getAttributesByKeys("{\"caValue1\":\"value1\", \"caValue2\":true, \"caValue3\":42.0, \"caValue4\":73}"); + + Set expectedActualAttributesSet = new HashSet<>(Arrays.asList("caValue1", "caValue2", "caValue3", "caValue4")); + assertTrue(actualAttributesSet.containsAll(expectedActualAttributesSet)); + Thread.sleep(1000); + + List> values = doGetAsync("/api/plugins/telemetry/DEVICE/" + testDevice.getId().getId().toString() + + "/values/attributes?keys=" + String.join(",", actualAttributesSet), List.class); + + EntityView view = new EntityView(); + view.setEntityId(testDevice.getId()); + view.setTenantId(savedTenant.getId()); + view.setName("Test entity view"); + view.setKeys(telemetry); + view.setStartTimeMs((long) getValue(values, "lastUpdateTs") * 10); + view.setEndTimeMs((long) getValue(values, "lastUpdateTs") / 10); + EntityView savedView = doPost("/api/entityView", view, EntityView.class); + + String urlOfTelemetryValues = "/api/plugins/telemetry/ENTITY_VIEW/" + savedView.getId().getId().toString() + + "/values/attributes?keys=" + String.join(",", actualAttributesSet); + values = doGetAsync(urlOfTelemetryValues, List.class); + + assertEquals("value1", getValue(values, "caValue1")); + assertEquals(true, getValue(values, "caValue2")); + assertEquals(42.0, getValue(values, "caValue3")); + assertEquals(73, getValue(values, "caValue4")); + } + + private Set getAttributesByKeys(String stringKV) throws Exception { + String viewDeviceId = testDevice.getId().getId().toString(); + DeviceCredentials deviceCredentials = + doGet("/api/device/" + viewDeviceId + "/credentials", DeviceCredentials.class); assertEquals(testDevice.getId(), deviceCredentials.getDeviceId()); String accessToken = deviceCredentials.getCredentialsId(); @@ -339,31 +389,19 @@ public abstract class BaseEntityViewControllerTest extends AbstractControllerTes Thread.sleep(3000); MqttMessage message = new MqttMessage(); - message.setPayload(("{\"caValue1\":\"value1\", \"caValue2\":true, \"caValue3\":42.0, \"caValue4\":73}").getBytes()); + message.setPayload((stringKV).getBytes()); client.publish("v1/devices/me/attributes", message); Thread.sleep(1000); - List actualAttributes = - doGetAsync("/api/plugins/telemetry/DEVICE/" + viewDeviceId + "/keys/attributes", List.class); - Set actualAttributesSet = new HashSet<>(actualAttributes); - - List expectedActualAttributes = Arrays.asList("caValue1", "caValue2", "caValue3", "caValue4"); - Set expectedActualAttributesSet = new HashSet<>(expectedActualAttributes); - assertTrue(actualAttributesSet.containsAll(expectedActualAttributesSet)); - Thread.sleep(1000); - - EntityView savedView = getNewSavedEntityView("Test entity view"); - String urlOfTelemetryValues = "/api/plugins/telemetry/ENTITY_VIEW/" + savedView.getId().getId().toString() + - "/values/attributes?keys=" + String.join(",", actualAttributesSet); - List> values = doGetAsync(urlOfTelemetryValues, List.class); - - assertEquals("value1", getValueOfMap(values, "caValue1")); - assertEquals(true, getValueOfMap(values, "caValue2")); - assertEquals(42.0, getValueOfMap(values, "caValue3")); - assertEquals(73, getValueOfMap(values, "caValue4")); + return new HashSet<>(doGetAsync("/api/plugins/telemetry/DEVICE/" + viewDeviceId + "/keys/attributes", List.class)); } - private Object getValueOfMap(List> values, String stringValue) { + /*private Object getLastTs(List> values) { + return values.stream() + .filter(value -> value.get("key"); + } +*/ + private Object getValue(List> values, String stringValue) { return values.stream() .filter(value -> value.get("key").equals(stringValue)) .findFirst().get().get("value"); diff --git a/dao/src/main/java/org/thingsboard/server/dao/entityview/EntityViewServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/entityview/EntityViewServiceImpl.java index 9fdadcd631..6e7eba08c8 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/entityview/EntityViewServiceImpl.java +++ b/dao/src/main/java/org/thingsboard/server/dao/entityview/EntityViewServiceImpl.java @@ -233,8 +233,8 @@ public class EntityViewServiceImpl extends AbstractEntityService implements Enti long lastUpdateTs = attributeKvEntry.getLastUpdateTs(); return startTime == 0 && endTime == 0 || (endTime == 0 && startTime < lastUpdateTs) || - (startTime == 0 && endTime > lastUpdateTs) || - (startTime < lastUpdateTs && endTime > lastUpdateTs); + (startTime == 0 && endTime > lastUpdateTs) + ? true : startTime < lastUpdateTs && endTime > lastUpdateTs; }).collect(Collectors.toList()); } try {