Browse Source

Fix admin settings validation

pull/8265/head
ViacheslavKlimov 4 years ago
parent
commit
583767b89c
  1. 4
      dao/src/main/java/org/thingsboard/server/dao/service/validator/AdminSettingsDataValidator.java
  2. 42
      dao/src/test/java/org/thingsboard/server/dao/service/BaseAdminSettingsServiceTest.java

4
dao/src/main/java/org/thingsboard/server/dao/service/validator/AdminSettingsDataValidator.java

@ -32,8 +32,8 @@ public class AdminSettingsDataValidator extends DataValidator<AdminSettings> {
@Override
protected void validateCreate(TenantId tenantId, AdminSettings adminSettings) {
AdminSettings existentAdminSettingsWithKey = adminSettingsService.findAdminSettingsByKey(tenantId, adminSettings.getKey());
if (existentAdminSettingsWithKey != null) {
AdminSettings existingSettings = adminSettingsService.findAdminSettingsByTenantIdAndKey(tenantId, adminSettings.getKey());
if (existingSettings != null) {
throw new DataValidationException("Admin settings with such name already exists!");
}
}

42
dao/src/test/java/org/thingsboard/server/dao/service/BaseAdminSettingsServiceTest.java

@ -21,10 +21,15 @@ import org.junit.Assert;
import org.junit.Test;
import org.junit.jupiter.api.Assertions;
import org.springframework.beans.factory.annotation.Autowired;
import org.thingsboard.common.util.JacksonUtil;
import org.thingsboard.server.common.data.AdminSettings;
import org.thingsboard.server.common.data.id.TenantId;
import org.thingsboard.server.dao.exception.DataValidationException;
import org.thingsboard.server.dao.settings.AdminSettingsService;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
public abstract class BaseAdminSettingsServiceTest extends AbstractServiceTest {
@Autowired
@ -39,7 +44,7 @@ public abstract class BaseAdminSettingsServiceTest extends AbstractServiceTest {
adminSettings = adminSettingsService.findAdminSettingsByKey(SYSTEM_TENANT_ID, "unknown");
Assert.assertNull(adminSettings);
}
@Test
public void testFindAdminSettingsById() {
AdminSettings adminSettings = adminSettingsService.findAdminSettingsByKey(SYSTEM_TENANT_ID, "general");
@ -47,7 +52,7 @@ public abstract class BaseAdminSettingsServiceTest extends AbstractServiceTest {
Assert.assertNotNull(foundAdminSettings);
Assert.assertEquals(adminSettings, foundAdminSettings);
}
@Test
public void testSaveAdminSettings() {
AdminSettings adminSettings = adminSettingsService.findAdminSettingsByKey(SYSTEM_TENANT_ID, "general");
@ -59,7 +64,7 @@ public abstract class BaseAdminSettingsServiceTest extends AbstractServiceTest {
Assert.assertNotNull(savedAdminSettings);
Assert.assertEquals(adminSettings.getJsonValue(), savedAdminSettings.getJsonValue());
}
@Test
public void testSaveAdminSettingsWithEmptyKey() {
AdminSettings adminSettings = adminSettingsService.findAdminSettingsByKey(SYSTEM_TENANT_ID, "mail");
@ -68,7 +73,7 @@ public abstract class BaseAdminSettingsServiceTest extends AbstractServiceTest {
adminSettingsService.saveAdminSettings(SYSTEM_TENANT_ID, adminSettings);
});
}
@Test
public void testChangeAdminSettingsKey() {
AdminSettings adminSettings = adminSettingsService.findAdminSettingsByKey(SYSTEM_TENANT_ID, "mail");
@ -77,4 +82,33 @@ public abstract class BaseAdminSettingsServiceTest extends AbstractServiceTest {
adminSettingsService.saveAdminSettings(SYSTEM_TENANT_ID, adminSettings);
});
}
@Test
public void whenSavingAdminSettingsWithAlreadyExistingKey_thenReturnError() {
String key = "mySettings";
ObjectNode value = JacksonUtil.newObjectNode().put("test", "test");
AdminSettings systemSettings = new AdminSettings();
systemSettings.setTenantId(TenantId.SYS_TENANT_ID);
systemSettings.setKey(key);
systemSettings.setJsonValue(value);
adminSettingsService.saveAdminSettings(TenantId.SYS_TENANT_ID, systemSettings);
assertThatThrownBy(() -> {
adminSettingsService.saveAdminSettings(TenantId.SYS_TENANT_ID, systemSettings);
}).hasMessageContaining("already exists");
AdminSettings tenantSettings = new AdminSettings();
tenantSettings.setTenantId(tenantId);
tenantSettings.setKey(key);
tenantSettings.setJsonValue(value);
assertDoesNotThrow(() -> {
adminSettingsService.saveAdminSettings(tenantId, tenantSettings);
});
assertThatThrownBy(() -> {
adminSettingsService.saveAdminSettings(tenantId, tenantSettings);
}).hasMessageContaining("already exists");
}
}

Loading…
Cancel
Save