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(() -> {
 | 
					        return Futures.whenAllComplete(argFutures.values()).call(() -> {
 | 
				
			||||||
            var result = createStateByType(ctx);
 | 
					            var result = createStateByType(ctx);
 | 
				
			||||||
            result.updateState(ctx, resolveArgumentFutures(argFutures));
 | 
					            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) {
 | 
					            if (ctx.hasRelationQueryDynamicArguments() && result instanceof GeofencingCalculatedFieldState geofencingCalculatedFieldState) {
 | 
				
			||||||
                geofencingCalculatedFieldState.setLastDynamicArgumentsRefreshTs(System.currentTimeMillis());
 | 
					                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.Output;
 | 
				
			||||||
import org.thingsboard.server.common.data.cf.configuration.OutputType;
 | 
					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.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.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.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.common.data.security.Authority;
 | 
				
			||||||
import org.thingsboard.server.dao.service.DaoSqlTest;
 | 
					import org.thingsboard.server.dao.service.DaoSqlTest;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.List;
 | 
				
			||||||
import java.util.Map;
 | 
					import java.util.Map;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import static org.assertj.core.api.Assertions.assertThat;
 | 
					import static org.assertj.core.api.Assertions.assertThat;
 | 
				
			||||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
 | 
					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
 | 
					@DaoSqlTest
 | 
				
			||||||
public class CalculatedFieldControllerTest extends AbstractControllerTest {
 | 
					public class CalculatedFieldControllerTest extends AbstractControllerTest {
 | 
				
			||||||
@ -84,7 +92,35 @@ public class CalculatedFieldControllerTest extends AbstractControllerTest {
 | 
				
			|||||||
        assertThat(savedCalculatedField.getEntityId()).isEqualTo(calculatedField.getEntityId());
 | 
					        assertThat(savedCalculatedField.getEntityId()).isEqualTo(calculatedField.getEntityId());
 | 
				
			||||||
        assertThat(savedCalculatedField.getType()).isEqualTo(calculatedField.getType());
 | 
					        assertThat(savedCalculatedField.getType()).isEqualTo(calculatedField.getType());
 | 
				
			||||||
        assertThat(savedCalculatedField.getName()).isEqualTo(calculatedField.getName());
 | 
					        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);
 | 
					        assertThat(savedCalculatedField.getVersion()).isEqualTo(1L);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        savedCalculatedField.setName("Test CF");
 | 
					        savedCalculatedField.setName("Test CF");
 | 
				
			||||||
@ -128,17 +164,41 @@ public class CalculatedFieldControllerTest extends AbstractControllerTest {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private CalculatedField getCalculatedField(DeviceId deviceId) {
 | 
					    private CalculatedField getCalculatedField(DeviceId deviceId) {
 | 
				
			||||||
 | 
					        return getCalculatedField(deviceId, getSimpleCalculatedFieldConfig());
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private CalculatedField getCalculatedField(DeviceId deviceId, CalculatedFieldConfiguration configuration) {
 | 
				
			||||||
        CalculatedField calculatedField = new CalculatedField();
 | 
					        CalculatedField calculatedField = new CalculatedField();
 | 
				
			||||||
        calculatedField.setEntityId(deviceId);
 | 
					        calculatedField.setEntityId(deviceId);
 | 
				
			||||||
        calculatedField.setType(CalculatedFieldType.SIMPLE);
 | 
					        calculatedField.setType(CalculatedFieldType.SIMPLE);
 | 
				
			||||||
        calculatedField.setName("Test Calculated Field");
 | 
					        calculatedField.setName("Test Calculated Field");
 | 
				
			||||||
        calculatedField.setConfigurationVersion(1);
 | 
					        calculatedField.setConfigurationVersion(1);
 | 
				
			||||||
        calculatedField.setConfiguration(getCalculatedFieldConfig());
 | 
					        calculatedField.setConfiguration(configuration);
 | 
				
			||||||
        calculatedField.setVersion(1L);
 | 
					        calculatedField.setVersion(1L);
 | 
				
			||||||
        return calculatedField;
 | 
					        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();
 | 
					        SimpleCalculatedFieldConfiguration config = new SimpleCalculatedFieldConfiguration();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Argument argument = new Argument();
 | 
					        Argument argument = new Argument();
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user