DataValidator: refactored validateName to have an exception Prefix to feet many entity types needs
This commit is contained in:
		
							parent
							
								
									77d4a29f2e
								
							
						
					
					
						commit
						8224051d35
					
				@ -86,12 +86,12 @@ public abstract class DataValidator<D extends BaseData<?>> {
 | 
			
		||||
    public void validateDelete(TenantId tenantId, EntityId entityId) {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected void validateName(String dataType, String name) {
 | 
			
		||||
    protected void validateName(String exceptionPrefix, String name) {
 | 
			
		||||
        if (StringUtils.isEmpty(name) || name.trim().length() == 0) {
 | 
			
		||||
            throw new DataValidationException(dataType + " name should be specified!");
 | 
			
		||||
            throw new DataValidationException(exceptionPrefix + " should be specified!");
 | 
			
		||||
        }
 | 
			
		||||
        if (StringUtils.contains0x00(name)) {
 | 
			
		||||
            throw new DataValidationException(dataType + " name should not contain 0x00 symbol!");
 | 
			
		||||
            throw new DataValidationException(exceptionPrefix + " should not contain 0x00 symbol!");
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -64,12 +64,7 @@ public class AssetDataValidator extends DataValidator<Asset> {
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    protected void validateDataImpl(TenantId tenantId, Asset asset) {
 | 
			
		||||
        if (StringUtils.isEmpty(asset.getName()) || asset.getName().trim().length() == 0) {
 | 
			
		||||
            throw new DataValidationException("Asset name should be specified!");
 | 
			
		||||
        }
 | 
			
		||||
        if (StringUtils.contains0x00(asset.getName())) {
 | 
			
		||||
            throw new DataValidationException("Asset name should not contain 0x00 symbol!");
 | 
			
		||||
        }
 | 
			
		||||
        validateName("Asset name", asset.getName());
 | 
			
		||||
        if (asset.getTenantId() == null) {
 | 
			
		||||
            throw new DataValidationException("Asset should be assigned to tenant!");
 | 
			
		||||
        } else {
 | 
			
		||||
 | 
			
		||||
@ -61,12 +61,7 @@ public class DeviceDataValidator extends AbstractHasOtaPackageValidator<Device>
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    protected void validateDataImpl(TenantId tenantId, Device device) {
 | 
			
		||||
        if (StringUtils.isEmpty(device.getName()) || device.getName().trim().length() == 0) {
 | 
			
		||||
            throw new DataValidationException("Device name should be specified!");
 | 
			
		||||
        }
 | 
			
		||||
        if (StringUtils.contains0x00(device.getName())) {
 | 
			
		||||
            throw new DataValidationException("Device name should not contain 0x00 symbol!");
 | 
			
		||||
        }
 | 
			
		||||
        validateName("Device name", device.getName());
 | 
			
		||||
        if (device.getTenantId() == null) {
 | 
			
		||||
            throw new DataValidationException("Device should be assigned to tenant!");
 | 
			
		||||
        } else {
 | 
			
		||||
 | 
			
		||||
@ -41,10 +41,12 @@ public class DataValidatorTest {
 | 
			
		||||
            "Gdy Pomorze nie pomoże, to pomoże może morze, a gdy morze nie pomoże, to pomoże może Gdańsk",
 | 
			
		||||
    })
 | 
			
		||||
    void validateName_thenOK(final String name) {
 | 
			
		||||
        dataValidator.validateName("Device", name);
 | 
			
		||||
        dataValidator.validateName("Asset", name);
 | 
			
		||||
        dataValidator.validateName("Customer", name);
 | 
			
		||||
        dataValidator.validateName("Tenant", name);
 | 
			
		||||
        dataValidator.validateName("Device name", name);
 | 
			
		||||
        dataValidator.validateName("Asset name", name);
 | 
			
		||||
        dataValidator.validateName("Asset profile name", name);
 | 
			
		||||
        dataValidator.validateName("Alarm type", name);
 | 
			
		||||
        dataValidator.validateName("Customer name", name);
 | 
			
		||||
        dataValidator.validateName("Tenant name", name);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @ParameterizedTest
 | 
			
		||||
@ -55,13 +57,13 @@ public class DataValidatorTest {
 | 
			
		||||
    })
 | 
			
		||||
    void validateName_thenDataValidationException(final String name) {
 | 
			
		||||
        DataValidationException exception;
 | 
			
		||||
        exception = Assertions.assertThrows(DataValidationException.class, () -> dataValidator.validateName("Asset", name));
 | 
			
		||||
        log.warn("Exception message Asset: {}", exception.getMessage());
 | 
			
		||||
        assertThat(exception.getMessage()).as("message Asset").containsPattern("Asset .*name.*");
 | 
			
		||||
        exception = Assertions.assertThrows(DataValidationException.class, () -> dataValidator.validateName("Asset name", name));
 | 
			
		||||
        log.warn("Exception message Asset name: {}", exception.getMessage());
 | 
			
		||||
        assertThat(exception.getMessage()).as("message Asset name").containsPattern("Asset name .*");
 | 
			
		||||
 | 
			
		||||
        exception = Assertions.assertThrows(DataValidationException.class, () -> dataValidator.validateName("Device", name));
 | 
			
		||||
        log.warn("Exception message Device: {}", exception.getMessage());
 | 
			
		||||
        assertThat(exception.getMessage()).as("message Device").containsPattern("Device .*name.*");
 | 
			
		||||
        exception = Assertions.assertThrows(DataValidationException.class, () -> dataValidator.validateName("Device name", name));
 | 
			
		||||
        log.warn("Exception message Device name: {}", exception.getMessage());
 | 
			
		||||
        assertThat(exception.getMessage()).as("message Device name").containsPattern("Device name .*");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @ParameterizedTest
 | 
			
		||||
 | 
			
		||||
@ -16,6 +16,7 @@
 | 
			
		||||
package org.thingsboard.server.dao.service.validator;
 | 
			
		||||
 | 
			
		||||
import lombok.extern.slf4j.Slf4j;
 | 
			
		||||
import org.junit.jupiter.api.Assertions;
 | 
			
		||||
import org.junit.jupiter.api.BeforeEach;
 | 
			
		||||
import org.junit.jupiter.params.ParameterizedTest;
 | 
			
		||||
import org.junit.jupiter.params.provider.ValueSource;
 | 
			
		||||
@ -31,8 +32,7 @@ import org.thingsboard.server.dao.tenant.TenantService;
 | 
			
		||||
 | 
			
		||||
import java.util.UUID;
 | 
			
		||||
 | 
			
		||||
import static org.assertj.core.api.Assertions.assertThatThrownBy;
 | 
			
		||||
import static org.assertj.core.api.ThrowableAssert.catchThrowableOfType;
 | 
			
		||||
import static org.assertj.core.api.Assertions.assertThat;
 | 
			
		||||
import static org.mockito.BDDMockito.willReturn;
 | 
			
		||||
 | 
			
		||||
@SpringBootTest(classes = AssetDataValidator.class)
 | 
			
		||||
@ -77,13 +77,9 @@ class AssetDataValidatorTest {
 | 
			
		||||
        asset.setTenantId(tenantId);
 | 
			
		||||
        asset.setName(name);
 | 
			
		||||
 | 
			
		||||
        DataValidationException exception = catchThrowableOfType(() ->
 | 
			
		||||
                validator.validateDataImpl(tenantId, asset), DataValidationException.class);
 | 
			
		||||
        log.warn("Exception message: {}", exception == null ? null : exception.getMessage());
 | 
			
		||||
 | 
			
		||||
        assertThatThrownBy(() -> validator.validateDataImpl(tenantId, asset))
 | 
			
		||||
                .isInstanceOf(DataValidationException.class)
 | 
			
		||||
                .hasMessageMatching(".*Asset.*");
 | 
			
		||||
        DataValidationException exception = Assertions.assertThrows(DataValidationException.class, () -> validator.validateDataImpl(tenantId, asset));
 | 
			
		||||
        log.warn("Exception message: {}", exception.getMessage());
 | 
			
		||||
        assertThat(exception.getMessage()).as("message Asset name").containsPattern("Asset name .*");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -16,6 +16,7 @@
 | 
			
		||||
package org.thingsboard.server.dao.service.validator;
 | 
			
		||||
 | 
			
		||||
import lombok.extern.slf4j.Slf4j;
 | 
			
		||||
import org.junit.jupiter.api.Assertions;
 | 
			
		||||
import org.junit.jupiter.api.BeforeEach;
 | 
			
		||||
import org.junit.jupiter.params.ParameterizedTest;
 | 
			
		||||
import org.junit.jupiter.params.provider.ValueSource;
 | 
			
		||||
@ -31,8 +32,7 @@ import org.thingsboard.server.dao.tenant.TenantService;
 | 
			
		||||
 | 
			
		||||
import java.util.UUID;
 | 
			
		||||
 | 
			
		||||
import static org.assertj.core.api.Assertions.assertThatThrownBy;
 | 
			
		||||
import static org.assertj.core.api.ThrowableAssert.catchThrowableOfType;
 | 
			
		||||
import static org.assertj.core.api.Assertions.assertThat;
 | 
			
		||||
import static org.mockito.BDDMockito.willReturn;
 | 
			
		||||
 | 
			
		||||
@SpringBootTest(classes = DeviceDataValidator.class)
 | 
			
		||||
@ -72,19 +72,14 @@ class DeviceDataValidatorTest {
 | 
			
		||||
            "F0929906\000\000\000\000\000\000\000\000\000", "\000\000\000F0929906",
 | 
			
		||||
            "\u0000F0929906", "F092\u00009906", "F0929906\u0000"
 | 
			
		||||
    })
 | 
			
		||||
 | 
			
		||||
    void testDeviceName_thenDataValidationException(final String name) {
 | 
			
		||||
        Device device = new Device();
 | 
			
		||||
        device.setTenantId(tenantId);
 | 
			
		||||
        device.setName(name);
 | 
			
		||||
 | 
			
		||||
        DataValidationException exception = catchThrowableOfType(() ->
 | 
			
		||||
                validator.validateDataImpl(tenantId, device), DataValidationException.class);
 | 
			
		||||
        log.warn("Exception message: {}", exception == null ? null : exception.getMessage());
 | 
			
		||||
 | 
			
		||||
        assertThatThrownBy(() -> validator.validateDataImpl(tenantId, device))
 | 
			
		||||
                .isInstanceOf(DataValidationException.class)
 | 
			
		||||
                .hasMessageMatching(".*Device.*");
 | 
			
		||||
        DataValidationException exception = Assertions.assertThrows(DataValidationException.class, () -> validator.validateDataImpl(tenantId, device));
 | 
			
		||||
        log.warn("Exception message: {}", exception.getMessage());
 | 
			
		||||
        assertThat(exception.getMessage()).as("message Device name").containsPattern("Device name .*");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user