added tests
This commit is contained in:
		
							parent
							
								
									32bbd83541
								
							
						
					
					
						commit
						e2d17a822d
					
				@ -653,6 +653,7 @@ public abstract class BaseController {
 | 
			
		||||
                    return;
 | 
			
		||||
                case CALCULATED_FIELD:
 | 
			
		||||
                    checkCalculatedFieldId(new CalculatedFieldId(entityId.getId()), operation);
 | 
			
		||||
                    return;
 | 
			
		||||
                default:
 | 
			
		||||
                    checkEntityId(entityId, entitiesService::findEntityByTenantIdAndId, operation);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
@ -0,0 +1,143 @@
 | 
			
		||||
/**
 | 
			
		||||
 * Copyright © 2016-2024 The Thingsboard Authors
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 * you may not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 *     http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
 * See the License for the specific language governing permissions and
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
package org.thingsboard.server.controller;
 | 
			
		||||
 | 
			
		||||
import org.junit.After;
 | 
			
		||||
import org.junit.Before;
 | 
			
		||||
import org.junit.Test;
 | 
			
		||||
import org.thingsboard.common.util.JacksonUtil;
 | 
			
		||||
import org.thingsboard.server.common.data.Tenant;
 | 
			
		||||
import org.thingsboard.server.common.data.User;
 | 
			
		||||
import org.thingsboard.server.common.data.calculated_field.CalculatedField;
 | 
			
		||||
import org.thingsboard.server.common.data.id.DeviceId;
 | 
			
		||||
import org.thingsboard.server.common.data.security.Authority;
 | 
			
		||||
import org.thingsboard.server.dao.service.DaoSqlTest;
 | 
			
		||||
 | 
			
		||||
import java.util.UUID;
 | 
			
		||||
 | 
			
		||||
import static org.assertj.core.api.Assertions.assertThat;
 | 
			
		||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
 | 
			
		||||
 | 
			
		||||
@DaoSqlTest
 | 
			
		||||
public class CalculatedFieldControllerTest extends AbstractControllerTest {
 | 
			
		||||
 | 
			
		||||
    private final DeviceId DEVICE_ID = new DeviceId(UUID.fromString("9e408b94-dc05-47e2-a21c-1a6c0d7bd90a"));
 | 
			
		||||
 | 
			
		||||
    private Tenant savedTenant;
 | 
			
		||||
    private User tenantAdmin;
 | 
			
		||||
 | 
			
		||||
    @Before
 | 
			
		||||
    public void beforeTest() throws Exception {
 | 
			
		||||
        loginSysAdmin();
 | 
			
		||||
 | 
			
		||||
        Tenant tenant = new Tenant();
 | 
			
		||||
        tenant.setTitle("My tenant");
 | 
			
		||||
        savedTenant = saveTenant(tenant);
 | 
			
		||||
        assertThat(savedTenant).isNotNull();
 | 
			
		||||
 | 
			
		||||
        tenantAdmin = new User();
 | 
			
		||||
        tenantAdmin.setAuthority(Authority.TENANT_ADMIN);
 | 
			
		||||
        tenantAdmin.setTenantId(savedTenant.getId());
 | 
			
		||||
        tenantAdmin.setEmail("tenant2@thingsboard.org");
 | 
			
		||||
        tenantAdmin.setFirstName("Joe");
 | 
			
		||||
        tenantAdmin.setLastName("Downs");
 | 
			
		||||
 | 
			
		||||
        tenantAdmin = createUserAndLogin(tenantAdmin, "testPassword1");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @After
 | 
			
		||||
    public void afterTest() throws Exception {
 | 
			
		||||
        loginSysAdmin();
 | 
			
		||||
 | 
			
		||||
        deleteTenant(savedTenant.getId());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void testSaveCalculatedField() throws Exception {
 | 
			
		||||
        CalculatedField calculatedField = getCalculatedField();
 | 
			
		||||
 | 
			
		||||
        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(calculatedField.getConfiguration());
 | 
			
		||||
        assertThat(savedCalculatedField.getVersion()).isEqualTo(calculatedField.getVersion());
 | 
			
		||||
 | 
			
		||||
        savedCalculatedField.setName("Test CF");
 | 
			
		||||
 | 
			
		||||
        CalculatedField updatedCalculatedField = doPost("/api/calculatedField", savedCalculatedField, CalculatedField.class);
 | 
			
		||||
 | 
			
		||||
        assertThat(updatedCalculatedField).isEqualTo(savedCalculatedField);
 | 
			
		||||
 | 
			
		||||
        doDelete("/api/calculatedField/" + savedCalculatedField.getId().getId().toString())
 | 
			
		||||
                .andExpect(status().isOk());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void testGetCalculatedFieldById() throws Exception {
 | 
			
		||||
        CalculatedField calculatedField = getCalculatedField();
 | 
			
		||||
 | 
			
		||||
        CalculatedField savedCalculatedField = doPost("/api/calculatedField", calculatedField, CalculatedField.class);
 | 
			
		||||
        CalculatedField fetchedCalculatedField = doGet("/api/calculatedField/" + savedCalculatedField.getId().getId(), CalculatedField.class);
 | 
			
		||||
 | 
			
		||||
        assertThat(fetchedCalculatedField).isNotNull();
 | 
			
		||||
        assertThat(fetchedCalculatedField).isEqualTo(savedCalculatedField);
 | 
			
		||||
 | 
			
		||||
        doDelete("/api/calculatedField/" + savedCalculatedField.getId().getId().toString())
 | 
			
		||||
                .andExpect(status().isOk());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void testDeleteCalculatedField() throws Exception {
 | 
			
		||||
        CalculatedField calculatedField = getCalculatedField();
 | 
			
		||||
 | 
			
		||||
        CalculatedField savedCalculatedField = doPost("/api/calculatedField", calculatedField, CalculatedField.class);
 | 
			
		||||
 | 
			
		||||
        assertThat(savedCalculatedField).isNotNull();
 | 
			
		||||
 | 
			
		||||
        doDelete("/api/calculatedField/" + savedCalculatedField.getId().getId().toString())
 | 
			
		||||
                .andExpect(status().isOk());
 | 
			
		||||
        doGet("/api/calculatedField/" + savedCalculatedField.getId().getId()).andExpect(status().isNotFound());
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private CalculatedField getCalculatedField() {
 | 
			
		||||
        CalculatedField calculatedField = new CalculatedField();
 | 
			
		||||
        calculatedField.setEntityId(DEVICE_ID);
 | 
			
		||||
        calculatedField.setType("Simple");
 | 
			
		||||
        calculatedField.setName("Test Calculated Field");
 | 
			
		||||
        calculatedField.setConfigurationVersion(1);
 | 
			
		||||
        calculatedField.setConfiguration(JacksonUtil.toJsonNode("{\n" +
 | 
			
		||||
                "    \"T\": {\n" +
 | 
			
		||||
                "    \"key\": \"temperature\",\n" +
 | 
			
		||||
                "    \"type\": \"TIME_SERIES\"\n" +
 | 
			
		||||
                "    },\n" +
 | 
			
		||||
                "    \"H\": {\n" +
 | 
			
		||||
                "    \"key\": \"humidity\",\n" +
 | 
			
		||||
                "    \"type\": \"TIME_SERIES\",\n" +
 | 
			
		||||
                "    \"defaultValue\": 50\n" +
 | 
			
		||||
                "    }\n" +
 | 
			
		||||
                " }\n"));
 | 
			
		||||
        calculatedField.setVersion(1L);
 | 
			
		||||
        return calculatedField;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@ -21,10 +21,7 @@ import lombok.Data;
 | 
			
		||||
import lombok.EqualsAndHashCode;
 | 
			
		||||
import lombok.Getter;
 | 
			
		||||
import lombok.Setter;
 | 
			
		||||
import org.thingsboard.server.common.data.BaseData;
 | 
			
		||||
import org.thingsboard.server.common.data.HasName;
 | 
			
		||||
import org.thingsboard.server.common.data.HasTenantId;
 | 
			
		||||
import org.thingsboard.server.common.data.HasVersion;
 | 
			
		||||
import org.thingsboard.server.common.data.*;
 | 
			
		||||
import org.thingsboard.server.common.data.id.CalculatedFieldId;
 | 
			
		||||
import org.thingsboard.server.common.data.id.EntityId;
 | 
			
		||||
import org.thingsboard.server.common.data.id.TenantId;
 | 
			
		||||
@ -34,7 +31,7 @@ import org.thingsboard.server.common.data.validation.NoXss;
 | 
			
		||||
@Schema
 | 
			
		||||
@Data
 | 
			
		||||
@EqualsAndHashCode(callSuper = true)
 | 
			
		||||
public class CalculatedField extends BaseData<CalculatedFieldId> implements HasName, HasTenantId, HasVersion {
 | 
			
		||||
public class CalculatedField extends BaseData<CalculatedFieldId> implements HasName, HasTenantId, HasVersion, ExportableEntity<CalculatedFieldId> {
 | 
			
		||||
 | 
			
		||||
    private static final long serialVersionUID = 4491966747773381420L;
 | 
			
		||||
 | 
			
		||||
@ -91,4 +88,21 @@ public class CalculatedField extends BaseData<CalculatedFieldId> implements HasN
 | 
			
		||||
        return super.getCreatedTime();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public String toString() {
 | 
			
		||||
        return new StringBuilder()
 | 
			
		||||
                .append("CalculatedField[")
 | 
			
		||||
                .append("tenantId=").append(tenantId)
 | 
			
		||||
                .append(", entityId=").append(entityId)
 | 
			
		||||
                .append(", type='").append(type)
 | 
			
		||||
                .append(", name='").append(name)
 | 
			
		||||
                .append(", configurationVersion=").append(configurationVersion)
 | 
			
		||||
                .append(", configuration=").append(configuration)
 | 
			
		||||
                .append(", version=").append(version)
 | 
			
		||||
                .append(", externalId=").append(externalId)
 | 
			
		||||
                .append(", createdTime=").append(createdTime)
 | 
			
		||||
                .append(", id=").append(id).append(']')
 | 
			
		||||
                .toString();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -39,7 +39,6 @@ public class BaseCalculatedFieldService implements CalculatedFieldService {
 | 
			
		||||
 | 
			
		||||
    private final CalculatedFieldDao calculatedFieldDao;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public CalculatedField save(CalculatedField calculatedField) {
 | 
			
		||||
        log.trace("Executing save, [{}]", calculatedField);
 | 
			
		||||
 | 
			
		||||
@ -0,0 +1,123 @@
 | 
			
		||||
/**
 | 
			
		||||
 * Copyright © 2016-2024 The Thingsboard Authors
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 * you may not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 *     http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
 * See the License for the specific language governing permissions and
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
package org.thingsboard.server.dao.calculated_field;
 | 
			
		||||
 | 
			
		||||
import com.google.common.util.concurrent.ListeningExecutorService;
 | 
			
		||||
import com.google.common.util.concurrent.MoreExecutors;
 | 
			
		||||
import org.junit.After;
 | 
			
		||||
import org.junit.Before;
 | 
			
		||||
import org.junit.Test;
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
import org.thingsboard.common.util.JacksonUtil;
 | 
			
		||||
import org.thingsboard.common.util.ThingsBoardExecutors;
 | 
			
		||||
import org.thingsboard.server.common.data.calculated_field.CalculatedField;
 | 
			
		||||
import org.thingsboard.server.common.data.id.DeviceId;
 | 
			
		||||
import org.thingsboard.server.dao.service.AbstractServiceTest;
 | 
			
		||||
import org.thingsboard.server.dao.service.DaoSqlTest;
 | 
			
		||||
 | 
			
		||||
import java.util.UUID;
 | 
			
		||||
 | 
			
		||||
import static org.assertj.core.api.Assertions.assertThat;
 | 
			
		||||
 | 
			
		||||
@DaoSqlTest
 | 
			
		||||
public class CalculatedFieldServiceTest extends AbstractServiceTest {
 | 
			
		||||
 | 
			
		||||
    private final DeviceId DEVICE_ID = new DeviceId(UUID.fromString("71c73816-361e-4e57-82ab-e1deaa8b7d66"));
 | 
			
		||||
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private CalculatedFieldService calculatedFieldService;
 | 
			
		||||
 | 
			
		||||
    private ListeningExecutorService executor;
 | 
			
		||||
 | 
			
		||||
    @Before
 | 
			
		||||
    public void before() {
 | 
			
		||||
        executor = MoreExecutors.listeningDecorator(ThingsBoardExecutors.newWorkStealingPool(8, getClass()));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @After
 | 
			
		||||
    public void after() {
 | 
			
		||||
        executor.shutdownNow();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void testSaveCalculatedField() {
 | 
			
		||||
        CalculatedField calculatedField = getCalculatedField();
 | 
			
		||||
        CalculatedField savedCalculatedField = calculatedFieldService.save(calculatedField);
 | 
			
		||||
 | 
			
		||||
        assertThat(savedCalculatedField).isNotNull();
 | 
			
		||||
        assertThat(savedCalculatedField.getId()).isNotNull();
 | 
			
		||||
        assertThat(savedCalculatedField.getCreatedTime()).isGreaterThan(0);
 | 
			
		||||
        assertThat(savedCalculatedField.getTenantId()).isEqualTo(calculatedField.getTenantId());
 | 
			
		||||
        assertThat(savedCalculatedField.getEntityId()).isEqualTo(calculatedField.getEntityId());
 | 
			
		||||
        assertThat(savedCalculatedField.getType()).isEqualTo(calculatedField.getType());
 | 
			
		||||
        assertThat(savedCalculatedField.getName()).isEqualTo(calculatedField.getName());
 | 
			
		||||
        assertThat(savedCalculatedField.getConfiguration()).isEqualTo(calculatedField.getConfiguration());
 | 
			
		||||
        assertThat(savedCalculatedField.getVersion()).isEqualTo(calculatedField.getVersion());
 | 
			
		||||
 | 
			
		||||
        savedCalculatedField.setName("Test CF");
 | 
			
		||||
 | 
			
		||||
        CalculatedField updatedCalculatedField = calculatedFieldService.save(savedCalculatedField);
 | 
			
		||||
 | 
			
		||||
        assertThat(updatedCalculatedField).isEqualTo(savedCalculatedField);
 | 
			
		||||
 | 
			
		||||
        calculatedFieldService.deleteCalculatedField(tenantId, savedCalculatedField.getId());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void testFindCalculatedFieldById() {
 | 
			
		||||
        CalculatedField calculatedField = getCalculatedField();
 | 
			
		||||
        CalculatedField savedCalculatedField = calculatedFieldService.save(calculatedField);
 | 
			
		||||
 | 
			
		||||
        CalculatedField fetchedCalculatedField = calculatedFieldService.findById(tenantId, savedCalculatedField.getId());
 | 
			
		||||
 | 
			
		||||
        assertThat(fetchedCalculatedField).isEqualTo(savedCalculatedField);
 | 
			
		||||
 | 
			
		||||
        calculatedFieldService.deleteCalculatedField(tenantId, savedCalculatedField.getId());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void testDeleteCalculatedField() {
 | 
			
		||||
        CalculatedField calculatedField = getCalculatedField();
 | 
			
		||||
        CalculatedField savedCalculatedField = calculatedFieldService.save(calculatedField);
 | 
			
		||||
 | 
			
		||||
        calculatedFieldService.deleteCalculatedField(tenantId, savedCalculatedField.getId());
 | 
			
		||||
 | 
			
		||||
        assertThat(calculatedFieldService.findById(tenantId, savedCalculatedField.getId())).isNull();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private CalculatedField getCalculatedField() {
 | 
			
		||||
        CalculatedField calculatedField = new CalculatedField();
 | 
			
		||||
        calculatedField.setTenantId(tenantId);
 | 
			
		||||
        calculatedField.setEntityId(DEVICE_ID);
 | 
			
		||||
        calculatedField.setType("Simple");
 | 
			
		||||
        calculatedField.setName("Test Calculated Field");
 | 
			
		||||
        calculatedField.setConfigurationVersion(1);
 | 
			
		||||
        calculatedField.setConfiguration(JacksonUtil.toJsonNode("{\n" +
 | 
			
		||||
                "    \"T\": {\n" +
 | 
			
		||||
                "    \"key\": \"temperature\",\n" +
 | 
			
		||||
                "    \"type\": \"TIME_SERIES\"\n" +
 | 
			
		||||
                "    },\n" +
 | 
			
		||||
                "    \"H\": {\n" +
 | 
			
		||||
                "    \"key\": \"humidity\",\n" +
 | 
			
		||||
                "    \"type\": \"TIME_SERIES\",\n" +
 | 
			
		||||
                "    \"defaultValue\": 50\n" +
 | 
			
		||||
                "    }\n" +
 | 
			
		||||
                " }\n"));
 | 
			
		||||
        calculatedField.setVersion(1L);
 | 
			
		||||
        return calculatedField;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user