fixed tests to use new dynamic source configuration
This commit is contained in:
		
							parent
							
								
									2cb05c9d2b
								
							
						
					
					
						commit
						fcba7004f9
					
				@ -36,7 +36,7 @@ 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.RelationQueryDynamicSourceConfiguration;
 | 
					import org.thingsboard.server.common.data.cf.configuration.RelationPathQueryDynamicSourceConfiguration;
 | 
				
			||||||
import org.thingsboard.server.common.data.cf.configuration.ScriptCalculatedFieldConfiguration;
 | 
					import org.thingsboard.server.common.data.cf.configuration.ScriptCalculatedFieldConfiguration;
 | 
				
			||||||
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.EntityCoordinates;
 | 
				
			||||||
@ -47,10 +47,12 @@ import org.thingsboard.server.common.data.id.AssetProfileId;
 | 
				
			|||||||
import org.thingsboard.server.common.data.id.EntityId;
 | 
					import org.thingsboard.server.common.data.id.EntityId;
 | 
				
			||||||
import org.thingsboard.server.common.data.relation.EntityRelation;
 | 
					import org.thingsboard.server.common.data.relation.EntityRelation;
 | 
				
			||||||
import org.thingsboard.server.common.data.relation.EntitySearchDirection;
 | 
					import org.thingsboard.server.common.data.relation.EntitySearchDirection;
 | 
				
			||||||
 | 
					import org.thingsboard.server.common.data.relation.RelationPathLevel;
 | 
				
			||||||
import org.thingsboard.server.controller.CalculatedFieldControllerTest;
 | 
					import org.thingsboard.server.controller.CalculatedFieldControllerTest;
 | 
				
			||||||
import org.thingsboard.server.dao.service.DaoSqlTest;
 | 
					import org.thingsboard.server.dao.service.DaoSqlTest;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import java.util.HashMap;
 | 
					import java.util.HashMap;
 | 
				
			||||||
 | 
					import java.util.List;
 | 
				
			||||||
import java.util.Map;
 | 
					import java.util.Map;
 | 
				
			||||||
import java.util.concurrent.TimeUnit;
 | 
					import java.util.concurrent.TimeUnit;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -760,19 +762,13 @@ public class CalculatedFieldIntegrationTest extends CalculatedFieldControllerTes
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        // Zone groups: ATTRIBUTE on specific assets (one zone per group)
 | 
					        // Zone groups: ATTRIBUTE on specific assets (one zone per group)
 | 
				
			||||||
        ZoneGroupConfiguration allowedZonesGroup = new ZoneGroupConfiguration("zone", REPORT_TRANSITION_EVENTS_AND_PRESENCE_STATUS, false);
 | 
					        ZoneGroupConfiguration allowedZonesGroup = new ZoneGroupConfiguration("zone", REPORT_TRANSITION_EVENTS_AND_PRESENCE_STATUS, false);
 | 
				
			||||||
        var allowedZoneDynamicSourceConfiguration = new RelationQueryDynamicSourceConfiguration();
 | 
					        var allowedZoneDynamicSourceConfiguration = new RelationPathQueryDynamicSourceConfiguration();
 | 
				
			||||||
        allowedZoneDynamicSourceConfiguration.setDirection(EntitySearchDirection.FROM);
 | 
					        allowedZoneDynamicSourceConfiguration.setLevels(List.of(new RelationPathLevel(EntitySearchDirection.FROM, "AllowedZone")));
 | 
				
			||||||
        allowedZoneDynamicSourceConfiguration.setRelationType("AllowedZone");
 | 
					 | 
				
			||||||
        allowedZoneDynamicSourceConfiguration.setMaxLevel(1);
 | 
					 | 
				
			||||||
        allowedZoneDynamicSourceConfiguration.setFetchLastLevelOnly(true);
 | 
					 | 
				
			||||||
        allowedZonesGroup.setRefDynamicSourceConfiguration(allowedZoneDynamicSourceConfiguration);
 | 
					        allowedZonesGroup.setRefDynamicSourceConfiguration(allowedZoneDynamicSourceConfiguration);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        ZoneGroupConfiguration restrictedZonesGroup = new ZoneGroupConfiguration("zone", REPORT_TRANSITION_EVENTS_AND_PRESENCE_STATUS, false);
 | 
					        ZoneGroupConfiguration restrictedZonesGroup = new ZoneGroupConfiguration("zone", REPORT_TRANSITION_EVENTS_AND_PRESENCE_STATUS, false);
 | 
				
			||||||
        var restrictedZoneDynamicSourceConfiguration = new RelationQueryDynamicSourceConfiguration();
 | 
					        var restrictedZoneDynamicSourceConfiguration = new RelationPathQueryDynamicSourceConfiguration();
 | 
				
			||||||
        restrictedZoneDynamicSourceConfiguration.setDirection(EntitySearchDirection.FROM);
 | 
					        restrictedZoneDynamicSourceConfiguration.setLevels(List.of(new RelationPathLevel(EntitySearchDirection.FROM, "RestrictedZone")));
 | 
				
			||||||
        restrictedZoneDynamicSourceConfiguration.setRelationType("RestrictedZone");
 | 
					 | 
				
			||||||
        restrictedZoneDynamicSourceConfiguration.setMaxLevel(1);
 | 
					 | 
				
			||||||
        restrictedZoneDynamicSourceConfiguration.setFetchLastLevelOnly(true);
 | 
					 | 
				
			||||||
        restrictedZonesGroup.setRefDynamicSourceConfiguration(restrictedZoneDynamicSourceConfiguration);
 | 
					        restrictedZonesGroup.setRefDynamicSourceConfiguration(restrictedZoneDynamicSourceConfiguration);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        cfg.setZoneGroups(Map.of("allowedZones", allowedZonesGroup, "restrictedZones", restrictedZonesGroup));
 | 
					        cfg.setZoneGroups(Map.of("allowedZones", allowedZonesGroup, "restrictedZones", restrictedZonesGroup));
 | 
				
			||||||
@ -870,11 +866,8 @@ public class CalculatedFieldIntegrationTest extends CalculatedFieldControllerTes
 | 
				
			|||||||
        cfg.setEntityCoordinates(new EntityCoordinates(ENTITY_ID_LATITUDE_ARGUMENT_KEY, ENTITY_ID_LONGITUDE_ARGUMENT_KEY));
 | 
					        cfg.setEntityCoordinates(new EntityCoordinates(ENTITY_ID_LATITUDE_ARGUMENT_KEY, ENTITY_ID_LONGITUDE_ARGUMENT_KEY));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        var allowedZonesGroup = new ZoneGroupConfiguration("zone", REPORT_TRANSITION_EVENTS_AND_PRESENCE_STATUS, false);
 | 
					        var allowedZonesGroup = new ZoneGroupConfiguration("zone", REPORT_TRANSITION_EVENTS_AND_PRESENCE_STATUS, false);
 | 
				
			||||||
        var allowedZoneDynamicSourceConfiguration = new RelationQueryDynamicSourceConfiguration();
 | 
					        var allowedZoneDynamicSourceConfiguration = new RelationPathQueryDynamicSourceConfiguration();
 | 
				
			||||||
        allowedZoneDynamicSourceConfiguration.setDirection(EntitySearchDirection.FROM);
 | 
					        allowedZoneDynamicSourceConfiguration.setLevels(List.of(new RelationPathLevel(EntitySearchDirection.FROM, "AllowedZone")));
 | 
				
			||||||
        allowedZoneDynamicSourceConfiguration.setRelationType("AllowedZone");
 | 
					 | 
				
			||||||
        allowedZoneDynamicSourceConfiguration.setMaxLevel(1);
 | 
					 | 
				
			||||||
        allowedZoneDynamicSourceConfiguration.setFetchLastLevelOnly(true);
 | 
					 | 
				
			||||||
        allowedZonesGroup.setRefDynamicSourceConfiguration(allowedZoneDynamicSourceConfiguration);
 | 
					        allowedZonesGroup.setRefDynamicSourceConfiguration(allowedZoneDynamicSourceConfiguration);
 | 
				
			||||||
        cfg.setZoneGroups(Map.of("allowedZones", allowedZonesGroup));
 | 
					        cfg.setZoneGroups(Map.of("allowedZones", allowedZonesGroup));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -28,7 +28,7 @@ import org.thingsboard.server.common.data.cf.CalculatedFieldType;
 | 
				
			|||||||
import org.thingsboard.server.common.data.cf.configuration.CalculatedFieldConfiguration;
 | 
					import org.thingsboard.server.common.data.cf.configuration.CalculatedFieldConfiguration;
 | 
				
			||||||
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.RelationQueryDynamicSourceConfiguration;
 | 
					import org.thingsboard.server.common.data.cf.configuration.RelationPathQueryDynamicSourceConfiguration;
 | 
				
			||||||
import org.thingsboard.server.common.data.cf.configuration.geofencing.EntityCoordinates;
 | 
					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.GeofencingCalculatedFieldConfiguration;
 | 
				
			||||||
import org.thingsboard.server.common.data.cf.configuration.geofencing.GeofencingReportStrategy;
 | 
					import org.thingsboard.server.common.data.cf.configuration.geofencing.GeofencingReportStrategy;
 | 
				
			||||||
@ -41,6 +41,7 @@ import org.thingsboard.server.common.data.kv.DoubleDataEntry;
 | 
				
			|||||||
import org.thingsboard.server.common.data.kv.JsonDataEntry;
 | 
					import org.thingsboard.server.common.data.kv.JsonDataEntry;
 | 
				
			||||||
import org.thingsboard.server.common.data.relation.EntityRelation;
 | 
					import org.thingsboard.server.common.data.relation.EntityRelation;
 | 
				
			||||||
import org.thingsboard.server.common.data.relation.EntitySearchDirection;
 | 
					import org.thingsboard.server.common.data.relation.EntitySearchDirection;
 | 
				
			||||||
 | 
					import org.thingsboard.server.common.data.relation.RelationPathLevel;
 | 
				
			||||||
import org.thingsboard.server.dao.relation.RelationService;
 | 
					import org.thingsboard.server.dao.relation.RelationService;
 | 
				
			||||||
import org.thingsboard.server.dao.usagerecord.ApiLimitService;
 | 
					import org.thingsboard.server.dao.usagerecord.ApiLimitService;
 | 
				
			||||||
import org.thingsboard.server.service.cf.CalculatedFieldResult;
 | 
					import org.thingsboard.server.service.cf.CalculatedFieldResult;
 | 
				
			||||||
@ -453,21 +454,15 @@ public class GeofencingCalculatedFieldStateTest {
 | 
				
			|||||||
        config.setEntityCoordinates(entityCoordinates);
 | 
					        config.setEntityCoordinates(entityCoordinates);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        ZoneGroupConfiguration allowedZonesGroup = new ZoneGroupConfiguration("zone", reportStrategy, true);
 | 
					        ZoneGroupConfiguration allowedZonesGroup = new ZoneGroupConfiguration("zone", reportStrategy, true);
 | 
				
			||||||
        var allowedZoneDynamicSourceConfiguration = new RelationQueryDynamicSourceConfiguration();
 | 
					        var allowedZoneDynamicSourceConfiguration = new RelationPathQueryDynamicSourceConfiguration();
 | 
				
			||||||
        allowedZoneDynamicSourceConfiguration.setDirection(EntitySearchDirection.TO);
 | 
					        allowedZoneDynamicSourceConfiguration.setLevels(List.of(new RelationPathLevel(EntitySearchDirection.TO, "AllowedZone")));
 | 
				
			||||||
        allowedZoneDynamicSourceConfiguration.setRelationType("AllowedZone");
 | 
					 | 
				
			||||||
        allowedZoneDynamicSourceConfiguration.setMaxLevel(1);
 | 
					 | 
				
			||||||
        allowedZoneDynamicSourceConfiguration.setFetchLastLevelOnly(true);
 | 
					 | 
				
			||||||
        allowedZonesGroup.setRefDynamicSourceConfiguration(allowedZoneDynamicSourceConfiguration);
 | 
					        allowedZonesGroup.setRefDynamicSourceConfiguration(allowedZoneDynamicSourceConfiguration);
 | 
				
			||||||
        allowedZonesGroup.setRelationType("CurrentZone");
 | 
					        allowedZonesGroup.setRelationType("CurrentZone");
 | 
				
			||||||
        allowedZonesGroup.setDirection(EntitySearchDirection.TO);
 | 
					        allowedZonesGroup.setDirection(EntitySearchDirection.TO);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        ZoneGroupConfiguration restrictedZonesGroup = new ZoneGroupConfiguration("zone", reportStrategy, true);
 | 
					        ZoneGroupConfiguration restrictedZonesGroup = new ZoneGroupConfiguration("zone", reportStrategy, true);
 | 
				
			||||||
        var restrictedZoneDynamicSourceConfiguration = new RelationQueryDynamicSourceConfiguration();
 | 
					        var restrictedZoneDynamicSourceConfiguration = new RelationPathQueryDynamicSourceConfiguration();
 | 
				
			||||||
        restrictedZoneDynamicSourceConfiguration.setDirection(EntitySearchDirection.TO);
 | 
					        restrictedZoneDynamicSourceConfiguration.setLevels(List.of(new RelationPathLevel(EntitySearchDirection.TO, "RestrictedZone")));
 | 
				
			||||||
        restrictedZoneDynamicSourceConfiguration.setRelationType("RestrictedZone");
 | 
					 | 
				
			||||||
        restrictedZoneDynamicSourceConfiguration.setMaxLevel(1);
 | 
					 | 
				
			||||||
        restrictedZoneDynamicSourceConfiguration.setFetchLastLevelOnly(true);
 | 
					 | 
				
			||||||
        restrictedZonesGroup.setRefDynamicSourceConfiguration(restrictedZoneDynamicSourceConfiguration);
 | 
					        restrictedZonesGroup.setRefDynamicSourceConfiguration(restrictedZoneDynamicSourceConfiguration);
 | 
				
			||||||
        restrictedZonesGroup.setRelationType("CurrentZone");
 | 
					        restrictedZonesGroup.setRelationType("CurrentZone");
 | 
				
			||||||
        restrictedZonesGroup.setDirection(EntitySearchDirection.TO);
 | 
					        restrictedZonesGroup.setDirection(EntitySearchDirection.TO);
 | 
				
			||||||
 | 
				
			|||||||
@ -31,7 +31,7 @@ public class ArgumentTest {
 | 
				
			|||||||
    @Test
 | 
					    @Test
 | 
				
			||||||
    void validateShouldReturnTrueIfDynamicSourceConfigurationIsNotNull() {
 | 
					    void validateShouldReturnTrueIfDynamicSourceConfigurationIsNotNull() {
 | 
				
			||||||
        var argument = new Argument();
 | 
					        var argument = new Argument();
 | 
				
			||||||
        argument.setRefDynamicSourceConfiguration(new RelationQueryDynamicSourceConfiguration());
 | 
					        argument.setRefDynamicSourceConfiguration(new RelationPathQueryDynamicSourceConfiguration());
 | 
				
			||||||
        assertThat(argument.hasDynamicSource()).isTrue();
 | 
					        assertThat(argument.hasDynamicSource()).isTrue();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -23,7 +23,7 @@ import org.thingsboard.server.common.data.AttributeScope;
 | 
				
			|||||||
import org.thingsboard.server.common.data.cf.configuration.Argument;
 | 
					import org.thingsboard.server.common.data.cf.configuration.Argument;
 | 
				
			||||||
import org.thingsboard.server.common.data.cf.configuration.ArgumentType;
 | 
					import org.thingsboard.server.common.data.cf.configuration.ArgumentType;
 | 
				
			||||||
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.RelationQueryDynamicSourceConfiguration;
 | 
					import org.thingsboard.server.common.data.cf.configuration.RelationPathQueryDynamicSourceConfiguration;
 | 
				
			||||||
import org.thingsboard.server.common.data.relation.EntityRelation;
 | 
					import org.thingsboard.server.common.data.relation.EntityRelation;
 | 
				
			||||||
import org.thingsboard.server.common.data.relation.EntitySearchDirection;
 | 
					import org.thingsboard.server.common.data.relation.EntitySearchDirection;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -100,7 +100,7 @@ public class ZoneGroupConfigurationTest {
 | 
				
			|||||||
    @Test
 | 
					    @Test
 | 
				
			||||||
    void whenHasDynamicSourceCalled_shouldReturnTrueIfDynamicSourceConfigurationIsNotNull() {
 | 
					    void whenHasDynamicSourceCalled_shouldReturnTrueIfDynamicSourceConfigurationIsNotNull() {
 | 
				
			||||||
        var zoneGroupConfiguration = new ZoneGroupConfiguration("perimeter", REPORT_TRANSITION_EVENTS_AND_PRESENCE_STATUS, false);
 | 
					        var zoneGroupConfiguration = new ZoneGroupConfiguration("perimeter", REPORT_TRANSITION_EVENTS_AND_PRESENCE_STATUS, false);
 | 
				
			||||||
        zoneGroupConfiguration.setRefDynamicSourceConfiguration(new RelationQueryDynamicSourceConfiguration());
 | 
					        zoneGroupConfiguration.setRefDynamicSourceConfiguration(new RelationPathQueryDynamicSourceConfiguration());
 | 
				
			||||||
        assertThat(zoneGroupConfiguration.hasDynamicSource()).isTrue();
 | 
					        assertThat(zoneGroupConfiguration.hasDynamicSource()).isTrue();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -307,7 +307,7 @@ public class JpaRelationDao extends JpaAbstractDaoListeningExecutorService imple
 | 
				
			|||||||
        String sql = buildRelationPathSql(query);
 | 
					        String sql = buildRelationPathSql(query);
 | 
				
			||||||
        Object[] params = buildRelationPathParams(query);
 | 
					        Object[] params = buildRelationPathParams(query);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        log.info("[{}] relation path query: {}", tenantId, sql);
 | 
					        log.trace("[{}] relation path query: {}", tenantId, sql);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return jdbcTemplate.queryForList(sql, params).stream()
 | 
					        return jdbcTemplate.queryForList(sql, params).stream()
 | 
				
			||||||
                .map(row -> {
 | 
					                .map(row -> {
 | 
				
			||||||
 | 
				
			|||||||
@ -31,7 +31,7 @@ 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.RelationQueryDynamicSourceConfiguration;
 | 
					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.EntityCoordinates;
 | 
				
			||||||
import org.thingsboard.server.common.data.cf.configuration.geofencing.GeofencingCalculatedFieldConfiguration;
 | 
					import org.thingsboard.server.common.data.cf.configuration.geofencing.GeofencingCalculatedFieldConfiguration;
 | 
				
			||||||
@ -39,15 +39,19 @@ import org.thingsboard.server.common.data.cf.configuration.geofencing.ZoneGroupC
 | 
				
			|||||||
import org.thingsboard.server.common.data.id.EntityId;
 | 
					import org.thingsboard.server.common.data.id.EntityId;
 | 
				
			||||||
import org.thingsboard.server.common.data.relation.EntityRelation;
 | 
					import org.thingsboard.server.common.data.relation.EntityRelation;
 | 
				
			||||||
import org.thingsboard.server.common.data.relation.EntitySearchDirection;
 | 
					import org.thingsboard.server.common.data.relation.EntitySearchDirection;
 | 
				
			||||||
 | 
					import org.thingsboard.server.common.data.relation.RelationPathLevel;
 | 
				
			||||||
import org.thingsboard.server.dao.cf.CalculatedFieldService;
 | 
					import org.thingsboard.server.dao.cf.CalculatedFieldService;
 | 
				
			||||||
import org.thingsboard.server.dao.device.DeviceService;
 | 
					import org.thingsboard.server.dao.device.DeviceService;
 | 
				
			||||||
import org.thingsboard.server.dao.exception.DataValidationException;
 | 
					import org.thingsboard.server.dao.exception.DataValidationException;
 | 
				
			||||||
import org.thingsboard.server.dao.tenant.TbTenantProfileCache;
 | 
					import org.thingsboard.server.dao.tenant.TbTenantProfileCache;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.ArrayList;
 | 
				
			||||||
 | 
					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.assertj.core.api.Assertions.assertThatThrownBy;
 | 
					import static org.assertj.core.api.Assertions.assertThatThrownBy;
 | 
				
			||||||
 | 
					import static org.mockito.Mockito.mock;
 | 
				
			||||||
import static org.thingsboard.server.common.data.cf.configuration.geofencing.GeofencingReportStrategy.REPORT_TRANSITION_EVENTS_AND_PRESENCE_STATUS;
 | 
					import static org.thingsboard.server.common.data.cf.configuration.geofencing.GeofencingReportStrategy.REPORT_TRANSITION_EVENTS_AND_PRESENCE_STATUS;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@DaoSqlTest
 | 
					@DaoSqlTest
 | 
				
			||||||
@ -112,10 +116,8 @@ public class CalculatedFieldServiceTest extends AbstractServiceTest {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        // Zone-group argument (ATTRIBUTE) — make it DYNAMIC so scheduling is enabled
 | 
					        // Zone-group argument (ATTRIBUTE) — make it DYNAMIC so scheduling is enabled
 | 
				
			||||||
        ZoneGroupConfiguration zoneGroupConfiguration = new ZoneGroupConfiguration("allowed", REPORT_TRANSITION_EVENTS_AND_PRESENCE_STATUS, false);
 | 
					        ZoneGroupConfiguration zoneGroupConfiguration = new ZoneGroupConfiguration("allowed", REPORT_TRANSITION_EVENTS_AND_PRESENCE_STATUS, false);
 | 
				
			||||||
        var dynamicSourceConfiguration = new RelationQueryDynamicSourceConfiguration();
 | 
					        var dynamicSourceConfiguration = new RelationPathQueryDynamicSourceConfiguration();
 | 
				
			||||||
        dynamicSourceConfiguration.setDirection(EntitySearchDirection.FROM);
 | 
					        dynamicSourceConfiguration.setLevels(List.of(new RelationPathLevel(EntitySearchDirection.FROM, EntityRelation.CONTAINS_TYPE)));
 | 
				
			||||||
        dynamicSourceConfiguration.setMaxLevel(1);
 | 
					 | 
				
			||||||
        dynamicSourceConfiguration.setRelationType(EntityRelation.CONTAINS_TYPE);
 | 
					 | 
				
			||||||
        zoneGroupConfiguration.setRefDynamicSourceConfiguration(dynamicSourceConfiguration);
 | 
					        zoneGroupConfiguration.setRefDynamicSourceConfiguration(dynamicSourceConfiguration);
 | 
				
			||||||
        cfg.setZoneGroups(Map.of("allowed", zoneGroupConfiguration));
 | 
					        cfg.setZoneGroups(Map.of("allowed", zoneGroupConfiguration));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -150,19 +152,26 @@ public class CalculatedFieldServiceTest extends AbstractServiceTest {
 | 
				
			|||||||
        // Arrange a device
 | 
					        // Arrange a device
 | 
				
			||||||
        Device device = createTestDevice();
 | 
					        Device device = createTestDevice();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // Build a valid Geofencing configuration
 | 
					 | 
				
			||||||
        GeofencingCalculatedFieldConfiguration cfg = new GeofencingCalculatedFieldConfiguration();
 | 
					        GeofencingCalculatedFieldConfiguration cfg = new GeofencingCalculatedFieldConfiguration();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // Coordinates: TS_LATEST, no dynamic source
 | 
					        // Coordinates: TS_LATEST, no dynamic source
 | 
				
			||||||
        EntityCoordinates entityCoordinates = new EntityCoordinates("latitude", "longitude");
 | 
					        EntityCoordinates entityCoordinates = new EntityCoordinates("latitude", "longitude");
 | 
				
			||||||
        cfg.setEntityCoordinates(entityCoordinates);
 | 
					        cfg.setEntityCoordinates(entityCoordinates);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // Zone-group argument (ATTRIBUTE) — make it DYNAMIC so scheduling is enabled
 | 
					        int maxRelationLevel = tbTenantProfileCache.get(tenantId)
 | 
				
			||||||
 | 
					                .getDefaultProfileConfiguration()
 | 
				
			||||||
 | 
					                .getMaxRelationLevelPerCfArgument();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Zone-group argument (ATTRIBUTE)
 | 
				
			||||||
        ZoneGroupConfiguration zoneGroupConfiguration = new ZoneGroupConfiguration( "allowed", REPORT_TRANSITION_EVENTS_AND_PRESENCE_STATUS, false);
 | 
					        ZoneGroupConfiguration zoneGroupConfiguration = new ZoneGroupConfiguration( "allowed", REPORT_TRANSITION_EVENTS_AND_PRESENCE_STATUS, false);
 | 
				
			||||||
        var dynamicSourceConfiguration = new RelationQueryDynamicSourceConfiguration();
 | 
					        var dynamicSourceConfiguration = new RelationPathQueryDynamicSourceConfiguration();
 | 
				
			||||||
        dynamicSourceConfiguration.setDirection(EntitySearchDirection.FROM);
 | 
					
 | 
				
			||||||
        dynamicSourceConfiguration.setMaxLevel(Integer.MAX_VALUE);
 | 
					        List<RelationPathLevel> levels = new ArrayList<>();
 | 
				
			||||||
        dynamicSourceConfiguration.setRelationType(EntityRelation.CONTAINS_TYPE);
 | 
					        for (int i = 0; i < maxRelationLevel + 1; i++) {
 | 
				
			||||||
 | 
					            levels.add(mock(RelationPathLevel.class));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        dynamicSourceConfiguration.setLevels(levels);
 | 
				
			||||||
        zoneGroupConfiguration.setRefDynamicSourceConfiguration(dynamicSourceConfiguration);
 | 
					        zoneGroupConfiguration.setRefDynamicSourceConfiguration(dynamicSourceConfiguration);
 | 
				
			||||||
        cfg.setZoneGroups(Map.of("allowed", zoneGroupConfiguration));
 | 
					        cfg.setZoneGroups(Map.of("allowed", zoneGroupConfiguration));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -195,10 +204,8 @@ public class CalculatedFieldServiceTest extends AbstractServiceTest {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        // Zone-group argument (ATTRIBUTE) — make it DYNAMIC so scheduling is enabled
 | 
					        // Zone-group argument (ATTRIBUTE) — make it DYNAMIC so scheduling is enabled
 | 
				
			||||||
        ZoneGroupConfiguration zoneGroupConfiguration = new ZoneGroupConfiguration( "allowed", REPORT_TRANSITION_EVENTS_AND_PRESENCE_STATUS, false);
 | 
					        ZoneGroupConfiguration zoneGroupConfiguration = new ZoneGroupConfiguration( "allowed", REPORT_TRANSITION_EVENTS_AND_PRESENCE_STATUS, false);
 | 
				
			||||||
        var dynamicSourceConfiguration = new RelationQueryDynamicSourceConfiguration();
 | 
					        var dynamicSourceConfiguration = new RelationPathQueryDynamicSourceConfiguration();
 | 
				
			||||||
        dynamicSourceConfiguration.setDirection(EntitySearchDirection.FROM);
 | 
					        dynamicSourceConfiguration.setLevels(List.of(new RelationPathLevel(EntitySearchDirection.FROM, EntityRelation.CONTAINS_TYPE)));
 | 
				
			||||||
        dynamicSourceConfiguration.setMaxLevel(1);
 | 
					 | 
				
			||||||
        dynamicSourceConfiguration.setRelationType(EntityRelation.CONTAINS_TYPE);
 | 
					 | 
				
			||||||
        zoneGroupConfiguration.setRefDynamicSourceConfiguration(dynamicSourceConfiguration);
 | 
					        zoneGroupConfiguration.setRefDynamicSourceConfiguration(dynamicSourceConfiguration);
 | 
				
			||||||
        cfg.setZoneGroups(Map.of("allowed", zoneGroupConfiguration));
 | 
					        cfg.setZoneGroups(Map.of("allowed", zoneGroupConfiguration));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -33,7 +33,7 @@ import org.thingsboard.server.common.data.cf.configuration.ArgumentType;
 | 
				
			|||||||
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.RelationQueryDynamicSourceConfiguration;
 | 
					import org.thingsboard.server.common.data.cf.configuration.RelationPathQueryDynamicSourceConfiguration;
 | 
				
			||||||
import org.thingsboard.server.common.data.cf.configuration.ScriptCalculatedFieldConfiguration;
 | 
					import org.thingsboard.server.common.data.cf.configuration.ScriptCalculatedFieldConfiguration;
 | 
				
			||||||
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.EntityCoordinates;
 | 
				
			||||||
@ -50,10 +50,12 @@ import org.thingsboard.server.common.data.id.TenantId;
 | 
				
			|||||||
import org.thingsboard.server.common.data.id.UserId;
 | 
					import org.thingsboard.server.common.data.id.UserId;
 | 
				
			||||||
import org.thingsboard.server.common.data.relation.EntityRelation;
 | 
					import org.thingsboard.server.common.data.relation.EntityRelation;
 | 
				
			||||||
import org.thingsboard.server.common.data.relation.EntitySearchDirection;
 | 
					import org.thingsboard.server.common.data.relation.EntitySearchDirection;
 | 
				
			||||||
 | 
					import org.thingsboard.server.common.data.relation.RelationPathLevel;
 | 
				
			||||||
import org.thingsboard.server.msa.AbstractContainerTest;
 | 
					import org.thingsboard.server.msa.AbstractContainerTest;
 | 
				
			||||||
import org.thingsboard.server.msa.ui.utils.EntityPrototypes;
 | 
					import org.thingsboard.server.msa.ui.utils.EntityPrototypes;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import java.util.HashMap;
 | 
					import java.util.HashMap;
 | 
				
			||||||
 | 
					import java.util.List;
 | 
				
			||||||
import java.util.Map;
 | 
					import java.util.Map;
 | 
				
			||||||
import java.util.concurrent.TimeUnit;
 | 
					import java.util.concurrent.TimeUnit;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -366,19 +368,13 @@ public class CalculatedFieldTest extends AbstractContainerTest {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        // Dynamic groups via relations
 | 
					        // Dynamic groups via relations
 | 
				
			||||||
        ZoneGroupConfiguration allowedZoneGroupConfiguration = new ZoneGroupConfiguration("zone", REPORT_TRANSITION_EVENTS_AND_PRESENCE_STATUS, false);
 | 
					        ZoneGroupConfiguration allowedZoneGroupConfiguration = new ZoneGroupConfiguration("zone", REPORT_TRANSITION_EVENTS_AND_PRESENCE_STATUS, false);
 | 
				
			||||||
        var allowedDynamicSourceConfiguration = new RelationQueryDynamicSourceConfiguration();
 | 
					        var allowedDynamicSourceConfiguration = new RelationPathQueryDynamicSourceConfiguration();
 | 
				
			||||||
        allowedDynamicSourceConfiguration.setDirection(EntitySearchDirection.FROM);
 | 
					        allowedDynamicSourceConfiguration.setLevels(List.of(new RelationPathLevel(EntitySearchDirection.FROM, "AllowedZone")));
 | 
				
			||||||
        allowedDynamicSourceConfiguration.setMaxLevel(1);
 | 
					 | 
				
			||||||
        allowedDynamicSourceConfiguration.setFetchLastLevelOnly(true);
 | 
					 | 
				
			||||||
        allowedDynamicSourceConfiguration.setRelationType("AllowedZone");
 | 
					 | 
				
			||||||
        allowedZoneGroupConfiguration.setRefDynamicSourceConfiguration(allowedDynamicSourceConfiguration);
 | 
					        allowedZoneGroupConfiguration.setRefDynamicSourceConfiguration(allowedDynamicSourceConfiguration);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        ZoneGroupConfiguration restrictedZoneGroupConfiguration = new ZoneGroupConfiguration("zone", REPORT_TRANSITION_EVENTS_AND_PRESENCE_STATUS, false);
 | 
					        ZoneGroupConfiguration restrictedZoneGroupConfiguration = new ZoneGroupConfiguration("zone", REPORT_TRANSITION_EVENTS_AND_PRESENCE_STATUS, false);
 | 
				
			||||||
        var restrictedDynamicSourceConfiguration = new RelationQueryDynamicSourceConfiguration();
 | 
					        var restrictedDynamicSourceConfiguration = new RelationPathQueryDynamicSourceConfiguration();
 | 
				
			||||||
        restrictedDynamicSourceConfiguration.setDirection(EntitySearchDirection.FROM);
 | 
					        restrictedDynamicSourceConfiguration.setLevels(List.of(new RelationPathLevel(EntitySearchDirection.FROM, "RestrictedZone")));
 | 
				
			||||||
        restrictedDynamicSourceConfiguration.setMaxLevel(1);
 | 
					 | 
				
			||||||
        restrictedDynamicSourceConfiguration.setFetchLastLevelOnly(true);
 | 
					 | 
				
			||||||
        restrictedDynamicSourceConfiguration.setRelationType("RestrictedZone");
 | 
					 | 
				
			||||||
        restrictedZoneGroupConfiguration.setRefDynamicSourceConfiguration(restrictedDynamicSourceConfiguration);
 | 
					        restrictedZoneGroupConfiguration.setRefDynamicSourceConfiguration(restrictedDynamicSourceConfiguration);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        cfg.setZoneGroups(Map.of("allowedZones", allowedZoneGroupConfiguration, "restrictedZones", restrictedZoneGroupConfiguration));
 | 
					        cfg.setZoneGroups(Map.of("allowedZones", allowedZoneGroupConfiguration, "restrictedZones", restrictedZoneGroupConfiguration));
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user