Added minor test to CalculatedFieldController and todo for geo CF state
This commit is contained in:
parent
eea9e6bf6e
commit
95583a0703
@ -103,6 +103,7 @@ public abstract class AbstractCalculatedFieldProcessingService {
|
||||
return Futures.whenAllComplete(argFutures.values()).call(() -> {
|
||||
var result = createStateByType(ctx);
|
||||
result.updateState(ctx, resolveArgumentFutures(argFutures));
|
||||
// TODO: move to state.init() method after merge with alarm rules 2.0
|
||||
if (ctx.hasRelationQueryDynamicArguments() && result instanceof GeofencingCalculatedFieldState geofencingCalculatedFieldState) {
|
||||
geofencingCalculatedFieldState.setLastDynamicArgumentsRefreshTs(System.currentTimeMillis());
|
||||
}
|
||||
|
||||
@ -29,15 +29,23 @@ import org.thingsboard.server.common.data.cf.configuration.CalculatedFieldConfig
|
||||
import org.thingsboard.server.common.data.cf.configuration.Output;
|
||||
import org.thingsboard.server.common.data.cf.configuration.OutputType;
|
||||
import org.thingsboard.server.common.data.cf.configuration.ReferencedEntityKey;
|
||||
import org.thingsboard.server.common.data.cf.configuration.RelationPathQueryDynamicSourceConfiguration;
|
||||
import org.thingsboard.server.common.data.cf.configuration.SimpleCalculatedFieldConfiguration;
|
||||
import org.thingsboard.server.common.data.cf.configuration.geofencing.EntityCoordinates;
|
||||
import org.thingsboard.server.common.data.cf.configuration.geofencing.GeofencingCalculatedFieldConfiguration;
|
||||
import org.thingsboard.server.common.data.cf.configuration.geofencing.ZoneGroupConfiguration;
|
||||
import org.thingsboard.server.common.data.id.DeviceId;
|
||||
import org.thingsboard.server.common.data.relation.EntitySearchDirection;
|
||||
import org.thingsboard.server.common.data.relation.RelationPathLevel;
|
||||
import org.thingsboard.server.common.data.security.Authority;
|
||||
import org.thingsboard.server.dao.service.DaoSqlTest;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
|
||||
import static org.thingsboard.server.common.data.cf.configuration.geofencing.GeofencingReportStrategy.REPORT_TRANSITION_EVENTS_AND_PRESENCE_STATUS;
|
||||
|
||||
@DaoSqlTest
|
||||
public class CalculatedFieldControllerTest extends AbstractControllerTest {
|
||||
@ -84,7 +92,35 @@ public class CalculatedFieldControllerTest extends AbstractControllerTest {
|
||||
assertThat(savedCalculatedField.getEntityId()).isEqualTo(calculatedField.getEntityId());
|
||||
assertThat(savedCalculatedField.getType()).isEqualTo(calculatedField.getType());
|
||||
assertThat(savedCalculatedField.getName()).isEqualTo(calculatedField.getName());
|
||||
assertThat(savedCalculatedField.getConfiguration()).isEqualTo(getCalculatedFieldConfig());
|
||||
assertThat(savedCalculatedField.getConfiguration()).isEqualTo(getSimpleCalculatedFieldConfig());
|
||||
assertThat(savedCalculatedField.getVersion()).isEqualTo(1L);
|
||||
|
||||
savedCalculatedField.setName("Test CF");
|
||||
|
||||
CalculatedField updatedCalculatedField = doPost("/api/calculatedField", savedCalculatedField, CalculatedField.class);
|
||||
|
||||
assertThat(updatedCalculatedField.getName()).isEqualTo(savedCalculatedField.getName());
|
||||
assertThat(updatedCalculatedField.getVersion()).isEqualTo(savedCalculatedField.getVersion() + 1);
|
||||
|
||||
doDelete("/api/calculatedField/" + savedCalculatedField.getId().getId().toString())
|
||||
.andExpect(status().isOk());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSaveGeofencingCalculatedField() throws Exception {
|
||||
Device testDevice = createDevice("Test device", "1234567890");
|
||||
CalculatedField calculatedField = getCalculatedField(testDevice.getId(), getGeofencingCalculatedFieldConfig());
|
||||
|
||||
CalculatedField savedCalculatedField = doPost("/api/calculatedField", calculatedField, CalculatedField.class);
|
||||
|
||||
assertThat(savedCalculatedField).isNotNull();
|
||||
assertThat(savedCalculatedField.getId()).isNotNull();
|
||||
assertThat(savedCalculatedField.getCreatedTime()).isGreaterThan(0);
|
||||
assertThat(savedCalculatedField.getTenantId()).isEqualTo(savedTenant.getId());
|
||||
assertThat(savedCalculatedField.getEntityId()).isEqualTo(calculatedField.getEntityId());
|
||||
assertThat(savedCalculatedField.getType()).isEqualTo(calculatedField.getType());
|
||||
assertThat(savedCalculatedField.getName()).isEqualTo(calculatedField.getName());
|
||||
assertThat(savedCalculatedField.getConfiguration()).isEqualTo(getGeofencingCalculatedFieldConfig());
|
||||
assertThat(savedCalculatedField.getVersion()).isEqualTo(1L);
|
||||
|
||||
savedCalculatedField.setName("Test CF");
|
||||
@ -128,17 +164,41 @@ public class CalculatedFieldControllerTest extends AbstractControllerTest {
|
||||
}
|
||||
|
||||
private CalculatedField getCalculatedField(DeviceId deviceId) {
|
||||
return getCalculatedField(deviceId, getSimpleCalculatedFieldConfig());
|
||||
}
|
||||
|
||||
private CalculatedField getCalculatedField(DeviceId deviceId, CalculatedFieldConfiguration configuration) {
|
||||
CalculatedField calculatedField = new CalculatedField();
|
||||
calculatedField.setEntityId(deviceId);
|
||||
calculatedField.setType(CalculatedFieldType.SIMPLE);
|
||||
calculatedField.setName("Test Calculated Field");
|
||||
calculatedField.setConfigurationVersion(1);
|
||||
calculatedField.setConfiguration(getCalculatedFieldConfig());
|
||||
calculatedField.setConfiguration(configuration);
|
||||
calculatedField.setVersion(1L);
|
||||
return calculatedField;
|
||||
}
|
||||
|
||||
private CalculatedFieldConfiguration getCalculatedFieldConfig() {
|
||||
private CalculatedFieldConfiguration getGeofencingCalculatedFieldConfig() {
|
||||
var config = new GeofencingCalculatedFieldConfiguration();
|
||||
|
||||
var refDynamicSourceConfiguration = new RelationPathQueryDynamicSourceConfiguration();
|
||||
refDynamicSourceConfiguration.setLevels(List.of(new RelationPathLevel(EntitySearchDirection.TO, "FromSafeArea")));
|
||||
|
||||
var zoneGroupConfiguration = new ZoneGroupConfiguration("perimeter", REPORT_TRANSITION_EVENTS_AND_PRESENCE_STATUS, false);
|
||||
zoneGroupConfiguration.setRefDynamicSourceConfiguration(refDynamicSourceConfiguration);
|
||||
|
||||
Output output = new Output();
|
||||
output.setType(OutputType.TIME_SERIES);
|
||||
|
||||
config.setEntityCoordinates(new EntityCoordinates("latitide", "longitude"));
|
||||
config.setZoneGroups(Map.of("safeArea", zoneGroupConfiguration));
|
||||
config.setScheduledUpdateEnabled(false);
|
||||
config.setOutput(output);
|
||||
|
||||
return config;
|
||||
}
|
||||
|
||||
private CalculatedFieldConfiguration getSimpleCalculatedFieldConfig() {
|
||||
SimpleCalculatedFieldConfiguration config = new SimpleCalculatedFieldConfiguration();
|
||||
|
||||
Argument argument = new Argument();
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user