thingsboard-developers

RuleChain service tests.

3/14/2018 6:45:22 AM

Details

dao/pom.xml 5(+0 -5)

diff --git a/dao/pom.xml b/dao/pom.xml
index a987326..1d2d962 100644
--- a/dao/pom.xml
+++ b/dao/pom.xml
@@ -206,11 +206,6 @@
             <groupId>org.elasticsearch.client</groupId>
             <artifactId>rest</artifactId>
         </dependency>
-        <dependency>
-            <groupId>org.junit.jupiter</groupId>
-            <artifactId>junit-jupiter-api</artifactId>
-            <version>RELEASE</version>
-        </dependency>
     </dependencies>
     <build>
         <plugins>
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 073ccb9..1e79163 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
@@ -96,8 +96,7 @@ public class BaseRuleChainService extends AbstractEntityService implements RuleC
         }
 
         List<RuleNode> nodes = ruleChainMetaData.getNodes();
-        List<RuleNode> toAdd = new ArrayList<>();
-        List<RuleNode> toUpdate = new ArrayList<>();
+        List<RuleNode> toAddOrUpdate = new ArrayList<>();
         List<RuleNode> toDelete = new ArrayList<>();
 
         Map<RuleNodeId, Integer> ruleNodeIndexMap = new HashMap<>();
@@ -106,7 +105,7 @@ public class BaseRuleChainService extends AbstractEntityService implements RuleC
                 if (node.getId() != null) {
                     ruleNodeIndexMap.put(node.getId(), nodes.indexOf(node));
                 } else {
-                    toAdd.add(node);
+                    toAddOrUpdate.add(node);
                 }
             }
         }
@@ -116,12 +115,12 @@ public class BaseRuleChainService extends AbstractEntityService implements RuleC
             deleteEntityRelations(existingNode.getId());
             Integer index = ruleNodeIndexMap.get(existingNode.getId());
             if (index != null) {
-                toUpdate.add(ruleChainMetaData.getNodes().get(index));
+                toAddOrUpdate.add(ruleChainMetaData.getNodes().get(index));
             } else {
                 toDelete.add(existingNode);
             }
         }
-        for (RuleNode node : toAdd) {
+        for (RuleNode node : toAddOrUpdate) {
             RuleNode savedNode = ruleNodeDao.save(node);
             try {
                 createRelation(new EntityRelation(ruleChainMetaData.getRuleChainId(), savedNode.getId(),
diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/AbstractServiceTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/AbstractServiceTest.java
index ffa9f0e..d083a90 100644
--- a/dao/src/test/java/org/thingsboard/server/dao/service/AbstractServiceTest.java
+++ b/dao/src/test/java/org/thingsboard/server/dao/service/AbstractServiceTest.java
@@ -39,6 +39,7 @@ import org.thingsboard.server.common.data.plugin.ComponentDescriptor;
 import org.thingsboard.server.common.data.plugin.ComponentScope;
 import org.thingsboard.server.common.data.plugin.ComponentType;
 import org.thingsboard.server.common.data.plugin.PluginMetaData;
+import org.thingsboard.server.common.data.rule.RuleChain;
 import org.thingsboard.server.common.data.rule.RuleMetaData;
 import org.thingsboard.server.dao.alarm.AlarmService;
 import org.thingsboard.server.dao.asset.AssetService;
@@ -52,6 +53,7 @@ import org.thingsboard.server.dao.device.DeviceService;
 import org.thingsboard.server.dao.event.EventService;
 import org.thingsboard.server.dao.plugin.PluginService;
 import org.thingsboard.server.dao.relation.RelationService;
+import org.thingsboard.server.dao.rule.RuleChainService;
 import org.thingsboard.server.dao.rule.RuleService;
 import org.thingsboard.server.dao.settings.AdminSettingsService;
 import org.thingsboard.server.dao.tenant.TenantService;
@@ -126,6 +128,9 @@ public abstract class AbstractServiceTest {
     protected AlarmService alarmService;
 
     @Autowired
+    protected RuleChainService ruleChainService;
+
+    @Autowired
     private ComponentDescriptorService componentDescriptorService;
 
     class IdComparator<D extends BaseData<? extends UUIDBased>> implements Comparator<D> {
diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/BaseRuleChainServiceTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/BaseRuleChainServiceTest.java
new file mode 100644
index 0000000..28c6147
--- /dev/null
+++ b/dao/src/test/java/org/thingsboard/server/dao/service/BaseRuleChainServiceTest.java
@@ -0,0 +1,362 @@
+/**
+ * Copyright © 2016-2018 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.service;
+
+import com.datastax.driver.core.utils.UUIDs;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.apache.commons.lang3.RandomStringUtils;
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.thingsboard.server.common.data.Tenant;
+import org.thingsboard.server.common.data.id.TenantId;
+import org.thingsboard.server.common.data.page.TextPageData;
+import org.thingsboard.server.common.data.page.TextPageLink;
+import org.thingsboard.server.common.data.relation.EntityRelation;
+import org.thingsboard.server.common.data.rule.RuleChain;
+import org.thingsboard.server.common.data.rule.RuleChainMetaData;
+import org.thingsboard.server.common.data.rule.RuleNode;
+import org.thingsboard.server.dao.exception.DataValidationException;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * Created by igor on 3/13/18.
+ */
+public abstract class BaseRuleChainServiceTest extends AbstractServiceTest {
+
+    private IdComparator<RuleChain> idComparator = new IdComparator<>();
+    private IdComparator<RuleNode> ruleNodeIdComparator = new IdComparator<>();
+
+    private TenantId tenantId;
+
+    @Before
+    public void before() {
+        Tenant tenant = new Tenant();
+        tenant.setTitle("My tenant");
+        Tenant savedTenant = tenantService.saveTenant(tenant);
+        Assert.assertNotNull(savedTenant);
+        tenantId = savedTenant.getId();
+    }
+
+    @After
+    public void after() {
+        tenantService.deleteTenant(tenantId);
+    }
+
+    @Test
+    public void testSaveRuleChain() throws IOException {
+        RuleChain ruleChain = new RuleChain();
+        ruleChain.setTenantId(tenantId);
+        ruleChain.setName("My RuleChain");
+
+        RuleChain savedRuleChain = ruleChainService.saveRuleChain(ruleChain);
+        Assert.assertNotNull(savedRuleChain);
+        Assert.assertNotNull(savedRuleChain.getId());
+        Assert.assertTrue(savedRuleChain.getCreatedTime() > 0);
+        Assert.assertEquals(ruleChain.getTenantId(), savedRuleChain.getTenantId());
+        Assert.assertEquals(ruleChain.getName(), savedRuleChain.getName());
+
+        savedRuleChain.setName("My new RuleChain");
+
+        ruleChainService.saveRuleChain(savedRuleChain);
+        RuleChain foundRuleChain = ruleChainService.findRuleChainById(savedRuleChain.getId());
+        Assert.assertEquals(foundRuleChain.getName(), savedRuleChain.getName());
+
+        ruleChainService.deleteRuleChainById(savedRuleChain.getId());
+    }
+
+    @Test(expected = DataValidationException.class)
+    public void testSaveRuleChainWithEmptyName() {
+        RuleChain ruleChain = new RuleChain();
+        ruleChain.setTenantId(tenantId);
+        ruleChainService.saveRuleChain(ruleChain);
+    }
+
+    @Test(expected = DataValidationException.class)
+    public void testSaveRuleChainWithInvalidTenant() {
+        RuleChain ruleChain = new RuleChain();
+        ruleChain.setName("My RuleChain");
+        ruleChain.setTenantId(new TenantId(UUIDs.timeBased()));
+        ruleChainService.saveRuleChain(ruleChain);
+    }
+
+    @Test
+    public void testFindRuleChainById() {
+        RuleChain ruleChain = new RuleChain();
+        ruleChain.setTenantId(tenantId);
+        ruleChain.setName("My RuleChain");
+        RuleChain savedRuleChain = ruleChainService.saveRuleChain(ruleChain);
+        RuleChain foundRuleChain = ruleChainService.findRuleChainById(savedRuleChain.getId());
+        Assert.assertNotNull(foundRuleChain);
+        Assert.assertEquals(savedRuleChain, foundRuleChain);
+        ruleChainService.deleteRuleChainById(savedRuleChain.getId());
+    }
+
+    @Test
+    public void testDeleteRuleChain() {
+        RuleChain ruleChain = new RuleChain();
+        ruleChain.setTenantId(tenantId);
+        ruleChain.setName("My RuleChain");
+        RuleChain savedRuleChain = ruleChainService.saveRuleChain(ruleChain);
+        RuleChain foundRuleChain = ruleChainService.findRuleChainById(savedRuleChain.getId());
+        Assert.assertNotNull(foundRuleChain);
+        ruleChainService.deleteRuleChainById(savedRuleChain.getId());
+        foundRuleChain = ruleChainService.findRuleChainById(savedRuleChain.getId());
+        Assert.assertNull(foundRuleChain);
+    }
+
+    @Test
+    public void testFindRuleChainsByTenantId() {
+        Tenant tenant = new Tenant();
+        tenant.setTitle("Test tenant");
+        tenant = tenantService.saveTenant(tenant);
+
+        TenantId tenantId = tenant.getId();
+
+        List<RuleChain> ruleChains = new ArrayList<>();
+        for (int i = 0; i < 165; i++) {
+            RuleChain ruleChain = new RuleChain();
+            ruleChain.setTenantId(tenantId);
+            ruleChain.setName("RuleChain" + i);
+            ruleChains.add(ruleChainService.saveRuleChain(ruleChain));
+        }
+
+        List<RuleChain> loadedRuleChains = new ArrayList<>();
+        TextPageLink pageLink = new TextPageLink(16);
+        TextPageData<RuleChain> pageData = null;
+        do {
+            pageData = ruleChainService.findTenantRuleChains(tenantId, pageLink);
+            loadedRuleChains.addAll(pageData.getData());
+            if (pageData.hasNext()) {
+                pageLink = pageData.getNextPageLink();
+            }
+        } while (pageData.hasNext());
+
+        Collections.sort(ruleChains, idComparator);
+        Collections.sort(loadedRuleChains, idComparator);
+
+        Assert.assertEquals(ruleChains, loadedRuleChains);
+
+        ruleChainService.deleteRuleChainsByTenantId(tenantId);
+
+        pageLink = new TextPageLink(31);
+        pageData = ruleChainService.findTenantRuleChains(tenantId, pageLink);
+        Assert.assertFalse(pageData.hasNext());
+        Assert.assertTrue(pageData.getData().isEmpty());
+
+        tenantService.deleteTenant(tenantId);
+    }
+
+    @Test
+    public void testFindRuleChainsByTenantIdAndName() {
+        String name1 = "RuleChain name 1";
+        List<RuleChain> ruleChainsName1 = new ArrayList<>();
+        for (int i = 0; i < 123; i++) {
+            RuleChain ruleChain = new RuleChain();
+            ruleChain.setTenantId(tenantId);
+            String suffix = RandomStringUtils.randomAlphanumeric((int) (Math.random() * 17));
+            String name = name1 + suffix;
+            name = i % 2 == 0 ? name.toLowerCase() : name.toUpperCase();
+            ruleChain.setName(name);
+            ruleChainsName1.add(ruleChainService.saveRuleChain(ruleChain));
+        }
+        String name2 = "RuleChain name 2";
+        List<RuleChain> ruleChainsName2 = new ArrayList<>();
+        for (int i = 0; i < 193; i++) {
+            RuleChain ruleChain = new RuleChain();
+            ruleChain.setTenantId(tenantId);
+            String suffix = RandomStringUtils.randomAlphanumeric((int) (Math.random() * 15));
+            String name = name2 + suffix;
+            name = i % 2 == 0 ? name.toLowerCase() : name.toUpperCase();
+            ruleChain.setName(name);
+            ruleChainsName2.add(ruleChainService.saveRuleChain(ruleChain));
+        }
+
+        List<RuleChain> loadedRuleChainsName1 = new ArrayList<>();
+        TextPageLink pageLink = new TextPageLink(19, name1);
+        TextPageData<RuleChain> pageData = null;
+        do {
+            pageData = ruleChainService.findTenantRuleChains(tenantId, pageLink);
+            loadedRuleChainsName1.addAll(pageData.getData());
+            if (pageData.hasNext()) {
+                pageLink = pageData.getNextPageLink();
+            }
+        } while (pageData.hasNext());
+
+        Collections.sort(ruleChainsName1, idComparator);
+        Collections.sort(loadedRuleChainsName1, idComparator);
+
+        Assert.assertEquals(ruleChainsName1, loadedRuleChainsName1);
+
+        List<RuleChain> loadedRuleChainsName2 = new ArrayList<>();
+        pageLink = new TextPageLink(4, name2);
+        do {
+            pageData = ruleChainService.findTenantRuleChains(tenantId, pageLink);
+            loadedRuleChainsName2.addAll(pageData.getData());
+            if (pageData.hasNext()) {
+                pageLink = pageData.getNextPageLink();
+            }
+        } while (pageData.hasNext());
+
+        Collections.sort(ruleChainsName2, idComparator);
+        Collections.sort(loadedRuleChainsName2, idComparator);
+
+        Assert.assertEquals(ruleChainsName2, loadedRuleChainsName2);
+
+        for (RuleChain ruleChain : loadedRuleChainsName1) {
+            ruleChainService.deleteRuleChainById(ruleChain.getId());
+        }
+
+        pageLink = new TextPageLink(4, name1);
+        pageData = ruleChainService.findTenantRuleChains(tenantId, pageLink);
+        Assert.assertFalse(pageData.hasNext());
+        Assert.assertEquals(0, pageData.getData().size());
+
+        for (RuleChain ruleChain : loadedRuleChainsName2) {
+            ruleChainService.deleteRuleChainById(ruleChain.getId());
+        }
+
+        pageLink = new TextPageLink(4, name2);
+        pageData = ruleChainService.findTenantRuleChains(tenantId, pageLink);
+        Assert.assertFalse(pageData.hasNext());
+        Assert.assertEquals(0, pageData.getData().size());
+    }
+
+    @Test
+    public void testSaveRuleChainMetaData() throws Exception {
+
+        RuleChainMetaData savedRuleChainMetaData = createRuleChainMetadata();
+
+        Assert.assertEquals(3, savedRuleChainMetaData.getNodes().size());
+        Assert.assertEquals(3, savedRuleChainMetaData.getConnections().size());
+
+        for (RuleNode ruleNode : savedRuleChainMetaData.getNodes()) {
+            Assert.assertNotNull(ruleNode.getId());
+            List<EntityRelation> relations = ruleChainService.getRuleNodeRelations(ruleNode.getId());
+            if ("name1".equals(ruleNode.getName())) {
+                Assert.assertEquals(2, relations.size());
+            } else if ("name2".equals(ruleNode.getName())) {
+                Assert.assertEquals(1, relations.size());
+            } else if ("name3".equals(ruleNode.getName())) {
+                Assert.assertEquals(0, relations.size());
+            }
+        }
+
+        List<RuleNode> loadedRuleNodes = ruleChainService.getRuleChainNodes(savedRuleChainMetaData.getRuleChainId());
+
+        Collections.sort(savedRuleChainMetaData.getNodes(), ruleNodeIdComparator);
+        Collections.sort(loadedRuleNodes, ruleNodeIdComparator);
+
+        Assert.assertEquals(savedRuleChainMetaData.getNodes(), loadedRuleNodes);
+
+        ruleChainService.deleteRuleChainById(savedRuleChainMetaData.getRuleChainId());
+    }
+
+    @Test
+    public void testUpdateRuleChainMetaData() throws Exception {
+        RuleChainMetaData savedRuleChainMetaData = createRuleChainMetadata();
+
+        List<RuleNode> ruleNodes = savedRuleChainMetaData.getNodes();
+        int name3Index = -1;
+        for (int i=0;i<ruleNodes.size();i++) {
+            if ("name3".equals(ruleNodes.get(i).getName())) {
+                name3Index = i;
+                break;
+            }
+        }
+
+        RuleNode ruleNode4 = new RuleNode();
+        ruleNode4.setName("name4");
+        ruleNode4.setType("type4");
+        ruleNode4.setConfiguration(mapper.readTree("\"key4\": \"val4\""));
+
+        ruleNodes.set(name3Index, ruleNode4);
+
+        RuleChainMetaData updatedRuleChainMetaData = ruleChainService.saveRuleChainMetaData(savedRuleChainMetaData);
+
+        Assert.assertEquals(3, updatedRuleChainMetaData.getNodes().size());
+        Assert.assertEquals(3, updatedRuleChainMetaData.getConnections().size());
+
+        for (RuleNode ruleNode : updatedRuleChainMetaData.getNodes()) {
+            Assert.assertNotNull(ruleNode.getId());
+            List<EntityRelation> relations = ruleChainService.getRuleNodeRelations(ruleNode.getId());
+            if ("name1".equals(ruleNode.getName())) {
+                Assert.assertEquals(2, relations.size());
+            } else if ("name2".equals(ruleNode.getName())) {
+                Assert.assertEquals(1, relations.size());
+            } else if ("name4".equals(ruleNode.getName())) {
+                Assert.assertEquals(0, relations.size());
+            }
+        }
+
+        List<RuleNode> loadedRuleNodes = ruleChainService.getRuleChainNodes(savedRuleChainMetaData.getRuleChainId());
+
+        Collections.sort(updatedRuleChainMetaData.getNodes(), ruleNodeIdComparator);
+        Collections.sort(loadedRuleNodes, ruleNodeIdComparator);
+
+        Assert.assertEquals(updatedRuleChainMetaData.getNodes(), loadedRuleNodes);
+
+        ruleChainService.deleteRuleChainById(savedRuleChainMetaData.getRuleChainId());
+    }
+
+    private RuleChainMetaData createRuleChainMetadata() throws Exception {
+        RuleChain ruleChain = new RuleChain();
+        ruleChain.setName("My RuleChain");
+        ruleChain.setTenantId(tenantId);
+        RuleChain savedRuleChain = ruleChainService.saveRuleChain(ruleChain);
+
+        RuleChainMetaData ruleChainMetaData = new RuleChainMetaData();
+        ruleChainMetaData.setRuleChainId(savedRuleChain.getId());
+
+        ObjectMapper mapper = new ObjectMapper();
+
+        RuleNode ruleNode1 = new RuleNode();
+        ruleNode1.setName("name1");
+        ruleNode1.setType("type1");
+        ruleNode1.setConfiguration(mapper.readTree("\"key1\": \"val1\""));
+
+        RuleNode ruleNode2 = new RuleNode();
+        ruleNode2.setName("name2");
+        ruleNode2.setType("type2");
+        ruleNode2.setConfiguration(mapper.readTree("\"key2\": \"val2\""));
+
+        RuleNode ruleNode3 = new RuleNode();
+        ruleNode3.setName("name3");
+        ruleNode3.setType("type3");
+        ruleNode3.setConfiguration(mapper.readTree("\"key3\": \"val3\""));
+
+        List<RuleNode> ruleNodes = new ArrayList<>();
+        ruleNodes.add(ruleNode1);
+        ruleNodes.add(ruleNode2);
+        ruleNodes.add(ruleNode3);
+        ruleChainMetaData.setFirstNodeIndex(0);
+        ruleChainMetaData.setNodes(ruleNodes);
+
+        ruleChainMetaData.addConnectionInfo(0,1,"success");
+        ruleChainMetaData.addConnectionInfo(0,2,"fail");
+        ruleChainMetaData.addConnectionInfo(1,2,"success");
+
+        return ruleChainService.saveRuleChainMetaData(ruleChainMetaData);
+    }
+
+
+}
diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/nosql/RuleChainServiceNoSqlTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/nosql/RuleChainServiceNoSqlTest.java
new file mode 100644
index 0000000..0427eeb
--- /dev/null
+++ b/dao/src/test/java/org/thingsboard/server/dao/service/nosql/RuleChainServiceNoSqlTest.java
@@ -0,0 +1,23 @@
+/**
+ * Copyright © 2016-2018 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.service.nosql;
+
+import org.thingsboard.server.dao.service.BaseRuleChainServiceTest;
+import org.thingsboard.server.dao.service.DaoNoSqlTest;
+
+@DaoNoSqlTest
+public class RuleChainServiceNoSqlTest extends BaseRuleChainServiceTest {
+}
diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/queue/cassandra/UnprocessedMsgFilterTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/queue/cassandra/UnprocessedMsgFilterTest.java
index 046b462..6302e63 100644
--- a/dao/src/test/java/org/thingsboard/server/dao/service/queue/cassandra/UnprocessedMsgFilterTest.java
+++ b/dao/src/test/java/org/thingsboard/server/dao/service/queue/cassandra/UnprocessedMsgFilterTest.java
@@ -23,7 +23,7 @@ import java.util.Collection;
 import java.util.List;
 import java.util.UUID;
 
-import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.Assert.assertEquals;
 
 public class UnprocessedMsgFilterTest {
 
diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/sql/RuleChainServiceSqlTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/sql/RuleChainServiceSqlTest.java
new file mode 100644
index 0000000..d877037
--- /dev/null
+++ b/dao/src/test/java/org/thingsboard/server/dao/service/sql/RuleChainServiceSqlTest.java
@@ -0,0 +1,23 @@
+/**
+ * Copyright © 2016-2018 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.service.sql;
+
+import org.thingsboard.server.dao.service.BaseRuleChainServiceTest;
+import org.thingsboard.server.dao.service.DaoSqlTest;
+
+@DaoSqlTest
+public class RuleChainServiceSqlTest extends BaseRuleChainServiceTest {
+}
diff --git a/dao/src/test/resources/sql/drop-all-tables.sql b/dao/src/test/resources/sql/drop-all-tables.sql
index dfdc90f..c28e599 100644
--- a/dao/src/test/resources/sql/drop-all-tables.sql
+++ b/dao/src/test/resources/sql/drop-all-tables.sql
@@ -18,4 +18,6 @@ DROP TABLE IF EXISTS ts_kv;
 DROP TABLE IF EXISTS ts_kv_latest;
 DROP TABLE IF EXISTS user_credentials;
 DROP TABLE IF EXISTS widget_type;
-DROP TABLE IF EXISTS widgets_bundle;
\ No newline at end of file
+DROP TABLE IF EXISTS widgets_bundle;
+DROP TABLE IF EXISTS rule_node;
+DROP TABLE IF EXISTS rule_chain;
\ No newline at end of file