From e879f63376786fb1affd55fbcab7e00288f898bf Mon Sep 17 00:00:00 2001 From: IrynaMatveieva Date: Fri, 22 Mar 2024 10:50:21 +0200 Subject: [PATCH 1/5] fixed error message for problem with external id --- .../server/dao/rule/BaseRuleChainService.java | 22 ++-- .../dao/rule/BaseRuleChainServiceTest.java | 110 ++++++++++++++++++ 2 files changed, 123 insertions(+), 9 deletions(-) create mode 100644 dao/src/test/java/org/thingsboard/server/dao/rule/BaseRuleChainServiceTest.java diff --git a/dao/src/main/java/org/thingsboard/server/dao/rule/BaseRuleChainService.java b/dao/src/main/java/org/thingsboard/server/dao/rule/BaseRuleChainService.java index 2857436fc8..a636ccf879 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/rule/BaseRuleChainService.java +++ b/dao/src/main/java/org/thingsboard/server/dao/rule/BaseRuleChainService.java @@ -118,16 +118,20 @@ public class BaseRuleChainService extends AbstractEntityService implements RuleC @Transactional public RuleChain saveRuleChain(RuleChain ruleChain, boolean publishSaveEvent) { ruleChainValidator.validate(ruleChain, RuleChain::getTenantId); + RuleChain savedRuleChain = saveRuleChainInternal(ruleChain); + if (ruleChain.getId() == null) { + entityCountService.publishCountEntityEvictEvent(ruleChain.getTenantId(), EntityType.RULE_CHAIN); + } + if (publishSaveEvent) { + eventPublisher.publishEvent(SaveEntityEvent.builder().tenantId(savedRuleChain.getTenantId()) + .entity(savedRuleChain).entityId(savedRuleChain.getId()).created(ruleChain.getId() == null).build()); + } + return savedRuleChain; + } + + private RuleChain saveRuleChainInternal(RuleChain ruleChain) { try { - RuleChain savedRuleChain = ruleChainDao.save(ruleChain.getTenantId(), ruleChain); - if (ruleChain.getId() == null) { - entityCountService.publishCountEntityEvictEvent(ruleChain.getTenantId(), EntityType.RULE_CHAIN); - } - if (publishSaveEvent) { - eventPublisher.publishEvent(SaveEntityEvent.builder().tenantId(savedRuleChain.getTenantId()) - .entity(savedRuleChain).entityId(savedRuleChain.getId()).created(ruleChain.getId() == null).build()); - } - return savedRuleChain; + return ruleChainDao.saveAndFlush(ruleChain.getTenantId(), ruleChain); } catch (Exception e) { checkConstraintViolation(e, "rule_chain_external_id_unq_key", "Rule Chain with such external id already exists!"); throw e; diff --git a/dao/src/test/java/org/thingsboard/server/dao/rule/BaseRuleChainServiceTest.java b/dao/src/test/java/org/thingsboard/server/dao/rule/BaseRuleChainServiceTest.java new file mode 100644 index 0000000000..c9a91853ac --- /dev/null +++ b/dao/src/test/java/org/thingsboard/server/dao/rule/BaseRuleChainServiceTest.java @@ -0,0 +1,110 @@ +/** + * 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.rule; + +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.id.RuleChainId; +import org.thingsboard.server.common.data.rule.RuleChain; +import org.thingsboard.server.dao.exception.DataValidationException; +import org.thingsboard.server.dao.service.AbstractServiceTest; +import org.thingsboard.server.dao.service.DaoSqlTest; + +import java.util.UUID; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertThrows; + +@DaoSqlTest +public class BaseRuleChainServiceTest extends AbstractServiceTest { + + @Autowired + private BaseRuleChainService ruleChainService; + + @Test + public void givenRuleChain_whenSave_thenReturnsSavedRuleChain() { + RuleChain ruleChain = getRuleChain(ruleChainWithoutId); + ruleChain.setTenantId(tenantId); + RuleChain savedRuleChain = ruleChainService.saveRuleChain(ruleChain); + + Assert.assertNotNull(savedRuleChain); + Assert.assertNotNull(savedRuleChain.getId()); + Assert.assertTrue(savedRuleChain.getCreatedTime() > 0); + Assert.assertEquals(ruleChain.getTenantId(), savedRuleChain.getTenantId()); + + + RuleChain foundRuleChain = ruleChainService.findRuleChainById(tenantId, savedRuleChain.getId()); + Assertions.assertEquals(foundRuleChain.getName(), savedRuleChain.getName()); + + ruleChainService.deleteRuleChainsByTenantId(tenantId); + } + + @Test + public void givenRuleChainWithExistingExternalId_whenSave_thenThrowsException() { + RuleChainId externalRuleChainId = new RuleChainId(UUID.fromString("2675d180-e1e5-11ee-9f06-71b6c7dc2cbf")); + + RuleChain ruleChain = getRuleChain(ruleChainWithoutId); + ruleChain.setTenantId(tenantId); + ruleChain.setExternalId(externalRuleChainId); + RuleChain savedRuleChain = ruleChainService.saveRuleChain(ruleChain); + + RuleChain ruleChainForSave = getRuleChain(ruleChainWithExternalId); + ruleChainForSave.setTenantId(tenantId); + + String expectedMsg = "Rule Chain with such external id already exists!"; + + assertEquals(savedRuleChain.getExternalId(), ruleChainForSave.getExternalId()); + Exception exception = assertThrows(DataValidationException.class, () -> ruleChainService.saveRuleChain(ruleChainForSave)); + assertEquals(expectedMsg, exception.getMessage()); + + ruleChainService.deleteRuleChainsByTenantId(tenantId); + } + + private RuleChain getRuleChain(String ruleChainString) { + return JacksonUtil.fromString(ruleChainString, RuleChain.class); + } + + private final String ruleChainWithoutId = "{\n" + + " \"name\": \"Root Rule Chain\",\n" + + " \"type\": \"CORE\",\n" + + " \"firstRuleNodeId\": {\n" + + " \"entityType\": \"RULE_NODE\",\n" + + " \"id\": \"91ad0b00-e779-11ee-9cf0-15d8b6079fdb\"\n" + + " },\n" + + " \"debugMode\": false,\n" + + " \"configuration\": null,\n" + + " \"additionalInfo\": null\n" + + "}"; + + private final String ruleChainWithExternalId = "{\n" + + " \"name\": \"Root Rule Chain\",\n" + + " \"type\": \"CORE\",\n" + + " \"firstRuleNodeId\": {\n" + + " \"entityType\": \"RULE_NODE\",\n" + + " \"id\": \"91ad0b00-e779-11ee-9cf0-15d8b6079fdb\"\n" + + " },\n" + + " \"debugMode\": false,\n" + + " \"externalId\": {\n" + + " \"entityType\": \"RULE_CHAIN\",\n" + + " \"id\": \"2675d180-e1e5-11ee-9f06-71b6c7dc2cbf\"\n" + + " },\n" + + " \"configuration\": null,\n" + + " \"additionalInfo\": null\n" + + "}"; +} \ No newline at end of file From e29a470856e3b5affe3cafefd530f5c3ac03c59d Mon Sep 17 00:00:00 2001 From: IrynaMatveieva Date: Fri, 22 Mar 2024 14:33:03 +0200 Subject: [PATCH 2/5] used assertj instead of junit --- .../dao/rule/BaseRuleChainServiceTest.java | 64 +++++++------------ 1 file changed, 22 insertions(+), 42 deletions(-) diff --git a/dao/src/test/java/org/thingsboard/server/dao/rule/BaseRuleChainServiceTest.java b/dao/src/test/java/org/thingsboard/server/dao/rule/BaseRuleChainServiceTest.java index c9a91853ac..ba0fb55a6d 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/rule/BaseRuleChainServiceTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/rule/BaseRuleChainServiceTest.java @@ -15,9 +15,8 @@ */ package org.thingsboard.server.dao.rule; -import org.junit.Assert; +import org.assertj.core.api.Assertions; 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.id.RuleChainId; @@ -28,9 +27,6 @@ import org.thingsboard.server.dao.service.DaoSqlTest; import java.util.UUID; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertThrows; - @DaoSqlTest public class BaseRuleChainServiceTest extends AbstractServiceTest { @@ -39,18 +35,17 @@ public class BaseRuleChainServiceTest extends AbstractServiceTest { @Test public void givenRuleChain_whenSave_thenReturnsSavedRuleChain() { - RuleChain ruleChain = getRuleChain(ruleChainWithoutId); - ruleChain.setTenantId(tenantId); - RuleChain savedRuleChain = ruleChainService.saveRuleChain(ruleChain); - - Assert.assertNotNull(savedRuleChain); - Assert.assertNotNull(savedRuleChain.getId()); - Assert.assertTrue(savedRuleChain.getCreatedTime() > 0); - Assert.assertEquals(ruleChain.getTenantId(), savedRuleChain.getTenantId()); + RuleChain newRuleChain = getRuleChain(this.ruleChain); + newRuleChain.setTenantId(tenantId); + RuleChain savedRuleChain = ruleChainService.saveRuleChain(newRuleChain); + Assertions.assertThat(savedRuleChain).isNotNull(); + Assertions.assertThat(savedRuleChain.getId()).isNotNull(); + Assertions.assertThat(savedRuleChain.getCreatedTime() > 0).isTrue(); + Assertions.assertThat(newRuleChain.getTenantId()).isEqualTo(savedRuleChain.getTenantId()); RuleChain foundRuleChain = ruleChainService.findRuleChainById(tenantId, savedRuleChain.getId()); - Assertions.assertEquals(foundRuleChain.getName(), savedRuleChain.getName()); + Assertions.assertThat(savedRuleChain.getName()).isEqualTo(foundRuleChain.getName()); ruleChainService.deleteRuleChainsByTenantId(tenantId); } @@ -59,19 +54,20 @@ public class BaseRuleChainServiceTest extends AbstractServiceTest { public void givenRuleChainWithExistingExternalId_whenSave_thenThrowsException() { RuleChainId externalRuleChainId = new RuleChainId(UUID.fromString("2675d180-e1e5-11ee-9f06-71b6c7dc2cbf")); - RuleChain ruleChain = getRuleChain(ruleChainWithoutId); - ruleChain.setTenantId(tenantId); - ruleChain.setExternalId(externalRuleChainId); - RuleChain savedRuleChain = ruleChainService.saveRuleChain(ruleChain); + RuleChain newRuleChain = getRuleChain(ruleChain); + newRuleChain.setTenantId(tenantId); + newRuleChain.setExternalId(externalRuleChainId); + RuleChain savedRuleChain = ruleChainService.saveRuleChain(newRuleChain); - RuleChain ruleChainForSave = getRuleChain(ruleChainWithExternalId); + RuleChain ruleChainForSave = getRuleChain(ruleChain); ruleChainForSave.setTenantId(tenantId); + ruleChainForSave.setExternalId(externalRuleChainId); - String expectedMsg = "Rule Chain with such external id already exists!"; - - assertEquals(savedRuleChain.getExternalId(), ruleChainForSave.getExternalId()); - Exception exception = assertThrows(DataValidationException.class, () -> ruleChainService.saveRuleChain(ruleChainForSave)); - assertEquals(expectedMsg, exception.getMessage()); + Assertions.assertThat(savedRuleChain.getExternalId()).isEqualTo(ruleChainForSave.getExternalId()); + Assertions.assertThatExceptionOfType(DataValidationException.class).isThrownBy(() -> ruleChainService.saveRuleChain(ruleChainForSave)); + Assertions.assertThatThrownBy(() -> ruleChainService.saveRuleChain(ruleChainForSave)) + .isInstanceOf(DataValidationException.class) + .hasMessage("Rule Chain with such external id already exists!"); ruleChainService.deleteRuleChainsByTenantId(tenantId); } @@ -80,7 +76,7 @@ public class BaseRuleChainServiceTest extends AbstractServiceTest { return JacksonUtil.fromString(ruleChainString, RuleChain.class); } - private final String ruleChainWithoutId = "{\n" + + private final String ruleChain = "{\n" + " \"name\": \"Root Rule Chain\",\n" + " \"type\": \"CORE\",\n" + " \"firstRuleNodeId\": {\n" + @@ -91,20 +87,4 @@ public class BaseRuleChainServiceTest extends AbstractServiceTest { " \"configuration\": null,\n" + " \"additionalInfo\": null\n" + "}"; - - private final String ruleChainWithExternalId = "{\n" + - " \"name\": \"Root Rule Chain\",\n" + - " \"type\": \"CORE\",\n" + - " \"firstRuleNodeId\": {\n" + - " \"entityType\": \"RULE_NODE\",\n" + - " \"id\": \"91ad0b00-e779-11ee-9cf0-15d8b6079fdb\"\n" + - " },\n" + - " \"debugMode\": false,\n" + - " \"externalId\": {\n" + - " \"entityType\": \"RULE_CHAIN\",\n" + - " \"id\": \"2675d180-e1e5-11ee-9f06-71b6c7dc2cbf\"\n" + - " },\n" + - " \"configuration\": null,\n" + - " \"additionalInfo\": null\n" + - "}"; -} \ No newline at end of file +} From 841729bca3b1e1a12acba60ed99f093f26c7d2d0 Mon Sep 17 00:00:00 2001 From: IrynaMatveieva Date: Fri, 29 Mar 2024 10:51:20 +0200 Subject: [PATCH 3/5] removed unnecessary object creation --- .../dao/rule/BaseRuleChainServiceTest.java | 50 ++++++++----------- 1 file changed, 22 insertions(+), 28 deletions(-) diff --git a/dao/src/test/java/org/thingsboard/server/dao/rule/BaseRuleChainServiceTest.java b/dao/src/test/java/org/thingsboard/server/dao/rule/BaseRuleChainServiceTest.java index ba0fb55a6d..b1dad8e4ed 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/rule/BaseRuleChainServiceTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/rule/BaseRuleChainServiceTest.java @@ -35,14 +35,14 @@ public class BaseRuleChainServiceTest extends AbstractServiceTest { @Test public void givenRuleChain_whenSave_thenReturnsSavedRuleChain() { - RuleChain newRuleChain = getRuleChain(this.ruleChain); - newRuleChain.setTenantId(tenantId); - RuleChain savedRuleChain = ruleChainService.saveRuleChain(newRuleChain); + RuleChain ruleChain = getRuleChain(); + ruleChain.setTenantId(tenantId); + RuleChain savedRuleChain = ruleChainService.saveRuleChain(ruleChain); Assertions.assertThat(savedRuleChain).isNotNull(); Assertions.assertThat(savedRuleChain.getId()).isNotNull(); Assertions.assertThat(savedRuleChain.getCreatedTime() > 0).isTrue(); - Assertions.assertThat(newRuleChain.getTenantId()).isEqualTo(savedRuleChain.getTenantId()); + Assertions.assertThat(ruleChain.getTenantId()).isEqualTo(savedRuleChain.getTenantId()); RuleChain foundRuleChain = ruleChainService.findRuleChainById(tenantId, savedRuleChain.getId()); Assertions.assertThat(savedRuleChain.getName()).isEqualTo(foundRuleChain.getName()); @@ -54,37 +54,31 @@ public class BaseRuleChainServiceTest extends AbstractServiceTest { public void givenRuleChainWithExistingExternalId_whenSave_thenThrowsException() { RuleChainId externalRuleChainId = new RuleChainId(UUID.fromString("2675d180-e1e5-11ee-9f06-71b6c7dc2cbf")); - RuleChain newRuleChain = getRuleChain(ruleChain); - newRuleChain.setTenantId(tenantId); - newRuleChain.setExternalId(externalRuleChainId); - RuleChain savedRuleChain = ruleChainService.saveRuleChain(newRuleChain); + RuleChain ruleChain = getRuleChain(); + ruleChain.setTenantId(tenantId); + ruleChain.setExternalId(externalRuleChainId); + ruleChainService.saveRuleChain(ruleChain); - RuleChain ruleChainForSave = getRuleChain(ruleChain); - ruleChainForSave.setTenantId(tenantId); - ruleChainForSave.setExternalId(externalRuleChainId); - - Assertions.assertThat(savedRuleChain.getExternalId()).isEqualTo(ruleChainForSave.getExternalId()); - Assertions.assertThatExceptionOfType(DataValidationException.class).isThrownBy(() -> ruleChainService.saveRuleChain(ruleChainForSave)); - Assertions.assertThatThrownBy(() -> ruleChainService.saveRuleChain(ruleChainForSave)) + Assertions.assertThatThrownBy(() -> ruleChainService.saveRuleChain(ruleChain)) .isInstanceOf(DataValidationException.class) .hasMessage("Rule Chain with such external id already exists!"); ruleChainService.deleteRuleChainsByTenantId(tenantId); } - private RuleChain getRuleChain(String ruleChainString) { - return JacksonUtil.fromString(ruleChainString, RuleChain.class); + private RuleChain getRuleChain() { + String ruleChainStr = "{\n" + + " \"name\": \"Root Rule Chain\",\n" + + " \"type\": \"CORE\",\n" + + " \"firstRuleNodeId\": {\n" + + " \"entityType\": \"RULE_NODE\",\n" + + " \"id\": \"91ad0b00-e779-11ee-9cf0-15d8b6079fdb\"\n" + + " },\n" + + " \"debugMode\": false,\n" + + " \"configuration\": null,\n" + + " \"additionalInfo\": null\n" + + "}"; + return JacksonUtil.fromString(ruleChainStr, RuleChain.class); } - private final String ruleChain = "{\n" + - " \"name\": \"Root Rule Chain\",\n" + - " \"type\": \"CORE\",\n" + - " \"firstRuleNodeId\": {\n" + - " \"entityType\": \"RULE_NODE\",\n" + - " \"id\": \"91ad0b00-e779-11ee-9cf0-15d8b6079fdb\"\n" + - " },\n" + - " \"debugMode\": false,\n" + - " \"configuration\": null,\n" + - " \"additionalInfo\": null\n" + - "}"; } From 4c984dc82c8b68cb53d954d9a973341ffd16bebb Mon Sep 17 00:00:00 2001 From: IrynaMatveieva Date: Mon, 8 Apr 2024 17:51:16 +0300 Subject: [PATCH 4/5] removed unnecessary method creation --- .../server/dao/rule/BaseRuleChainService.java | 22 ++++++++----------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/dao/src/main/java/org/thingsboard/server/dao/rule/BaseRuleChainService.java b/dao/src/main/java/org/thingsboard/server/dao/rule/BaseRuleChainService.java index a636ccf879..f1c279c4bd 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/rule/BaseRuleChainService.java +++ b/dao/src/main/java/org/thingsboard/server/dao/rule/BaseRuleChainService.java @@ -118,20 +118,16 @@ public class BaseRuleChainService extends AbstractEntityService implements RuleC @Transactional public RuleChain saveRuleChain(RuleChain ruleChain, boolean publishSaveEvent) { ruleChainValidator.validate(ruleChain, RuleChain::getTenantId); - RuleChain savedRuleChain = saveRuleChainInternal(ruleChain); - if (ruleChain.getId() == null) { - entityCountService.publishCountEntityEvictEvent(ruleChain.getTenantId(), EntityType.RULE_CHAIN); - } - if (publishSaveEvent) { - eventPublisher.publishEvent(SaveEntityEvent.builder().tenantId(savedRuleChain.getTenantId()) - .entity(savedRuleChain).entityId(savedRuleChain.getId()).created(ruleChain.getId() == null).build()); - } - return savedRuleChain; - } - - private RuleChain saveRuleChainInternal(RuleChain ruleChain) { try { - return ruleChainDao.saveAndFlush(ruleChain.getTenantId(), ruleChain); + RuleChain savedRuleChain = ruleChainDao.saveAndFlush(ruleChain.getTenantId(), ruleChain); + if (ruleChain.getId() == null) { + entityCountService.publishCountEntityEvictEvent(ruleChain.getTenantId(), EntityType.RULE_CHAIN); + } + if (publishSaveEvent) { + eventPublisher.publishEvent(SaveEntityEvent.builder().tenantId(savedRuleChain.getTenantId()) + .entity(savedRuleChain).entityId(savedRuleChain.getId()).created(ruleChain.getId() == null).build()); + } + return savedRuleChain; } catch (Exception e) { checkConstraintViolation(e, "rule_chain_external_id_unq_key", "Rule Chain with such external id already exists!"); throw e; From d152e0b24bd2b05f6360f8455174137df0b4bf2f Mon Sep 17 00:00:00 2001 From: IrynaMatveieva Date: Tue, 9 Apr 2024 15:18:47 +0300 Subject: [PATCH 5/5] moved tests to RuleChainServiceTest class --- .../dao/rule/BaseRuleChainServiceTest.java | 84 ------------------- .../dao/service/RuleChainServiceTest.java | 34 ++++++++ 2 files changed, 34 insertions(+), 84 deletions(-) delete mode 100644 dao/src/test/java/org/thingsboard/server/dao/rule/BaseRuleChainServiceTest.java diff --git a/dao/src/test/java/org/thingsboard/server/dao/rule/BaseRuleChainServiceTest.java b/dao/src/test/java/org/thingsboard/server/dao/rule/BaseRuleChainServiceTest.java deleted file mode 100644 index b1dad8e4ed..0000000000 --- a/dao/src/test/java/org/thingsboard/server/dao/rule/BaseRuleChainServiceTest.java +++ /dev/null @@ -1,84 +0,0 @@ -/** - * 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.rule; - -import org.assertj.core.api.Assertions; -import org.junit.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.thingsboard.common.util.JacksonUtil; -import org.thingsboard.server.common.data.id.RuleChainId; -import org.thingsboard.server.common.data.rule.RuleChain; -import org.thingsboard.server.dao.exception.DataValidationException; -import org.thingsboard.server.dao.service.AbstractServiceTest; -import org.thingsboard.server.dao.service.DaoSqlTest; - -import java.util.UUID; - -@DaoSqlTest -public class BaseRuleChainServiceTest extends AbstractServiceTest { - - @Autowired - private BaseRuleChainService ruleChainService; - - @Test - public void givenRuleChain_whenSave_thenReturnsSavedRuleChain() { - RuleChain ruleChain = getRuleChain(); - ruleChain.setTenantId(tenantId); - RuleChain savedRuleChain = ruleChainService.saveRuleChain(ruleChain); - - Assertions.assertThat(savedRuleChain).isNotNull(); - Assertions.assertThat(savedRuleChain.getId()).isNotNull(); - Assertions.assertThat(savedRuleChain.getCreatedTime() > 0).isTrue(); - Assertions.assertThat(ruleChain.getTenantId()).isEqualTo(savedRuleChain.getTenantId()); - - RuleChain foundRuleChain = ruleChainService.findRuleChainById(tenantId, savedRuleChain.getId()); - Assertions.assertThat(savedRuleChain.getName()).isEqualTo(foundRuleChain.getName()); - - ruleChainService.deleteRuleChainsByTenantId(tenantId); - } - - @Test - public void givenRuleChainWithExistingExternalId_whenSave_thenThrowsException() { - RuleChainId externalRuleChainId = new RuleChainId(UUID.fromString("2675d180-e1e5-11ee-9f06-71b6c7dc2cbf")); - - RuleChain ruleChain = getRuleChain(); - ruleChain.setTenantId(tenantId); - ruleChain.setExternalId(externalRuleChainId); - ruleChainService.saveRuleChain(ruleChain); - - Assertions.assertThatThrownBy(() -> ruleChainService.saveRuleChain(ruleChain)) - .isInstanceOf(DataValidationException.class) - .hasMessage("Rule Chain with such external id already exists!"); - - ruleChainService.deleteRuleChainsByTenantId(tenantId); - } - - private RuleChain getRuleChain() { - String ruleChainStr = "{\n" + - " \"name\": \"Root Rule Chain\",\n" + - " \"type\": \"CORE\",\n" + - " \"firstRuleNodeId\": {\n" + - " \"entityType\": \"RULE_NODE\",\n" + - " \"id\": \"91ad0b00-e779-11ee-9cf0-15d8b6079fdb\"\n" + - " },\n" + - " \"debugMode\": false,\n" + - " \"configuration\": null,\n" + - " \"additionalInfo\": null\n" + - "}"; - return JacksonUtil.fromString(ruleChainStr, RuleChain.class); - } - -} diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/RuleChainServiceTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/RuleChainServiceTest.java index 50f46020d8..86b76bd5a5 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/RuleChainServiceTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/RuleChainServiceTest.java @@ -40,8 +40,11 @@ import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.UUID; import java.util.function.Function; +import static org.assertj.core.api.Assertions.assertThatThrownBy; + /** * Created by igor on 3/13/18. */ @@ -560,4 +563,35 @@ public class RuleChainServiceTest extends AbstractServiceTest { Assert.assertFalse(pageData.hasNext()); Assert.assertEquals(0, pageData.getData().size()); } + + @Test + public void testSaveRuleChainWithExistingExternalId() { + RuleChainId externalRuleChainId = new RuleChainId(UUID.fromString("2675d180-e1e5-11ee-9f06-71b6c7dc2cbf")); + + RuleChain ruleChain = getRuleChain(); + ruleChain.setTenantId(tenantId); + ruleChain.setExternalId(externalRuleChainId); + ruleChainService.saveRuleChain(ruleChain); + + assertThatThrownBy(() -> ruleChainService.saveRuleChain(ruleChain)) + .isInstanceOf(DataValidationException.class) + .hasMessage("Rule Chain with such external id already exists!"); + + ruleChainService.deleteRuleChainsByTenantId(tenantId); + } + + private RuleChain getRuleChain() { + String ruleChainStr = "{\n" + + " \"name\": \"Root Rule Chain\",\n" + + " \"type\": \"CORE\",\n" + + " \"firstRuleNodeId\": {\n" + + " \"entityType\": \"RULE_NODE\",\n" + + " \"id\": \"91ad0b00-e779-11ee-9cf0-15d8b6079fdb\"\n" + + " },\n" + + " \"debugMode\": false,\n" + + " \"configuration\": null,\n" + + " \"additionalInfo\": null\n" + + "}"; + return JacksonUtil.fromString(ruleChainStr, RuleChain.class); + } }