Browse Source

Refactoring rule chain tests

pull/8394/head
Seraphym-Tuhai 3 years ago
parent
commit
71ce5e762a
  1. 4
      msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/base/AbstractBasePage.java
  2. 30
      msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/base/AbstractDriverBaseTest.java
  3. 2
      msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/OtherPageElements.java
  4. 4
      msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/OtherPageElementsHelper.java
  5. 2
      msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/RuleChainsPageHelper.java
  6. 2
      msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/assetProfileSmoke/CreateAssetProfileImportTest.java
  7. 8
      msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/assetProfileSmoke/DeleteAssetProfileTest.java
  8. 8
      msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/customerSmoke/DeleteCustomerTest.java
  9. 2
      msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/deviceProfileSmoke/CreateDeviceProfileImportTest.java
  10. 8
      msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/deviceProfileSmoke/DeleteDeviceProfileTest.java
  11. 34
      msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/ruleChainsSmoke/AbstractRuleChainTest.java
  12. 72
      msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/ruleChainsSmoke/CreateRuleChainImportTest.java
  13. 95
      msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/ruleChainsSmoke/CreateRuleChainTest.java
  14. 78
      msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/ruleChainsSmoke/DeleteRuleChainTest.java
  15. 41
      msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/ruleChainsSmoke/DeleteSeveralRuleChainsTest.java
  16. 32
      msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/ruleChainsSmoke/MakeRuleChainRootTest.java
  17. 65
      msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/ruleChainsSmoke/OpenRuleChainTest.java
  18. 94
      msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/ruleChainsSmoke/RuleChainEditMenuTest.java
  19. 39
      msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/ruleChainsSmoke/SearchRuleChainTest.java
  20. 77
      msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/ruleChainsSmoke/SortByNameTest.java
  21. 53
      msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/ruleChainsSmoke/SortByTimeTest.java
  22. 7
      msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/utils/DataProviderCredential.java
  23. 7
      msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/utils/EntityPrototypes.java

4
msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/base/AbstractBasePage.java

@ -117,7 +117,7 @@ abstract public class AbstractBasePage {
try { try {
return wait.until(ExpectedConditions.not(ExpectedConditions.visibilityOfElementLocated(By.xpath(locator)))); return wait.until(ExpectedConditions.not(ExpectedConditions.visibilityOfElementLocated(By.xpath(locator))));
} catch (WebDriverException e) { } catch (WebDriverException e) {
return fail("Element is present"); return fail("Element is present: " + locator);
} }
} }
@ -125,7 +125,7 @@ abstract public class AbstractBasePage {
try { try {
return wait.until(ExpectedConditions.not(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.xpath(locator)))); return wait.until(ExpectedConditions.not(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.xpath(locator))));
} catch (WebDriverException e) { } catch (WebDriverException e) {
return fail("Elements is present"); return fail("Elements is present: " + locator);
} }
} }

30
msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/base/AbstractDriverBaseTest.java

@ -47,8 +47,11 @@ import java.io.ByteArrayInputStream;
import java.net.MalformedURLException; import java.net.MalformedURLException;
import java.net.URL; import java.net.URL;
import java.time.Duration; import java.time.Duration;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.fail; import static org.assertj.core.api.Assertions.fail;
import static org.thingsboard.server.msa.TestProperties.getBaseUiUrl; import static org.thingsboard.server.msa.TestProperties.getBaseUiUrl;
import static org.thingsboard.server.msa.ui.utils.Const.TENANT_EMAIL; import static org.thingsboard.server.msa.ui.utils.Const.TENANT_EMAIL;
@ -137,12 +140,22 @@ abstract public class AbstractDriverBaseTest extends AbstractContainerTest {
try { try {
return testRestClient.getRuleChains(pageLink).getData().stream() return testRestClient.getRuleChains(pageLink).getData().stream()
.filter(s -> s.getName().equals(name)).collect(Collectors.toList()).get(0); .filter(s -> s.getName().equals(name)).collect(Collectors.toList()).get(0);
} catch (Exception e) { } catch (IndexOutOfBoundsException e) {
log.error("No such rule chain with name: " + name); log.error("No such rule chain with name: " + name);
return null; return null;
} }
} }
public List<RuleChain> getRuleChainsByName(String name) {
try {
return testRestClient.getRuleChains(pageLink).getData().stream()
.filter(s -> s.getName().equals(name)).collect(Collectors.toList());
} catch (IndexOutOfBoundsException e) {
log.error("No such rule chain with name: " + name);
return Collections.emptyList();
}
}
public static Customer getCustomerByName(String name) { public static Customer getCustomerByName(String name) {
try { try {
return testRestClient.getCustomers(pageLink).getData().stream() return testRestClient.getCustomers(pageLink).getData().stream()
@ -179,4 +192,19 @@ abstract public class AbstractDriverBaseTest extends AbstractContainerTest {
new ByteArrayInputStream(((TakesScreenshot) driver).getScreenshotAs(OutputType.BYTES))); new ByteArrayInputStream(((TakesScreenshot) driver).getScreenshotAs(OutputType.BYTES)));
} }
} }
public void assertIsDisplayed(WebElement element) {
assertThat(element.isDisplayed()).as(element + " is displayed").isTrue();
}
public void assertIsDisable(WebElement element) {
assertThat(element.isEnabled()).as(element + " is disabled").isFalse();
}
public void deleteRuleChainByName(String ruleChainName) {
List<RuleChain> ruleChains = getRuleChainsByName(ruleChainName);
if (!ruleChains.isEmpty()) {
ruleChains.forEach(rc -> testRestClient.deleteRuleChain(rc.getId()));
}
}
} }

2
msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/OtherPageElements.java

@ -33,7 +33,7 @@ public class OtherPageElements extends AbstractBasePage {
private static final String ENTITY_COUNT = "//div[@class='mat-paginator-range-label']"; private static final String ENTITY_COUNT = "//div[@class='mat-paginator-range-label']";
private static final String WARNING_DELETE_POPUP_YES = "//tb-confirm-dialog//button[2]"; private static final String WARNING_DELETE_POPUP_YES = "//tb-confirm-dialog//button[2]";
private static final String WARNING_DELETE_POPUP_TITLE = "//tb-confirm-dialog/h2"; private static final String WARNING_DELETE_POPUP_TITLE = "//tb-confirm-dialog/h2";
private static final String REFRESH_BTN = "//mat-icon[contains(text(),'refresh')]/.."; private static final String REFRESH_BTN = "//mat-icon[contains(text(),'refresh')]/parent::button";
private static final String HELP_BTN = "//mat-icon[contains(text(),'help')]/ancestor::button"; private static final String HELP_BTN = "//mat-icon[contains(text(),'help')]/ancestor::button";
private static final String CHECKBOX = "//mat-row//span[contains(text(),'%s')]/../..//mat-checkbox"; private static final String CHECKBOX = "//mat-row//span[contains(text(),'%s')]/../..//mat-checkbox";
private static final String CHECKBOXES = "//tbody//mat-checkbox"; private static final String CHECKBOXES = "//tbody//mat-checkbox";

4
msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/OtherPageElementsHelper.java

@ -15,8 +15,6 @@
*/ */
package org.thingsboard.server.msa.ui.pages; package org.thingsboard.server.msa.ui.pages;
import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebDriver;
public class OtherPageElementsHelper extends OtherPageElements { public class OtherPageElementsHelper extends OtherPageElements {
@ -34,7 +32,7 @@ public class OtherPageElementsHelper extends OtherPageElements {
return headerName; return headerName;
} }
public boolean entityIsNotPresent(String entityName) { public boolean assertEntityIsNotPresent(String entityName) {
return elementIsNotPresent(getEntity(entityName)); return elementIsNotPresent(getEntity(entityName));
} }

2
msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/RuleChainsPageHelper.java

@ -107,7 +107,7 @@ public class RuleChainsPageHelper extends RuleChainsPageElements {
return wait.until(ExpectedConditions.invisibilityOfElementLocated(By.xpath(getDeleteRuleChainFromViewBtn()))); return wait.until(ExpectedConditions.invisibilityOfElementLocated(By.xpath(getDeleteRuleChainFromViewBtn())));
} }
public boolean ruleChainsIsNotPresent(String ruleChainName) { public boolean assertRuleChainsIsNotPresent(String ruleChainName) {
return elementsIsNotPresent(getEntity(ruleChainName)); return elementsIsNotPresent(getEntity(ruleChainName));
} }

2
msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/assetProfileSmoke/CreateAssetProfileImportTest.java

@ -98,7 +98,7 @@ public class CreateAssetProfileImportTest extends AbstractDriverBaseTest {
Assert.assertNotNull(profilesPage.importingFile(EMPTY_IMPORT_MESSAGE)); Assert.assertNotNull(profilesPage.importingFile(EMPTY_IMPORT_MESSAGE));
Assert.assertTrue(profilesPage.importingFile(EMPTY_IMPORT_MESSAGE).isDisplayed()); Assert.assertTrue(profilesPage.importingFile(EMPTY_IMPORT_MESSAGE).isDisplayed());
Assert.assertTrue(profilesPage.entityIsNotPresent(IMPORT_ASSET_PROFILE_NAME)); Assert.assertTrue(profilesPage.assertEntityIsNotPresent(IMPORT_ASSET_PROFILE_NAME));
} }
@Epic("Asset profiles smoke") @Epic("Asset profiles smoke")

8
msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/assetProfileSmoke/DeleteAssetProfileTest.java

@ -55,7 +55,7 @@ public class DeleteAssetProfileTest extends AbstractDriverBaseTest {
profilesPage.warningPopUpYesBtn().click(); profilesPage.warningPopUpYesBtn().click();
profilesPage.refreshBtn(); profilesPage.refreshBtn();
Assert.assertTrue(profilesPage.entityIsNotPresent(name)); Assert.assertTrue(profilesPage.assertEntityIsNotPresent(name));
} }
@Epic("Asset profiles smoke") @Epic("Asset profiles smoke")
@ -72,7 +72,7 @@ public class DeleteAssetProfileTest extends AbstractDriverBaseTest {
profilesPage.warningPopUpYesBtn().click(); profilesPage.warningPopUpYesBtn().click();
profilesPage.refreshBtn(); profilesPage.refreshBtn();
Assert.assertTrue(profilesPage.entityIsNotPresent(name)); Assert.assertTrue(profilesPage.assertEntityIsNotPresent(name));
} }
@Epic("Asset profiles smoke") @Epic("Asset profiles smoke")
@ -89,7 +89,7 @@ public class DeleteAssetProfileTest extends AbstractDriverBaseTest {
profilesPage.warningPopUpYesBtn().click(); profilesPage.warningPopUpYesBtn().click();
profilesPage.refreshBtn(); profilesPage.refreshBtn();
Assert.assertTrue(profilesPage.entityIsNotPresent(name)); Assert.assertTrue(profilesPage.assertEntityIsNotPresent(name));
} }
@Epic("Asset profiles smoke") @Epic("Asset profiles smoke")
@ -136,6 +136,6 @@ public class DeleteAssetProfileTest extends AbstractDriverBaseTest {
profilesPage.deleteBtn(name).click(); profilesPage.deleteBtn(name).click();
profilesPage.warningPopUpYesBtn().click(); profilesPage.warningPopUpYesBtn().click();
Assert.assertTrue(profilesPage.entityIsNotPresent(name)); Assert.assertTrue(profilesPage.assertEntityIsNotPresent(name));
} }
} }

8
msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/customerSmoke/DeleteCustomerTest.java

@ -57,7 +57,7 @@ public class DeleteCustomerTest extends AbstractDriverBaseTest {
String deletedCustomer = customerPage.deleteRuleChainTrash(customer); String deletedCustomer = customerPage.deleteRuleChainTrash(customer);
customerPage.refreshBtn().click(); customerPage.refreshBtn().click();
Assert.assertTrue(customerPage.entityIsNotPresent(deletedCustomer)); Assert.assertTrue(customerPage.assertEntityIsNotPresent(deletedCustomer));
} }
@Epic("Customers smoke tests") @Epic("Customers smoke tests")
@ -72,7 +72,7 @@ public class DeleteCustomerTest extends AbstractDriverBaseTest {
String deletedCustomer = customerPage.deleteSelected(customerName); String deletedCustomer = customerPage.deleteSelected(customerName);
ruleChainsPage.refreshBtn().click(); ruleChainsPage.refreshBtn().click();
Assert.assertTrue(ruleChainsPage.entityIsNotPresent(deletedCustomer)); Assert.assertTrue(ruleChainsPage.assertEntityIsNotPresent(deletedCustomer));
} }
@Epic("Customers smoke tests") @Epic("Customers smoke tests")
@ -89,7 +89,7 @@ public class DeleteCustomerTest extends AbstractDriverBaseTest {
customerPage.warningPopUpYesBtn().click(); customerPage.warningPopUpYesBtn().click();
jsClick(customerPage.refreshBtn()); jsClick(customerPage.refreshBtn());
Assert.assertTrue(customerPage.entityIsNotPresent(customerName)); Assert.assertTrue(customerPage.assertEntityIsNotPresent(customerName));
} }
@Epic("Customers smoke tests") @Epic("Customers smoke tests")
@ -104,6 +104,6 @@ public class DeleteCustomerTest extends AbstractDriverBaseTest {
String deletedCustomer = customerPage.deleteRuleChainTrash(customer); String deletedCustomer = customerPage.deleteRuleChainTrash(customer);
customerPage.refreshBtn().click(); customerPage.refreshBtn().click();
Assert.assertTrue(customerPage.entityIsNotPresent(deletedCustomer)); Assert.assertTrue(customerPage.assertEntityIsNotPresent(deletedCustomer));
} }
} }

2
msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/deviceProfileSmoke/CreateDeviceProfileImportTest.java

@ -98,7 +98,7 @@ public class CreateDeviceProfileImportTest extends AbstractDriverBaseTest {
Assert.assertNotNull(profilesPage.importingFile(EMPTY_IMPORT_MESSAGE)); Assert.assertNotNull(profilesPage.importingFile(EMPTY_IMPORT_MESSAGE));
Assert.assertTrue(profilesPage.importingFile(EMPTY_IMPORT_MESSAGE).isDisplayed()); Assert.assertTrue(profilesPage.importingFile(EMPTY_IMPORT_MESSAGE).isDisplayed());
Assert.assertTrue(profilesPage.entityIsNotPresent(IMPORT_DEVICE_PROFILE_NAME)); Assert.assertTrue(profilesPage.assertEntityIsNotPresent(IMPORT_DEVICE_PROFILE_NAME));
} }
@Epic("Device profile smoke tests") @Epic("Device profile smoke tests")

8
msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/deviceProfileSmoke/DeleteDeviceProfileTest.java

@ -55,7 +55,7 @@ public class DeleteDeviceProfileTest extends AbstractDriverBaseTest {
profilesPage.warningPopUpYesBtn().click(); profilesPage.warningPopUpYesBtn().click();
profilesPage.refreshBtn(); profilesPage.refreshBtn();
Assert.assertTrue(profilesPage.entityIsNotPresent(name)); Assert.assertTrue(profilesPage.assertEntityIsNotPresent(name));
} }
@Epic("Device profile smoke tests") @Epic("Device profile smoke tests")
@ -72,7 +72,7 @@ public class DeleteDeviceProfileTest extends AbstractDriverBaseTest {
profilesPage.warningPopUpYesBtn().click(); profilesPage.warningPopUpYesBtn().click();
profilesPage.refreshBtn(); profilesPage.refreshBtn();
Assert.assertTrue(profilesPage.entityIsNotPresent(name)); Assert.assertTrue(profilesPage.assertEntityIsNotPresent(name));
} }
@Epic("Device profile smoke tests") @Epic("Device profile smoke tests")
@ -89,7 +89,7 @@ public class DeleteDeviceProfileTest extends AbstractDriverBaseTest {
profilesPage.warningPopUpYesBtn().click(); profilesPage.warningPopUpYesBtn().click();
profilesPage.refreshBtn(); profilesPage.refreshBtn();
Assert.assertTrue(profilesPage.entityIsNotPresent(name)); Assert.assertTrue(profilesPage.assertEntityIsNotPresent(name));
} }
@Epic("Device profile smoke tests") @Epic("Device profile smoke tests")
@ -135,6 +135,6 @@ public class DeleteDeviceProfileTest extends AbstractDriverBaseTest {
profilesPage.deleteBtn(name).click(); profilesPage.deleteBtn(name).click();
profilesPage.warningPopUpYesBtn().click(); profilesPage.warningPopUpYesBtn().click();
Assert.assertTrue(profilesPage.entityIsNotPresent(name)); Assert.assertTrue(profilesPage.assertEntityIsNotPresent(name));
} }
} }

34
msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/ruleChainsSmoke/AbstractRuleChainTest.java

@ -0,0 +1,34 @@
package org.thingsboard.server.msa.ui.tests.ruleChainsSmoke;
import io.qameta.allure.Epic;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeClass;
import org.thingsboard.server.msa.ui.base.AbstractDriverBaseTest;
import org.thingsboard.server.msa.ui.pages.LoginPageHelper;
import org.thingsboard.server.msa.ui.pages.OpenRuleChainPageHelper;
import org.thingsboard.server.msa.ui.pages.RuleChainsPageHelper;
import org.thingsboard.server.msa.ui.pages.SideBarMenuViewElements;
@Epic("Rule chains smoke tests")
abstract public class AbstractRuleChainTest extends AbstractDriverBaseTest {
protected SideBarMenuViewElements sideBarMenuView;
protected RuleChainsPageHelper ruleChainsPage;
protected OpenRuleChainPageHelper openRuleChainPage;
protected String ruleChainName;
@BeforeClass
public void login() {
new LoginPageHelper(driver).authorizationTenant();
sideBarMenuView = new SideBarMenuViewElements(driver);
ruleChainsPage = new RuleChainsPageHelper(driver);
openRuleChainPage = new OpenRuleChainPageHelper(driver);
}
@AfterMethod
public void delete() {
deleteRuleChainByName(ruleChainName);
ruleChainName = null;
}
}

72
msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/ruleChainsSmoke/CreateRuleChainImportTest.java

@ -16,53 +16,24 @@
package org.thingsboard.server.msa.ui.tests.ruleChainsSmoke; package org.thingsboard.server.msa.ui.tests.ruleChainsSmoke;
import io.qameta.allure.Description; import io.qameta.allure.Description;
import io.qameta.allure.Epic;
import io.qameta.allure.Feature; import io.qameta.allure.Feature;
import org.openqa.selenium.WebElement; import org.openqa.selenium.WebElement;
import org.testng.Assert; import org.testng.Assert;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test; import org.testng.annotations.Test;
import org.thingsboard.server.msa.ui.base.AbstractDriverBaseTest;
import org.thingsboard.server.msa.ui.pages.LoginPageHelper;
import org.thingsboard.server.msa.ui.pages.OpenRuleChainPageHelper;
import org.thingsboard.server.msa.ui.pages.RuleChainsPageHelper;
import org.thingsboard.server.msa.ui.pages.SideBarMenuViewElements;
import java.util.ArrayList;
import static org.assertj.core.api.Assertions.assertThat;
import static org.thingsboard.server.msa.ui.utils.Const.EMPTY_IMPORT_MESSAGE; import static org.thingsboard.server.msa.ui.utils.Const.EMPTY_IMPORT_MESSAGE;
import static org.thingsboard.server.msa.ui.utils.Const.IMPORT_RULE_CHAIN_FILE_NAME; import static org.thingsboard.server.msa.ui.utils.Const.IMPORT_RULE_CHAIN_FILE_NAME;
import static org.thingsboard.server.msa.ui.utils.Const.IMPORT_RULE_CHAIN_NAME; import static org.thingsboard.server.msa.ui.utils.Const.IMPORT_RULE_CHAIN_NAME;
import static org.thingsboard.server.msa.ui.utils.Const.IMPORT_TXT_FILE_NAME; import static org.thingsboard.server.msa.ui.utils.Const.IMPORT_TXT_FILE_NAME;
import static org.thingsboard.server.msa.ui.utils.EntityPrototypes.defaultRuleChainPrototype; import static org.thingsboard.server.msa.ui.utils.EntityPrototypes.defaultRuleChainPrototype;
public class CreateRuleChainImportTest extends AbstractDriverBaseTest { @Feature("Import rule chain")
private SideBarMenuViewElements sideBarMenuView; public class CreateRuleChainImportTest extends AbstractRuleChainTest {
private RuleChainsPageHelper ruleChainsPage;
private OpenRuleChainPageHelper openRuleChainPage;
private final String absolutePathToFileImportRuleChain = getClass().getClassLoader().getResource(IMPORT_RULE_CHAIN_FILE_NAME).getPath(); private final String absolutePathToFileImportRuleChain = getClass().getClassLoader().getResource(IMPORT_RULE_CHAIN_FILE_NAME).getPath();
private final String absolutePathToFileImportTxt = getClass().getClassLoader().getResource(IMPORT_TXT_FILE_NAME).getPath(); private final String absolutePathToFileImportTxt = getClass().getClassLoader().getResource(IMPORT_TXT_FILE_NAME).getPath();
private String ruleChainName;
@BeforeClass
public void login() {
new LoginPageHelper(driver).authorizationTenant();
sideBarMenuView = new SideBarMenuViewElements(driver);
ruleChainsPage = new RuleChainsPageHelper(driver);
openRuleChainPage = new OpenRuleChainPageHelper(driver);
}
@AfterMethod
public void delete() {
if (ruleChainName != null) {
testRestClient.deleteRuleChain(getRuleChainByName(ruleChainName).getId());
ruleChainName = null;
}
}
@Epic("Rule chains smoke tests")
@Feature("Import rule chain")
@Test(priority = 10, groups = "smoke") @Test(priority = 10, groups = "smoke")
@Description("Drop json file") @Description("Drop json file")
public void importRuleChain() { public void importRuleChain() {
@ -70,12 +41,9 @@ public class CreateRuleChainImportTest extends AbstractDriverBaseTest {
ruleChainsPage.openImportRuleChainView(); ruleChainsPage.openImportRuleChainView();
ruleChainsPage.browseFile().sendKeys(absolutePathToFileImportRuleChain); ruleChainsPage.browseFile().sendKeys(absolutePathToFileImportRuleChain);
Assert.assertNotNull(ruleChainsPage.importingFile(IMPORT_RULE_CHAIN_FILE_NAME));
Assert.assertTrue(ruleChainsPage.importingFile(IMPORT_RULE_CHAIN_FILE_NAME).isDisplayed()); Assert.assertTrue(ruleChainsPage.importingFile(IMPORT_RULE_CHAIN_FILE_NAME).isDisplayed());
} }
@Epic("Rule chains smoke tests")
@Feature("Import rule chain")
@Test(priority = 20, groups = "smoke") @Test(priority = 20, groups = "smoke")
@Description("Drop json file and delete it") @Description("Drop json file and delete it")
public void importRuleChainAndDeleteFile() { public void importRuleChainAndDeleteFile() {
@ -84,13 +52,10 @@ public class CreateRuleChainImportTest extends AbstractDriverBaseTest {
ruleChainsPage.browseFile().sendKeys(absolutePathToFileImportRuleChain); ruleChainsPage.browseFile().sendKeys(absolutePathToFileImportRuleChain);
ruleChainsPage.clearImportFileBtn().click(); ruleChainsPage.clearImportFileBtn().click();
Assert.assertNotNull(ruleChainsPage.importingFile(EMPTY_IMPORT_MESSAGE)); assertIsDisplayed(ruleChainsPage.importingFile(EMPTY_IMPORT_MESSAGE));
Assert.assertTrue(ruleChainsPage.importingFile(EMPTY_IMPORT_MESSAGE).isDisplayed()); ruleChainsPage.assertEntityIsNotPresent(IMPORT_RULE_CHAIN_FILE_NAME);
Assert.assertTrue(ruleChainsPage.entityIsNotPresent(IMPORT_RULE_CHAIN_FILE_NAME));
} }
@Epic("Rule chains smoke tests")
@Feature("Import rule chain")
@Test(priority = 20, groups = "smoke") @Test(priority = 20, groups = "smoke")
@Description("Import txt file") @Description("Import txt file")
public void importTxtFile() { public void importTxtFile() {
@ -98,12 +63,9 @@ public class CreateRuleChainImportTest extends AbstractDriverBaseTest {
ruleChainsPage.openImportRuleChainView(); ruleChainsPage.openImportRuleChainView();
ruleChainsPage.browseFile().sendKeys(absolutePathToFileImportTxt); ruleChainsPage.browseFile().sendKeys(absolutePathToFileImportTxt);
Assert.assertNotNull(ruleChainsPage.importingFile(EMPTY_IMPORT_MESSAGE));
Assert.assertTrue(ruleChainsPage.importingFile(EMPTY_IMPORT_MESSAGE).isDisplayed()); Assert.assertTrue(ruleChainsPage.importingFile(EMPTY_IMPORT_MESSAGE).isDisplayed());
} }
@Epic("Rule chains smoke tests")
@Feature("Import rule chain")
@Test(priority = 30, groups = "smoke") @Test(priority = 30, groups = "smoke")
@Description("Import rule chain") @Description("Import rule chain")
public void importRuleChainAndSave() { public void importRuleChainAndSave() {
@ -116,18 +78,14 @@ public class CreateRuleChainImportTest extends AbstractDriverBaseTest {
ruleChainName = IMPORT_RULE_CHAIN_NAME; ruleChainName = IMPORT_RULE_CHAIN_NAME;
sideBarMenuView.ruleChainsBtn().click(); sideBarMenuView.ruleChainsBtn().click();
Assert.assertNotNull(ruleChainsPage.entity(IMPORT_RULE_CHAIN_NAME)); assertIsDisplayed(ruleChainsPage.entity(ruleChainName));
Assert.assertTrue(ruleChainsPage.entity(IMPORT_RULE_CHAIN_NAME).isDisplayed());
} }
@Epic("Rule chains smoke tests")
@Feature("Import rule chain")
@Test(priority = 40, groups = "smoke") @Test(priority = 40, groups = "smoke")
@Description("Import rule chain with same name") @Description("Import rule chain with same name")
public void importRuleChainAndSaveWithSameName() { public void importRuleChainAndSaveWithSameName() {
String ruleChainName = IMPORT_RULE_CHAIN_NAME; ruleChainName = IMPORT_RULE_CHAIN_NAME;
testRestClient.postRuleChain(defaultRuleChainPrototype(ruleChainName)); testRestClient.postRuleChain(defaultRuleChainPrototype(ruleChainName));
this.ruleChainName = ruleChainName;
sideBarMenuView.ruleChainsBtn().click(); sideBarMenuView.ruleChainsBtn().click();
ruleChainsPage.openImportRuleChainView(); ruleChainsPage.openImportRuleChainView();
@ -135,17 +93,11 @@ public class CreateRuleChainImportTest extends AbstractDriverBaseTest {
ruleChainsPage.importBrowseFileBtn().click(); ruleChainsPage.importBrowseFileBtn().click();
WebElement doneBtn = openRuleChainPage.doneBtn(); WebElement doneBtn = openRuleChainPage.doneBtn();
doneBtn.click(); doneBtn.click();
openRuleChainPage.doneBtn().click();
sideBarMenuView.ruleChainsBtn().click(); sideBarMenuView.ruleChainsBtn().click();
boolean entityNotNull = ruleChainsPage.entity(ruleChainName) != null; assertThat(ruleChainsPage.entities(ruleChainName).size() > 1).
boolean entitiesSizeMoreOne = ruleChainsPage.entities(ruleChainName).size() > 1; as("More than 1 rule chains have been created").isTrue();
ArrayList<Boolean> entityIsDisplayed = new ArrayList<>(); ruleChainsPage.entities(ruleChainName).forEach(this::assertIsDisplayed);
ruleChainsPage.entities(ruleChainName).forEach(x -> entityIsDisplayed.add(x.isDisplayed()));
testRestClient.deleteRuleChain(getRuleChainByName(ruleChainName).getId());
Assert.assertTrue(entityNotNull);
Assert.assertTrue(entitiesSizeMoreOne);
entityIsDisplayed.forEach(Assert::assertTrue);
} }
} }

95
msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/ruleChainsSmoke/CreateRuleChainTest.java

@ -16,51 +16,22 @@
package org.thingsboard.server.msa.ui.tests.ruleChainsSmoke; package org.thingsboard.server.msa.ui.tests.ruleChainsSmoke;
import io.qameta.allure.Description; import io.qameta.allure.Description;
import io.qameta.allure.Epic;
import io.qameta.allure.Feature; import io.qameta.allure.Feature;
import org.testng.Assert;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test; import org.testng.annotations.Test;
import org.thingsboard.server.msa.ui.base.AbstractDriverBaseTest;
import org.thingsboard.server.msa.ui.pages.LoginPageHelper;
import org.thingsboard.server.msa.ui.pages.RuleChainsPageHelper;
import org.thingsboard.server.msa.ui.pages.SideBarMenuViewElements;
import org.thingsboard.server.msa.ui.utils.EntityPrototypes; import org.thingsboard.server.msa.ui.utils.EntityPrototypes;
import java.util.ArrayList; import static org.assertj.core.api.Assertions.assertThat;
import static org.thingsboard.server.msa.ui.base.AbstractBasePage.random; import static org.thingsboard.server.msa.ui.base.AbstractBasePage.random;
import static org.thingsboard.server.msa.ui.utils.Const.EMPTY_RULE_CHAIN_MESSAGE; import static org.thingsboard.server.msa.ui.utils.Const.EMPTY_RULE_CHAIN_MESSAGE;
import static org.thingsboard.server.msa.ui.utils.Const.ENTITY_NAME; import static org.thingsboard.server.msa.ui.utils.Const.ENTITY_NAME;
public class CreateRuleChainTest extends AbstractDriverBaseTest { @Feature("Create rule chain")
public class CreateRuleChainTest extends AbstractRuleChainTest {
private SideBarMenuViewElements sideBarMenuView;
private RuleChainsPageHelper ruleChainsPage;
private String ruleChainName;
@BeforeClass
public void login() {
new LoginPageHelper(driver).authorizationTenant();
sideBarMenuView = new SideBarMenuViewElements(driver);
ruleChainsPage = new RuleChainsPageHelper(driver);
}
@AfterMethod
public void delete() {
if (ruleChainName != null) {
testRestClient.deleteRuleChain(getRuleChainByName(ruleChainName).getId());
ruleChainName = null;
}
}
@Epic("Rule chains smoke tests")
@Feature("Create rule chain")
@Test(priority = 10, groups = "smoke") @Test(priority = 10, groups = "smoke")
@Description("Add rule chain after specifying the name (text/numbers /special characters)") @Description("Add rule chain after specifying the name (text/numbers /special characters)")
public void createRuleChain() { public void createRuleChain() {
String ruleChainName = ENTITY_NAME + random(); ruleChainName = ENTITY_NAME + random();
sideBarMenuView.ruleChainsBtn().click(); sideBarMenuView.ruleChainsBtn().click();
ruleChainsPage.openCreateRuleChainView(); ruleChainsPage.openCreateRuleChainView();
@ -68,18 +39,14 @@ public class CreateRuleChainTest extends AbstractDriverBaseTest {
ruleChainsPage.nameField().sendKeys(ruleChainName); ruleChainsPage.nameField().sendKeys(ruleChainName);
ruleChainsPage.addBtnC().click(); ruleChainsPage.addBtnC().click();
ruleChainsPage.refreshBtn().click(); ruleChainsPage.refreshBtn().click();
this.ruleChainName = ruleChainName;
Assert.assertNotNull(ruleChainsPage.entity(ruleChainName)); assertIsDisplayed(ruleChainsPage.entity(ruleChainName));
Assert.assertTrue(ruleChainsPage.entity(ruleChainName).isDisplayed());
} }
@Epic("Rule chains smoke tests")
@Feature("Create rule chain")
@Test(priority = 10, groups = "smoke") @Test(priority = 10, groups = "smoke")
@Description("Add rule chain after specifying the name and description (text/numbers /special characters)") @Description("Add rule chain after specifying the name and description (text/numbers /special characters)")
public void createRuleChainWithDescription() { public void createRuleChainWithDescription() {
String ruleChainName = ENTITY_NAME + random(); ruleChainName = ENTITY_NAME + random();
sideBarMenuView.ruleChainsBtn().click(); sideBarMenuView.ruleChainsBtn().click();
ruleChainsPage.openCreateRuleChainView(); ruleChainsPage.openCreateRuleChainView();
@ -87,27 +54,23 @@ public class CreateRuleChainTest extends AbstractDriverBaseTest {
ruleChainsPage.descriptionAddEntityView().sendKeys(ruleChainName); ruleChainsPage.descriptionAddEntityView().sendKeys(ruleChainName);
ruleChainsPage.addBtnC().click(); ruleChainsPage.addBtnC().click();
ruleChainsPage.refreshBtn().click(); ruleChainsPage.refreshBtn().click();
this.ruleChainName = ruleChainName;
ruleChainsPage.detailsBtn(ruleChainName).click(); ruleChainsPage.detailsBtn(ruleChainName).click();
ruleChainsPage.setHeaderName(); ruleChainsPage.setHeaderName();
Assert.assertEquals(ruleChainsPage.getHeaderName(), ruleChainName); assertThat(ruleChainsPage.getHeaderName()).as("Header of rule chain details tab").isEqualTo(ruleChainName);
Assert.assertEquals(ruleChainsPage.descriptionEntityView().getAttribute("value"), ruleChainName); assertThat(ruleChainsPage.descriptionEntityView().getAttribute("value"))
.as("Description in rule chain details tab").isEqualTo(ruleChainName);
} }
@Epic("Rule chains smoke tests")
@Feature("Create rule chain")
@Test(priority = 20, groups = "smoke") @Test(priority = 20, groups = "smoke")
@Description("Add rule chain without the name") @Description("Add rule chain without the name")
public void createRuleChainWithoutName() { public void createRuleChainWithoutName() {
sideBarMenuView.ruleChainsBtn().click(); sideBarMenuView.ruleChainsBtn().click();
ruleChainsPage.openCreateRuleChainView(); ruleChainsPage.openCreateRuleChainView();
Assert.assertFalse(ruleChainsPage.addBtnV().isEnabled()); assertIsDisable(ruleChainsPage.addBtnV());
} }
@Epic("Rule chains smoke tests")
@Feature("Create rule chain")
@Test(priority = 20, groups = "smoke") @Test(priority = 20, groups = "smoke")
@Description("Create rule chain only with spase in name") @Description("Create rule chain only with spase in name")
public void createRuleChainWithOnlySpace() { public void createRuleChainWithOnlySpace() {
@ -116,21 +79,16 @@ public class CreateRuleChainTest extends AbstractDriverBaseTest {
ruleChainsPage.nameField().sendKeys(" "); ruleChainsPage.nameField().sendKeys(" ");
ruleChainsPage.addBtnC().click(); ruleChainsPage.addBtnC().click();
Assert.assertNotNull(ruleChainsPage.warningMessage()); assertIsDisplayed(ruleChainsPage.warningMessage());
Assert.assertTrue(ruleChainsPage.warningMessage().isDisplayed()); assertThat(ruleChainsPage.warningMessage().getText()).as("Text of warning message").isEqualTo(EMPTY_RULE_CHAIN_MESSAGE);
Assert.assertEquals(ruleChainsPage.warningMessage().getText(), EMPTY_RULE_CHAIN_MESSAGE); assertIsDisplayed(ruleChainsPage.addEntityView());
Assert.assertNotNull(ruleChainsPage.addEntityView());
Assert.assertTrue(ruleChainsPage.addEntityView().isDisplayed());
} }
@Epic("Rule chains smoke tests")
@Feature("Create rule chain")
@Test(priority = 20, groups = "smoke") @Test(priority = 20, groups = "smoke")
@Description("Create a rule chain with the same name") @Description("Create a rule chain with the same name")
public void createRuleChainWithSameName() { public void createRuleChainWithSameName() {
String ruleChainName = ENTITY_NAME + random(); ruleChainName = ENTITY_NAME + random();
testRestClient.postRuleChain(EntityPrototypes.defaultRuleChainPrototype(ruleChainName)); testRestClient.postRuleChain(EntityPrototypes.defaultRuleChainPrototype(ruleChainName));
this.ruleChainName = ruleChainName;
sideBarMenuView.ruleChainsBtn().click(); sideBarMenuView.ruleChainsBtn().click();
ruleChainsPage.openCreateRuleChainView(); ruleChainsPage.openCreateRuleChainView();
@ -138,37 +96,24 @@ public class CreateRuleChainTest extends AbstractDriverBaseTest {
ruleChainsPage.addBtnC().click(); ruleChainsPage.addBtnC().click();
ruleChainsPage.refreshBtn().click(); ruleChainsPage.refreshBtn().click();
boolean entityNotNull = ruleChainsPage.entity(ruleChainName) != null; assertThat(ruleChainsPage.entities(ruleChainName).size() > 1).
boolean entitiesSizeMoreOne = ruleChainsPage.entities(ruleChainName).size() > 1; as("More than 1 rule chains have been created").isTrue();
ArrayList<Boolean> entityIsDisplayed = new ArrayList<>(); ruleChainsPage.entities(ruleChainName).forEach(this::assertIsDisplayed);
ruleChainsPage.entities(ruleChainName).forEach(x -> entityIsDisplayed.add(x.isDisplayed()));
testRestClient.deleteRuleChain(getRuleChainByName(ruleChainName).getId());
Assert.assertTrue(entityNotNull);
Assert.assertTrue(entitiesSizeMoreOne);
entityIsDisplayed.forEach(Assert::assertTrue);
} }
@Epic("Rule chains smoke tests")
@Feature("Create rule chain")
@Test(priority = 30, groups = "smoke") @Test(priority = 30, groups = "smoke")
@Description("Add rule chain after specifying the name (text/numbers /special characters) without refresh") @Description("Add rule chain after specifying the name (text/numbers /special characters) without refresh")
public void createRuleChainWithoutRefresh() { public void createRuleChainWithoutRefresh() {
String ruleChainName = ENTITY_NAME + random(); ruleChainName = ENTITY_NAME + random();
sideBarMenuView.ruleChainsBtn().click(); sideBarMenuView.ruleChainsBtn().click();
ruleChainsPage.openCreateRuleChainView(); ruleChainsPage.openCreateRuleChainView();
ruleChainsPage.nameField().sendKeys(ruleChainName); ruleChainsPage.nameField().sendKeys(ruleChainName);
ruleChainsPage.addBtnC().click(); ruleChainsPage.addBtnC().click();
this.ruleChainName = ruleChainName;
Assert.assertNotNull(ruleChainsPage.entity(ruleChainName)); assertIsDisplayed(ruleChainsPage.entity(ruleChainName));
Assert.assertTrue(ruleChainsPage.entity(ruleChainName).isDisplayed());
} }
@Epic("Rule chains smoke tests")
@Feature("Create rule chain")
@Test(priority = 40, groups = "smoke") @Test(priority = 40, groups = "smoke")
@Description("Go to rule chain documentation page") @Description("Go to rule chain documentation page")
public void documentation() { public void documentation() {
@ -179,6 +124,6 @@ public class CreateRuleChainTest extends AbstractDriverBaseTest {
ruleChainsPage.detailsBtn(ruleChainsPage.getRuleChainName()).click(); ruleChainsPage.detailsBtn(ruleChainsPage.getRuleChainName()).click();
ruleChainsPage.goToHelpPage(); ruleChainsPage.goToHelpPage();
Assert.assertTrue(urlContains(urlPath), "URL contains " + urlPath); assertThat(urlContains(urlPath)).as("Redirected URL contains " + urlPath).isTrue();
} }
} }

78
msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/ruleChainsSmoke/DeleteRuleChainTest.java

@ -18,67 +18,48 @@ package org.thingsboard.server.msa.ui.tests.ruleChainsSmoke;
import io.qameta.allure.Description; import io.qameta.allure.Description;
import io.qameta.allure.Epic; import io.qameta.allure.Epic;
import io.qameta.allure.Feature; import io.qameta.allure.Feature;
import org.testng.Assert;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test; import org.testng.annotations.Test;
import org.thingsboard.server.msa.ui.base.AbstractDriverBaseTest;
import org.thingsboard.server.msa.ui.pages.LoginPageHelper;
import org.thingsboard.server.msa.ui.pages.RuleChainsPageHelper;
import org.thingsboard.server.msa.ui.pages.SideBarMenuViewElements;
import static org.assertj.core.api.Assertions.assertThat;
import static org.thingsboard.server.msa.ui.base.AbstractBasePage.random; import static org.thingsboard.server.msa.ui.base.AbstractBasePage.random;
import static org.thingsboard.server.msa.ui.utils.Const.DELETE_RULE_CHAIN_WITH_PROFILE_MESSAGE; import static org.thingsboard.server.msa.ui.utils.Const.DELETE_RULE_CHAIN_WITH_PROFILE_MESSAGE;
import static org.thingsboard.server.msa.ui.utils.Const.ENTITY_NAME; import static org.thingsboard.server.msa.ui.utils.Const.ENTITY_NAME;
import static org.thingsboard.server.msa.ui.utils.Const.ROOT_RULE_CHAIN_NAME; import static org.thingsboard.server.msa.ui.utils.Const.ROOT_RULE_CHAIN_NAME;
import static org.thingsboard.server.msa.ui.utils.EntityPrototypes.defaultRuleChainPrototype; import static org.thingsboard.server.msa.ui.utils.EntityPrototypes.defaultRuleChainPrototype;
public class DeleteRuleChainTest extends AbstractDriverBaseTest { @Feature("Delete rule chain")
private SideBarMenuViewElements sideBarMenuView; public class DeleteRuleChainTest extends AbstractRuleChainTest {
private RuleChainsPageHelper ruleChainsPage;
@BeforeClass
public void login() {
new LoginPageHelper(driver).authorizationTenant();
sideBarMenuView = new SideBarMenuViewElements(driver);
ruleChainsPage = new RuleChainsPageHelper(driver);
}
@Epic("Rule chains smoke tests")
@Feature("Delete rule chain")
@Test(priority = 10, groups = "smoke") @Test(priority = 10, groups = "smoke")
@Description("Remove the rule chain by clicking on the trash icon in the right side of rule chain") @Description("Remove the rule chain by clicking on the trash icon in the right side of rule chain")
public void removeRuleChainByRightSideBtn() { public void removeRuleChainByRightSideBtn() {
String ruleChainName = ENTITY_NAME + random(); ruleChainName = ENTITY_NAME + random();
testRestClient.postRuleChain(defaultRuleChainPrototype(ruleChainName)); testRestClient.postRuleChain(defaultRuleChainPrototype(ruleChainName));
sideBarMenuView.ruleChainsBtn().click(); sideBarMenuView.ruleChainsBtn().click();
String deletedRuleChain = ruleChainsPage.deleteRuleChainTrash(ruleChainName); String deletedRuleChain = ruleChainsPage.deleteRuleChainTrash(ruleChainName);
ruleChainsPage.refreshBtn().click(); ruleChainsPage.refreshBtn().click();
Assert.assertTrue(ruleChainsPage.entityIsNotPresent(deletedRuleChain)); ruleChainsPage.assertEntityIsNotPresent(deletedRuleChain);
} }
@Epic("Rule chains smoke tests")
@Feature("Delete rule chain")
@Test(priority = 20, groups = "smoke") @Test(priority = 20, groups = "smoke")
@Description("Remove rule chain by mark in the checkbox and then click on the trash can icon in the menu that appears at the top") @Description("Remove rule chain by mark in the checkbox and then click on the trash can icon in the menu that appears at the top")
public void removeSelectedRuleChain() { public void removeSelectedRuleChain() {
String ruleChainName = ENTITY_NAME + random(); ruleChainName = ENTITY_NAME + random();
testRestClient.postRuleChain(defaultRuleChainPrototype(ruleChainName)); testRestClient.postRuleChain(defaultRuleChainPrototype(ruleChainName));
sideBarMenuView.ruleChainsBtn().click(); sideBarMenuView.ruleChainsBtn().click();
String deletedRuleChain = ruleChainsPage.deleteSelected(ruleChainName); String deletedRuleChain = ruleChainsPage.deleteSelected(ruleChainName);
ruleChainsPage.refreshBtn().click(); ruleChainsPage.refreshBtn().click();
Assert.assertTrue(ruleChainsPage.entityIsNotPresent(deletedRuleChain)); ruleChainsPage.assertEntityIsNotPresent(deletedRuleChain);
} }
@Epic("Rule chains smoke tests")
@Feature("Delete rule chain")
@Test(priority = 20, groups = "smoke") @Test(priority = 20, groups = "smoke")
@Description("Remove the rule chain by clicking on the 'Delete rule chain' btn in the entity view") @Description("Remove the rule chain by clicking on the 'Delete rule chain' btn in the entity view")
public void removeFromRuleChainView() { public void removeFromRuleChainView() {
String ruleChainName = ENTITY_NAME + random(); ruleChainName = ENTITY_NAME + random();
testRestClient.postRuleChain(defaultRuleChainPrototype(ruleChainName)); testRestClient.postRuleChain(defaultRuleChainPrototype(ruleChainName));
sideBarMenuView.ruleChainsBtn().click(); sideBarMenuView.ruleChainsBtn().click();
@ -86,21 +67,17 @@ public class DeleteRuleChainTest extends AbstractDriverBaseTest {
String deletedRuleChain = ruleChainsPage.deleteRuleChainFromView(ruleChainName); String deletedRuleChain = ruleChainsPage.deleteRuleChainFromView(ruleChainName);
jsClick(ruleChainsPage.refreshBtn()); jsClick(ruleChainsPage.refreshBtn());
Assert.assertTrue(ruleChainsPage.entityIsNotPresent(deletedRuleChain)); ruleChainsPage.assertEntityIsNotPresent(deletedRuleChain);
} }
@Epic("Rule chains smoke tests")
@Feature("Delete rule chain")
@Test(priority = 20, groups = "smoke") @Test(priority = 20, groups = "smoke")
@Description("Remove the root rule chain by clicking on the trash icon in the right side of rule chain") @Description("Remove the root rule chain by clicking on the trash icon in the right side of rule chain")
public void removeRootRuleChain() { public void removeRootRuleChain() {
sideBarMenuView.ruleChainsBtn().click(); sideBarMenuView.ruleChainsBtn().click();
Assert.assertFalse(ruleChainsPage.deleteBtn(ROOT_RULE_CHAIN_NAME).isEnabled()); assertIsDisable(ruleChainsPage.deleteBtn(ROOT_RULE_CHAIN_NAME));
} }
@Epic("Rule chains smoke tests")
@Feature("Delete rule chain")
@Test(priority = 20, groups = "smoke") @Test(priority = 20, groups = "smoke")
@Description("Remove root rule chain by mark in the checkbox and then click on the trash can icon in the menu that appears at the top") @Description("Remove root rule chain by mark in the checkbox and then click on the trash can icon in the menu that appears at the top")
public void removeSelectedRootRuleChain() { public void removeSelectedRootRuleChain() {
@ -117,7 +94,8 @@ public class DeleteRuleChainTest extends AbstractDriverBaseTest {
sideBarMenuView.ruleChainsBtn().click(); sideBarMenuView.ruleChainsBtn().click();
ruleChainsPage.detailsBtn(ROOT_RULE_CHAIN_NAME).click(); ruleChainsPage.detailsBtn(ROOT_RULE_CHAIN_NAME).click();
Assert.assertTrue(ruleChainsPage.deleteBtnInRootRuleChainIsNotDisplayed()); assertThat(ruleChainsPage.deleteBtnInRootRuleChainIsNotDisplayed())
.as("Delete btn isn't displayed in details tab").isTrue();
} }
@Epic("Rule chains smoke tests") @Epic("Rule chains smoke tests")
@ -132,15 +110,12 @@ public class DeleteRuleChainTest extends AbstractDriverBaseTest {
ruleChainsPage.warningPopUpYesBtn().click(); ruleChainsPage.warningPopUpYesBtn().click();
ruleChainsPage.refreshBtn().click(); ruleChainsPage.refreshBtn().click();
Assert.assertNotNull(ruleChainsPage.entity(deletedRuleChain)); assertIsDisplayed(ruleChainsPage.entity(deletedRuleChain));
Assert.assertTrue(ruleChainsPage.entity(deletedRuleChain).isDisplayed()); assertIsDisplayed(ruleChainsPage.warningMessage());
Assert.assertNotNull(ruleChainsPage.warningMessage()); assertThat(ruleChainsPage.warningMessage().getText())
Assert.assertTrue(ruleChainsPage.warningMessage().isDisplayed()); .as("Text of warning message").isEqualTo(DELETE_RULE_CHAIN_WITH_PROFILE_MESSAGE);
Assert.assertEquals(ruleChainsPage.warningMessage().getText(), DELETE_RULE_CHAIN_WITH_PROFILE_MESSAGE);
} }
@Epic("Rule chains smoke tests")
@Feature("Delete rule chain")
@Test(priority = 20, groups = "smoke") @Test(priority = 20, groups = "smoke")
@Description("Remove the rule chain with device profile by mark in the checkbox and then click on the trash can icon in the menu that appears at the top") @Description("Remove the rule chain with device profile by mark in the checkbox and then click on the trash can icon in the menu that appears at the top")
public void removeSelectedProfileRuleChain() { public void removeSelectedProfileRuleChain() {
@ -148,11 +123,10 @@ public class DeleteRuleChainTest extends AbstractDriverBaseTest {
String deletedRuleChain = ruleChainsPage.deleteSelected("Thermostat"); String deletedRuleChain = ruleChainsPage.deleteSelected("Thermostat");
ruleChainsPage.refreshBtn().click(); ruleChainsPage.refreshBtn().click();
Assert.assertNotNull(ruleChainsPage.entity(deletedRuleChain)); assertIsDisplayed(ruleChainsPage.entity(deletedRuleChain));
Assert.assertTrue(ruleChainsPage.entity(deletedRuleChain).isDisplayed()); assertIsDisplayed(ruleChainsPage.warningMessage());
Assert.assertNotNull(ruleChainsPage.warningMessage()); assertThat(ruleChainsPage.warningMessage().getText())
Assert.assertTrue(ruleChainsPage.warningMessage().isDisplayed()); .as("Text of warning message").isEqualTo(DELETE_RULE_CHAIN_WITH_PROFILE_MESSAGE);
Assert.assertEquals(ruleChainsPage.warningMessage().getText(), DELETE_RULE_CHAIN_WITH_PROFILE_MESSAGE);
} }
@Epic("Rule chains smoke tests") @Epic("Rule chains smoke tests")
@ -167,10 +141,10 @@ public class DeleteRuleChainTest extends AbstractDriverBaseTest {
jsClick(ruleChainsPage.deleteBtnFromView()); jsClick(ruleChainsPage.deleteBtnFromView());
ruleChainsPage.warningPopUpYesBtn().click(); ruleChainsPage.warningPopUpYesBtn().click();
Assert.assertNotNull(ruleChainsPage.entity(deletedRuleChain)); assertIsDisplayed(ruleChainsPage.entity(deletedRuleChain));
Assert.assertNotNull(ruleChainsPage.warningMessage()); assertIsDisplayed(ruleChainsPage.warningMessage());
Assert.assertTrue(ruleChainsPage.warningMessage().isDisplayed()); assertThat(ruleChainsPage.warningMessage().getText())
Assert.assertEquals(ruleChainsPage.warningMessage().getText(), DELETE_RULE_CHAIN_WITH_PROFILE_MESSAGE); .as("Text of warning message").isEqualTo(DELETE_RULE_CHAIN_WITH_PROFILE_MESSAGE);
} }
@Epic("Rule chains smoke tests") @Epic("Rule chains smoke tests")
@ -178,12 +152,12 @@ public class DeleteRuleChainTest extends AbstractDriverBaseTest {
@Test(priority = 30, groups = "smoke") @Test(priority = 30, groups = "smoke")
@Description("Remove the rule chain by clicking on the trash icon in the right side of rule chain without refresh") @Description("Remove the rule chain by clicking on the trash icon in the right side of rule chain without refresh")
public void removeRuleChainByRightSideBtnWithoutRefresh() { public void removeRuleChainByRightSideBtnWithoutRefresh() {
String ruleChainName = ENTITY_NAME + random(); ruleChainName = ENTITY_NAME + random();
testRestClient.postRuleChain(defaultRuleChainPrototype(ruleChainName)); testRestClient.postRuleChain(defaultRuleChainPrototype(ruleChainName));
sideBarMenuView.ruleChainsBtn().click(); sideBarMenuView.ruleChainsBtn().click();
String deletedRuleChain = ruleChainsPage.deleteRuleChainTrash(ruleChainName); String deletedRuleChain = ruleChainsPage.deleteRuleChainTrash(ruleChainName);
Assert.assertTrue(ruleChainsPage.entityIsNotPresent(deletedRuleChain)); ruleChainsPage.assertEntityIsNotPresent(deletedRuleChain);
} }
} }

41
msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/ruleChainsSmoke/DeleteSeveralRuleChainsTest.java

@ -16,40 +16,23 @@
package org.thingsboard.server.msa.ui.tests.ruleChainsSmoke; package org.thingsboard.server.msa.ui.tests.ruleChainsSmoke;
import io.qameta.allure.Description; import io.qameta.allure.Description;
import io.qameta.allure.Epic;
import io.qameta.allure.Feature; import io.qameta.allure.Feature;
import org.testng.Assert; import org.testng.Assert;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test; import org.testng.annotations.Test;
import org.thingsboard.server.msa.ui.base.AbstractDriverBaseTest;
import org.thingsboard.server.msa.ui.pages.LoginPageHelper;
import org.thingsboard.server.msa.ui.pages.RuleChainsPageHelper;
import org.thingsboard.server.msa.ui.pages.SideBarMenuViewElements;
import static org.thingsboard.server.msa.ui.base.AbstractBasePage.random; import static org.thingsboard.server.msa.ui.base.AbstractBasePage.random;
import static org.thingsboard.server.msa.ui.utils.Const.ENTITY_NAME; import static org.thingsboard.server.msa.ui.utils.Const.ENTITY_NAME;
import static org.thingsboard.server.msa.ui.utils.Const.ROOT_RULE_CHAIN_NAME; import static org.thingsboard.server.msa.ui.utils.Const.ROOT_RULE_CHAIN_NAME;
import static org.thingsboard.server.msa.ui.utils.EntityPrototypes.defaultRuleChainPrototype; import static org.thingsboard.server.msa.ui.utils.EntityPrototypes.defaultRuleChainPrototype;
public class DeleteSeveralRuleChainsTest extends AbstractDriverBaseTest { @Feature("Delete several rule chains")
public class DeleteSeveralRuleChainsTest extends AbstractRuleChainTest {
private SideBarMenuViewElements sideBarMenuView;
private RuleChainsPageHelper ruleChainsPage;
@BeforeClass
public void login() {
new LoginPageHelper(driver).authorizationTenant();
sideBarMenuView = new SideBarMenuViewElements(driver);
ruleChainsPage = new RuleChainsPageHelper(driver);
}
@Epic("Rule chains smoke tests")
@Feature("Delete several rule chains")
@Test(priority = 10, groups = "smoke") @Test(priority = 10, groups = "smoke")
@Description("Remove several rule chains by mark in the checkbox and then click on the trash can icon in the menu " + @Description("Remove several rule chains by mark in the checkbox and then click on the trash can icon in the menu " +
"that appears at the top") "that appears at the top")
public void canDeleteSeveralRuleChainsByTopBtn() { public void canDeleteSeveralRuleChainsByTopBtn() {
String ruleChainName = ENTITY_NAME + random(); ruleChainName = ENTITY_NAME + random();
testRestClient.postRuleChain(defaultRuleChainPrototype(ruleChainName + 1)); testRestClient.postRuleChain(defaultRuleChainPrototype(ruleChainName + 1));
testRestClient.postRuleChain(defaultRuleChainPrototype(ruleChainName)); testRestClient.postRuleChain(defaultRuleChainPrototype(ruleChainName));
@ -57,16 +40,14 @@ public class DeleteSeveralRuleChainsTest extends AbstractDriverBaseTest {
ruleChainsPage.deleteSelected(2); ruleChainsPage.deleteSelected(2);
ruleChainsPage.refreshBtn().click(); ruleChainsPage.refreshBtn().click();
Assert.assertTrue(ruleChainsPage.ruleChainsIsNotPresent(ruleChainName)); ruleChainsPage.assertRuleChainsIsNotPresent(ruleChainName);
} }
@Epic("Rule chains smoke tests")
@Feature("Delete several rule chains")
@Test(priority = 10, groups = "smoke") @Test(priority = 10, groups = "smoke")
@Description("Remove several rule chains by mark all the rule chains on the page by clicking in the topmost checkbox" + @Description("Remove several rule chains by mark all the rule chains on the page by clicking in the topmost checkbox" +
" and then clicking on the trash icon in the menu that appears") " and then clicking on the trash icon in the menu that appears")
public void selectAllRuleChain() { public void selectAllRuleChain() {
String ruleChainName = ENTITY_NAME + random(); ruleChainName = ENTITY_NAME + random();
testRestClient.postRuleChain(defaultRuleChainPrototype(ruleChainName + 1)); testRestClient.postRuleChain(defaultRuleChainPrototype(ruleChainName + 1));
testRestClient.postRuleChain(defaultRuleChainPrototype(ruleChainName)); testRestClient.postRuleChain(defaultRuleChainPrototype(ruleChainName));
@ -76,11 +57,9 @@ public class DeleteSeveralRuleChainsTest extends AbstractDriverBaseTest {
ruleChainsPage.warningPopUpYesBtn().click(); ruleChainsPage.warningPopUpYesBtn().click();
ruleChainsPage.refreshBtn().click(); ruleChainsPage.refreshBtn().click();
Assert.assertTrue(ruleChainsPage.ruleChainsIsNotPresent(ruleChainName)); ruleChainsPage.assertRuleChainsIsNotPresent(ruleChainName);
} }
@Epic("Rule chains smoke tests")
@Feature("Delete several rule chains")
@Test(priority = 20, groups = "smoke") @Test(priority = 20, groups = "smoke")
@Description("Remove the root rule chain by mark in the checkbox and then click on the trash can icon in the menu " + @Description("Remove the root rule chain by mark in the checkbox and then click on the trash can icon in the menu " +
"that appears at the top") "that appears at the top")
@ -88,11 +67,9 @@ public class DeleteSeveralRuleChainsTest extends AbstractDriverBaseTest {
sideBarMenuView.ruleChainsBtn().click(); sideBarMenuView.ruleChainsBtn().click();
ruleChainsPage.selectAllCheckBox().click(); ruleChainsPage.selectAllCheckBox().click();
Assert.assertFalse(ruleChainsPage.deleteBtn(ROOT_RULE_CHAIN_NAME).isEnabled()); assertIsDisable(ruleChainsPage.deleteBtn(ROOT_RULE_CHAIN_NAME));
} }
@Epic("Rule chains smoke tests")
@Feature("Delete several rule chains")
@Test(priority = 20, groups = "smoke") @Test(priority = 20, groups = "smoke")
@Description("Remove the root rule chain by mark all the rule chains on the page by clicking in the topmost checkbox" + @Description("Remove the root rule chain by mark all the rule chains on the page by clicking in the topmost checkbox" +
" and then clicking on the trash icon in the menu that appears") " and then clicking on the trash icon in the menu that appears")
@ -103,8 +80,6 @@ public class DeleteSeveralRuleChainsTest extends AbstractDriverBaseTest {
ruleChainsPage.assertCheckBoxIsNotDisplayed(ROOT_RULE_CHAIN_NAME); ruleChainsPage.assertCheckBoxIsNotDisplayed(ROOT_RULE_CHAIN_NAME);
} }
@Epic("Rule chains smoke tests")
@Feature("Delete several rule chains")
@Test(priority = 30, groups = "smoke") @Test(priority = 30, groups = "smoke")
@Description("Remove several rule chains by mark in the checkbox and then click on the trash can icon in the menu " + @Description("Remove several rule chains by mark in the checkbox and then click on the trash can icon in the menu " +
"that appears at the top without refresh") "that appears at the top without refresh")
@ -116,6 +91,6 @@ public class DeleteSeveralRuleChainsTest extends AbstractDriverBaseTest {
sideBarMenuView.ruleChainsBtn().click(); sideBarMenuView.ruleChainsBtn().click();
ruleChainsPage.deleteSelected(2); ruleChainsPage.deleteSelected(2);
Assert.assertTrue(ruleChainsPage.ruleChainsIsNotPresent(ruleChainName)); Assert.assertTrue(ruleChainsPage.assertRuleChainsIsNotPresent(ruleChainName));
} }
} }

32
msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/ruleChainsSmoke/MakeRuleChainRootTest.java

@ -16,36 +16,20 @@
package org.thingsboard.server.msa.ui.tests.ruleChainsSmoke; package org.thingsboard.server.msa.ui.tests.ruleChainsSmoke;
import io.qameta.allure.Description; import io.qameta.allure.Description;
import io.qameta.allure.Epic;
import io.qameta.allure.Feature; import io.qameta.allure.Feature;
import org.testng.Assert;
import org.testng.annotations.AfterMethod; import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test; import org.testng.annotations.Test;
import org.thingsboard.server.msa.ui.base.AbstractDriverBaseTest;
import org.thingsboard.server.msa.ui.pages.LoginPageHelper;
import org.thingsboard.server.msa.ui.pages.RuleChainsPageHelper;
import org.thingsboard.server.msa.ui.pages.SideBarMenuViewElements;
public class MakeRuleChainRootTest extends AbstractDriverBaseTest { import static org.assertj.core.api.Assertions.assertThat;
private SideBarMenuViewElements sideBarMenuView; @Feature("Make rule chain root")
private RuleChainsPageHelper ruleChainsPage; public class MakeRuleChainRootTest extends AbstractRuleChainTest {
@BeforeClass
public void login() {
new LoginPageHelper(driver).authorizationTenant();
sideBarMenuView = new SideBarMenuViewElements(driver);
ruleChainsPage = new RuleChainsPageHelper(driver);
}
@AfterMethod @AfterMethod
public void makeRoot() { public void makeRoot() {
testRestClient.setRootRuleChain(getRuleChainByName("Root Rule Chain").getId()); testRestClient.setRootRuleChain(getRuleChainByName("Root Rule Chain").getId());
} }
@Epic("Rule chains smoke tests")
@Feature("Make rule chain root")
@Test(priority = 10, groups = "smoke") @Test(priority = 10, groups = "smoke")
@Description("Make rule chain root by clicking on the 'Make rule chain root' icon in the right corner") @Description("Make rule chain root by clicking on the 'Make rule chain root' icon in the right corner")
public void makeRuleChainRootByRightCornerBtn() { public void makeRuleChainRootByRightCornerBtn() {
@ -55,11 +39,9 @@ public class MakeRuleChainRootTest extends AbstractDriverBaseTest {
ruleChainsPage.makeRootBtn(ruleChain).click(); ruleChainsPage.makeRootBtn(ruleChain).click();
ruleChainsPage.warningPopUpYesBtn().click(); ruleChainsPage.warningPopUpYesBtn().click();
Assert.assertTrue(ruleChainsPage.rootCheckBoxEnable(ruleChain).isDisplayed()); assertIsDisplayed(ruleChainsPage.rootCheckBoxEnable(ruleChain));
} }
@Epic("Rule chains smoke tests")
@Feature("Make rule chain root")
@Test(priority = 20, groups = "smoke") @Test(priority = 20, groups = "smoke")
@Description("Make rule chain root by clicking on the 'Make rule chain root' button in the entity view") @Description("Make rule chain root by clicking on the 'Make rule chain root' button in the entity view")
public void makeRuleChainRootFromView() { public void makeRuleChainRootFromView() {
@ -71,11 +53,9 @@ public class MakeRuleChainRootTest extends AbstractDriverBaseTest {
ruleChainsPage.warningPopUpYesBtn().click(); ruleChainsPage.warningPopUpYesBtn().click();
ruleChainsPage.closeEntityViewBtn().click(); ruleChainsPage.closeEntityViewBtn().click();
Assert.assertTrue(ruleChainsPage.rootCheckBoxEnable(ruleChain).isDisplayed()); assertIsDisplayed(ruleChainsPage.rootCheckBoxEnable(ruleChain));
} }
@Epic("Rule chains smoke tests")
@Feature("Make rule chain root")
@Test(priority = 30, groups = "smoke") @Test(priority = 30, groups = "smoke")
@Description("Make multiple root rule chains (only one rule chain can be root)") @Description("Make multiple root rule chains (only one rule chain can be root)")
public void multiplyRoot() { public void multiplyRoot() {
@ -87,6 +67,6 @@ public class MakeRuleChainRootTest extends AbstractDriverBaseTest {
ruleChainsPage.warningPopUpYesBtn().click(); ruleChainsPage.warningPopUpYesBtn().click();
ruleChainsPage.closeEntityViewBtn().click(); ruleChainsPage.closeEntityViewBtn().click();
Assert.assertEquals(ruleChainsPage.rootCheckBoxesEnable().size(), 1); assertThat(ruleChainsPage.rootCheckBoxesEnable()).as("Enable only 1 root checkbox").hasSize(1);
} }
} }

65
msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/ruleChainsSmoke/OpenRuleChainTest.java

@ -16,81 +16,52 @@
package org.thingsboard.server.msa.ui.tests.ruleChainsSmoke; package org.thingsboard.server.msa.ui.tests.ruleChainsSmoke;
import io.qameta.allure.Description; import io.qameta.allure.Description;
import io.qameta.allure.Epic;
import io.qameta.allure.Feature; import io.qameta.allure.Feature;
import org.testng.Assert;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test; import org.testng.annotations.Test;
import org.thingsboard.server.msa.ui.base.AbstractDriverBaseTest; import org.thingsboard.server.common.data.rule.RuleChain;
import org.thingsboard.server.msa.ui.pages.LoginPageHelper;
import org.thingsboard.server.msa.ui.pages.OpenRuleChainPageHelper;
import org.thingsboard.server.msa.ui.pages.RuleChainsPageHelper;
import org.thingsboard.server.msa.ui.pages.SideBarMenuViewElements;
import org.thingsboard.server.msa.ui.utils.EntityPrototypes; import org.thingsboard.server.msa.ui.utils.EntityPrototypes;
import static org.assertj.core.api.Assertions.assertThat;
import static org.thingsboard.server.msa.ui.base.AbstractBasePage.random; import static org.thingsboard.server.msa.ui.base.AbstractBasePage.random;
import static org.thingsboard.server.msa.ui.utils.Const.ENTITY_NAME; import static org.thingsboard.server.msa.ui.utils.Const.ENTITY_NAME;
public class OpenRuleChainTest extends AbstractDriverBaseTest { @Feature("Open rule chain")
public class OpenRuleChainTest extends AbstractRuleChainTest {
private SideBarMenuViewElements sideBarMenuView;
private RuleChainsPageHelper ruleChainsPage;
private OpenRuleChainPageHelper openRuleChainPage;
private String ruleChainName;
@BeforeClass
public void login() {
new LoginPageHelper(driver).authorizationTenant();
sideBarMenuView = new SideBarMenuViewElements(driver);
ruleChainsPage = new RuleChainsPageHelper(driver);
openRuleChainPage = new OpenRuleChainPageHelper(driver);
}
@AfterMethod
public void delete() {
if (ruleChainName != null) {
testRestClient.deleteRuleChain(getRuleChainByName(ruleChainName).getId());
ruleChainName = null;
}
}
@Epic("Rule chains smoke tests")
@Feature("Open rule chain")
@Test(priority = 10, groups = "smoke") @Test(priority = 10, groups = "smoke")
@Description("Open the rule chain by clicking on its name") @Description("Open the rule chain by clicking on its name")
public void openRuleChainByRightCornerBtn() { public void openRuleChainByRightCornerBtn() {
String ruleChainName = ENTITY_NAME + random(); ruleChainName = ENTITY_NAME + random();
testRestClient.postRuleChain(EntityPrototypes.defaultRuleChainPrototype(ruleChainName)); testRestClient.postRuleChain(EntityPrototypes.defaultRuleChainPrototype(ruleChainName));
this.ruleChainName = ruleChainName; RuleChain ruleChain = getRuleChainByName(ruleChainName);
sideBarMenuView.ruleChainsBtn().click(); sideBarMenuView.ruleChainsBtn().click();
ruleChainsPage.entity(ruleChainName).click(); ruleChainsPage.entity(ruleChainName).click();
openRuleChainPage.setHeadName(); openRuleChainPage.setHeadName();
Assert.assertTrue(urlContains(String.valueOf(getRuleChainByName(ruleChainName).getId()))); assertThat(ruleChain).as("Rule chain created").isNotNull();
Assert.assertTrue(openRuleChainPage.headRuleChainName().isDisplayed()); assertThat(urlContains(ruleChain.getUuidId().toString())).as("URL contains rule chain's ID").isTrue();
Assert.assertTrue(openRuleChainPage.inputNode().isDisplayed()); assertIsDisplayed(openRuleChainPage.headRuleChainName());
Assert.assertEquals(ruleChainName, openRuleChainPage.getHeadName()); assertIsDisplayed(openRuleChainPage.inputNode());
assertThat(openRuleChainPage.getHeadName()).as("Head of opened rule chain page text").isEqualTo(ruleChainName);
} }
@Epic("Rule chains smoke tests")
@Feature("Open rule chain")
@Test(priority = 10, groups = "smoke") @Test(priority = 10, groups = "smoke")
@Description("Open the rule chain by clicking on the 'Open rule chain' button in the entity view") @Description("Open the rule chain by clicking on the 'Open rule chain' button in the entity view")
public void openRuleChainByViewBtn() { public void openRuleChainByViewBtn() {
String ruleChainName = ENTITY_NAME + random(); ruleChainName = ENTITY_NAME + random();
testRestClient.postRuleChain(EntityPrototypes.defaultRuleChainPrototype(ruleChainName)); testRestClient.postRuleChain(EntityPrototypes.defaultRuleChainPrototype(ruleChainName));
this.ruleChainName = ruleChainName; RuleChain ruleChain = getRuleChainByName(ruleChainName);
sideBarMenuView.ruleChainsBtn().click(); sideBarMenuView.ruleChainsBtn().click();
ruleChainsPage.detailsBtn(ruleChainName).click(); ruleChainsPage.detailsBtn(ruleChainName).click();
ruleChainsPage.openRuleChainFromViewBtn().click(); ruleChainsPage.openRuleChainFromViewBtn().click();
openRuleChainPage.setHeadName(); openRuleChainPage.setHeadName();
Assert.assertTrue(urlContains(String.valueOf(getRuleChainByName(ruleChainName).getId()))); assertThat(ruleChain).as("Rule chain created").isNotNull();
Assert.assertTrue(openRuleChainPage.headRuleChainName().isDisplayed()); assertThat(urlContains(ruleChain.getUuidId().toString())).as("URL contains rule chain's ID").isTrue();
Assert.assertTrue(openRuleChainPage.inputNode().isDisplayed()); assertIsDisplayed(openRuleChainPage.headRuleChainName());
Assert.assertEquals(ruleChainName, openRuleChainPage.getHeadName()); assertIsDisplayed(openRuleChainPage.inputNode());
assertThat(openRuleChainPage.getHeadName()).as("Head of opened rule chain page text").isEqualTo(ruleChainName);
} }
} }

94
msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/ruleChainsSmoke/RuleChainEditMenuTest.java

@ -16,55 +16,27 @@
package org.thingsboard.server.msa.ui.tests.ruleChainsSmoke; package org.thingsboard.server.msa.ui.tests.ruleChainsSmoke;
import io.qameta.allure.Description; import io.qameta.allure.Description;
import io.qameta.allure.Epic;
import io.qameta.allure.Feature; import io.qameta.allure.Feature;
import org.testng.Assert;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test; import org.testng.annotations.Test;
import org.thingsboard.server.msa.ui.base.AbstractDriverBaseTest;
import org.thingsboard.server.msa.ui.pages.LoginPageHelper;
import org.thingsboard.server.msa.ui.pages.RuleChainsPageHelper;
import org.thingsboard.server.msa.ui.pages.SideBarMenuViewElements;
import org.thingsboard.server.msa.ui.utils.DataProviderCredential; import org.thingsboard.server.msa.ui.utils.DataProviderCredential;
import org.thingsboard.server.msa.ui.utils.EntityPrototypes; import org.thingsboard.server.msa.ui.utils.EntityPrototypes;
import static org.assertj.core.api.Assertions.assertThat;
import static org.thingsboard.server.msa.ui.base.AbstractBasePage.getRandomNumber; import static org.thingsboard.server.msa.ui.base.AbstractBasePage.getRandomNumber;
import static org.thingsboard.server.msa.ui.base.AbstractBasePage.random; import static org.thingsboard.server.msa.ui.base.AbstractBasePage.random;
import static org.thingsboard.server.msa.ui.utils.Const.EMPTY_RULE_CHAIN_MESSAGE; import static org.thingsboard.server.msa.ui.utils.Const.EMPTY_RULE_CHAIN_MESSAGE;
import static org.thingsboard.server.msa.ui.utils.Const.ENTITY_NAME; import static org.thingsboard.server.msa.ui.utils.Const.ENTITY_NAME;
import static org.thingsboard.server.msa.ui.utils.EntityPrototypes.defaultRuleChainPrototype; import static org.thingsboard.server.msa.ui.utils.EntityPrototypes.defaultRuleChainPrototype;
public class RuleChainEditMenuTest extends AbstractDriverBaseTest { @Feature("Edit rule chain")
public class RuleChainEditMenuTest extends AbstractRuleChainTest {
private SideBarMenuViewElements sideBarMenuView;
private RuleChainsPageHelper ruleChainsPage;
private String ruleChainName;
@BeforeClass
public void login() {
new LoginPageHelper(driver).authorizationTenant();
sideBarMenuView = new SideBarMenuViewElements(driver);
ruleChainsPage = new RuleChainsPageHelper(driver);
}
@AfterMethod
public void delete() {
if (ruleChainName != null) {
testRestClient.deleteRuleChain(getRuleChainByName(ruleChainName).getId());
ruleChainName = null;
}
}
@Epic("Rule chains smoke tests")
@Feature("Edit rule chain")
@Test(priority = 10, groups = "smoke") @Test(priority = 10, groups = "smoke")
@Description("Change name by edit menu") @Description("Change name by edit menu")
public void changeName() { public void changeName() {
String newRuleChainName = "Changed" + getRandomNumber(); String newRuleChainName = "Changed" + getRandomNumber();
String ruleChainName = ENTITY_NAME + random(); ruleChainName = ENTITY_NAME + random();
testRestClient.postRuleChain(defaultRuleChainPrototype(ruleChainName)); testRestClient.postRuleChain(defaultRuleChainPrototype(ruleChainName));
this.ruleChainName = ruleChainName;
sideBarMenuView.ruleChainsBtn().click(); sideBarMenuView.ruleChainsBtn().click();
ruleChainsPage.detailsBtn(ruleChainName).click(); ruleChainsPage.detailsBtn(ruleChainName).click();
@ -73,39 +45,33 @@ public class RuleChainEditMenuTest extends AbstractDriverBaseTest {
ruleChainsPage.editPencilBtn().click(); ruleChainsPage.editPencilBtn().click();
ruleChainsPage.changeNameEditMenu(newRuleChainName); ruleChainsPage.changeNameEditMenu(newRuleChainName);
ruleChainsPage.doneBtnEditView().click(); ruleChainsPage.doneBtnEditView().click();
this.ruleChainName = newRuleChainName; ruleChainName = newRuleChainName;
ruleChainsPage.setHeaderName(); ruleChainsPage.setHeaderName();
String nameAfter = ruleChainsPage.getHeaderName(); String nameAfter = ruleChainsPage.getHeaderName();
Assert.assertNotEquals(nameBefore, nameAfter); assertThat(nameAfter).as("The name has changed").isNotEqualTo(nameBefore);
Assert.assertEquals(newRuleChainName, nameAfter); assertThat(nameAfter).as("The name has changed correctly").isEqualTo(newRuleChainName);
} }
@Epic("Rule chains smoke tests")
@Feature("Edit rule chain")
@Test(priority = 20, groups = "smoke") @Test(priority = 20, groups = "smoke")
@Description("Delete name and save") @Description("Delete name and save")
public void deleteName() { public void deleteName() {
String ruleChainName = ENTITY_NAME + random(); ruleChainName = ENTITY_NAME + random();
testRestClient.postRuleChain(defaultRuleChainPrototype(ruleChainName)); testRestClient.postRuleChain(defaultRuleChainPrototype(ruleChainName));
this.ruleChainName = ruleChainName;
sideBarMenuView.ruleChainsBtn().click(); sideBarMenuView.ruleChainsBtn().click();
ruleChainsPage.detailsBtn(ruleChainName).click(); ruleChainsPage.detailsBtn(ruleChainName).click();
ruleChainsPage.editPencilBtn().click(); ruleChainsPage.editPencilBtn().click();
ruleChainsPage.changeNameEditMenu(""); ruleChainsPage.changeNameEditMenu("");
Assert.assertFalse(ruleChainsPage.doneBtnEditViewVisible().isEnabled()); assertIsDisable(ruleChainsPage.doneBtnEditViewVisible());
} }
@Epic("Rule chains smoke tests")
@Feature("Edit rule chain")
@Test(priority = 20, groups = "smoke") @Test(priority = 20, groups = "smoke")
@Description("Save only with space") @Description("Save only with space")
public void saveOnlyWithSpace() { public void saveOnlyWithSpace() {
String ruleChainName = ENTITY_NAME +random(); ruleChainName = ENTITY_NAME + random();
testRestClient.postRuleChain(defaultRuleChainPrototype(ruleChainName)); testRestClient.postRuleChain(defaultRuleChainPrototype(ruleChainName));
this.ruleChainName = ruleChainName;
sideBarMenuView.ruleChainsBtn().click(); sideBarMenuView.ruleChainsBtn().click();
ruleChainsPage.detailsBtn(ruleChainName).click(); ruleChainsPage.detailsBtn(ruleChainName).click();
@ -113,50 +79,44 @@ public class RuleChainEditMenuTest extends AbstractDriverBaseTest {
ruleChainsPage.changeNameEditMenu(" "); ruleChainsPage.changeNameEditMenu(" ");
ruleChainsPage.doneBtnEditView().click(); ruleChainsPage.doneBtnEditView().click();
Assert.assertNotNull(ruleChainsPage.warningMessage()); assertIsDisplayed(ruleChainsPage.warningMessage());
Assert.assertTrue(ruleChainsPage.warningMessage().isDisplayed()); assertThat(ruleChainsPage.warningMessage().getText()).as("Text of warning message").isEqualTo(EMPTY_RULE_CHAIN_MESSAGE);
Assert.assertEquals(ruleChainsPage.warningMessage().getText(), EMPTY_RULE_CHAIN_MESSAGE);
} }
@Epic("Rule chains smoke tests")
@Feature("Edit rule chain")
@Test(priority = 20, groups = "smoke", dataProviderClass = DataProviderCredential.class, dataProvider = "editMenuDescription") @Test(priority = 20, groups = "smoke", dataProviderClass = DataProviderCredential.class, dataProvider = "editMenuDescription")
@Description("Write the description and save the changes/Change the description and save the changes/Delete the description and save the changes") @Description("Write the description and save the changes/Change the description and save the changes/Delete the description and save the changes")
public void editDescription(String description, String newDescription, String finalDescription) { public void editDescription(String description, String newDescription, String finalDescription) {
String name = ENTITY_NAME + random(); ruleChainName = ENTITY_NAME + random();
testRestClient.postRuleChain(EntityPrototypes.defaultRuleChainPrototype(name, description)); testRestClient.postRuleChain(EntityPrototypes.defaultRuleChainPrototype(ruleChainName, description));
ruleChainName = name;
sideBarMenuView.ruleChainsBtn().click(); sideBarMenuView.ruleChainsBtn().click();
ruleChainsPage.detailsBtn(name).click(); ruleChainsPage.detailsBtn(ruleChainName).click();
ruleChainsPage.editPencilBtn().click(); ruleChainsPage.editPencilBtn().click();
ruleChainsPage.descriptionEntityView().sendKeys(newDescription); ruleChainsPage.descriptionEntityView().sendKeys(newDescription);
ruleChainsPage.doneBtnEditView().click(); ruleChainsPage.doneBtnEditView().click();
ruleChainsPage.setDescription(); ruleChainsPage.setDescription();
Assert.assertEquals(ruleChainsPage.getDescription(), finalDescription); assertThat(ruleChainsPage.getDescription()).as("The description changed correctly").isEqualTo(finalDescription);
} }
@Epic("Rule chains smoke tests") @Test(priority = 20, groups = "smoke", dataProviderClass = DataProviderCredential.class, dataProvider = "debugMode")
@Feature("Edit rule chain")
@Test(priority = 20, groups = "smoke")
@Description("Enable debug mode/Disable debug mode") @Description("Enable debug mode/Disable debug mode")
public void debugMode() { public void debugMode(boolean debugMode) {
String ruleChainName = ENTITY_NAME + random(); ruleChainName = ENTITY_NAME + random();
testRestClient.postRuleChain(defaultRuleChainPrototype(ruleChainName)); testRestClient.postRuleChain(defaultRuleChainPrototype(ruleChainName, debugMode));
this.ruleChainName = ruleChainName;
sideBarMenuView.ruleChainsBtn().click(); sideBarMenuView.ruleChainsBtn().click();
ruleChainsPage.detailsBtn(ruleChainName).click(); ruleChainsPage.detailsBtn(ruleChainName).click();
ruleChainsPage.editPencilBtn().click(); ruleChainsPage.editPencilBtn().click();
ruleChainsPage.debugCheckboxEdit().click(); ruleChainsPage.debugCheckboxEdit().click();
ruleChainsPage.doneBtnEditView().click(); ruleChainsPage.doneBtnEditView().click();
boolean debugMode = ruleChainsPage.debugCheckboxView().getAttribute("class").contains("selected");
ruleChainsPage.editPencilBtn().click();
ruleChainsPage.debugCheckboxEdit().click();
ruleChainsPage.doneBtnEditView().click();
Assert.assertFalse(ruleChainsPage.debugCheckboxView().getAttribute("class").contains("selected"), "Debug mode disable"); if (debugMode) {
Assert.assertTrue(debugMode, "Debug mode enable"); assertThat(ruleChainsPage.debugCheckboxView().getAttribute("class").contains("selected"))
.as("Debug mode is enable").isFalse();
} else {
assertThat(ruleChainsPage.debugCheckboxView().getAttribute("class").contains("selected"))
.as("Debug mode is enable").isTrue();
}
} }
} }

39
msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/ruleChainsSmoke/SearchRuleChainTest.java

@ -16,57 +16,36 @@
package org.thingsboard.server.msa.ui.tests.ruleChainsSmoke; package org.thingsboard.server.msa.ui.tests.ruleChainsSmoke;
import io.qameta.allure.Description; import io.qameta.allure.Description;
import io.qameta.allure.Epic;
import io.qameta.allure.Feature; import io.qameta.allure.Feature;
import org.testng.Assert;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test; import org.testng.annotations.Test;
import org.thingsboard.server.msa.ui.base.AbstractDriverBaseTest;
import org.thingsboard.server.msa.ui.pages.LoginPageHelper;
import org.thingsboard.server.msa.ui.pages.RuleChainsPageHelper;
import org.thingsboard.server.msa.ui.pages.SideBarMenuViewElements;
import org.thingsboard.server.msa.ui.utils.DataProviderCredential; import org.thingsboard.server.msa.ui.utils.DataProviderCredential;
import static org.assertj.core.api.Assertions.assertThat;
import static org.thingsboard.server.msa.ui.utils.EntityPrototypes.defaultRuleChainPrototype; import static org.thingsboard.server.msa.ui.utils.EntityPrototypes.defaultRuleChainPrototype;
public class SearchRuleChainTest extends AbstractDriverBaseTest { @Feature("Search rule chain")
public class SearchRuleChainTest extends AbstractRuleChainTest {
private SideBarMenuViewElements sideBarMenuView;
private RuleChainsPageHelper ruleChainsPage;
@BeforeClass
public void login() {
new LoginPageHelper(driver).authorizationTenant();
sideBarMenuView = new SideBarMenuViewElements(driver);
ruleChainsPage = new RuleChainsPageHelper(driver);
}
@Epic("Rule chains smoke tests")
@Feature("Search rule chain")
@Test(priority = 10, groups = "smoke", dataProviderClass = DataProviderCredential.class, dataProvider = "ruleChainNameForSearchByFirstAndSecondWord") @Test(priority = 10, groups = "smoke", dataProviderClass = DataProviderCredential.class, dataProvider = "ruleChainNameForSearchByFirstAndSecondWord")
@Description("Search rule chain by first word in the name/Search rule chain by second word in the name") @Description("Search rule chain by first word in the name/Search rule chain by second word in the name")
public void searchFirstWord(String namePath) { public void searchFirstWord(String namePath) {
sideBarMenuView.ruleChainsBtn().click(); sideBarMenuView.ruleChainsBtn().click();
ruleChainsPage.searchEntity(namePath); ruleChainsPage.searchEntity(namePath);
ruleChainsPage.setRuleChainName(0);
Assert.assertTrue(ruleChainsPage.getRuleChainName().contains(namePath)); ruleChainsPage.allNames().forEach(rc -> assertThat(rc.getText().contains(namePath))
.as("All entity contains search input").isTrue());
} }
@Epic("Rule chains smoke tests")
@Feature("Search rule chain")
@Test(priority = 10, groups = "smoke", dataProviderClass = DataProviderCredential.class, dataProvider = "nameForSearchBySymbolAndNumber") @Test(priority = 10, groups = "smoke", dataProviderClass = DataProviderCredential.class, dataProvider = "nameForSearchBySymbolAndNumber")
@Description("Search rule chain by symbol in the name/Search rule chain by number in the name") @Description("Search rule chain by symbol in the name/Search rule chain by number in the name")
public void searchNumber(String name, String namePath) { public void searchNumber(String name, String namePath) {
testRestClient.postRuleChain(defaultRuleChainPrototype(name)); ruleChainName = name;
testRestClient.postRuleChain(defaultRuleChainPrototype(ruleChainName));
sideBarMenuView.ruleChainsBtn().click(); sideBarMenuView.ruleChainsBtn().click();
ruleChainsPage.searchEntity(namePath); ruleChainsPage.searchEntity(namePath);
ruleChainsPage.setRuleChainName(0);
boolean ruleChainContainsNamePath = ruleChainsPage.getRuleChainName().contains(namePath);
testRestClient.deleteRuleChain(getRuleChainByName(name).getId());
Assert.assertTrue(ruleChainContainsNamePath); ruleChainsPage.allNames().forEach(rc -> assertThat(rc.getText().contains(namePath))
.as("All entity contains search input").isTrue());
} }
} }

77
msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/ruleChainsSmoke/SortByNameTest.java

@ -18,52 +18,27 @@ package org.thingsboard.server.msa.ui.tests.ruleChainsSmoke;
import io.qameta.allure.Description; import io.qameta.allure.Description;
import io.qameta.allure.Epic; import io.qameta.allure.Epic;
import io.qameta.allure.Feature; import io.qameta.allure.Feature;
import org.testng.Assert;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test; import org.testng.annotations.Test;
import org.thingsboard.server.msa.ui.base.AbstractDriverBaseTest; import org.thingsboard.server.common.data.id.RuleChainId;
import org.thingsboard.server.msa.ui.pages.LoginPageHelper;
import org.thingsboard.server.msa.ui.pages.RuleChainsPageHelper;
import org.thingsboard.server.msa.ui.pages.SideBarMenuViewElements;
import org.thingsboard.server.msa.ui.utils.DataProviderCredential; import org.thingsboard.server.msa.ui.utils.DataProviderCredential;
import static org.assertj.core.api.Assertions.assertThat;
import static org.thingsboard.server.msa.ui.utils.EntityPrototypes.defaultRuleChainPrototype; import static org.thingsboard.server.msa.ui.utils.EntityPrototypes.defaultRuleChainPrototype;
public class SortByNameTest extends AbstractDriverBaseTest { @Feature("Sort rule chain by name")
public class SortByNameTest extends AbstractRuleChainTest {
private SideBarMenuViewElements sideBarMenuView;
private RuleChainsPageHelper ruleChainsPage;
private String ruleChainName;
@BeforeClass
public void login() {
new LoginPageHelper(driver).authorizationTenant();
sideBarMenuView = new SideBarMenuViewElements(driver);
ruleChainsPage = new RuleChainsPageHelper(driver);
}
@AfterMethod
public void delete() {
if (ruleChainName != null) {
testRestClient.deleteRuleChain(getRuleChainByName(ruleChainName).getId());
ruleChainName = null;
}
}
@Epic("Rule chains smoke tests")
@Feature("Sort rule chain by name")
@Test(priority = 10, groups = "smoke", dataProviderClass = DataProviderCredential.class, dataProvider = "nameForSort") @Test(priority = 10, groups = "smoke", dataProviderClass = DataProviderCredential.class, dataProvider = "nameForSort")
@Description("Sort rule chain 'UP'") @Description("Sort rule chain 'UP'")
public void specialCharacterUp(String ruleChainName) { public void specialCharacterUp(String name) {
ruleChainName = name;
testRestClient.postRuleChain(defaultRuleChainPrototype(ruleChainName)); testRestClient.postRuleChain(defaultRuleChainPrototype(ruleChainName));
this.ruleChainName = ruleChainName;
sideBarMenuView.ruleChainsBtn().click(); sideBarMenuView.ruleChainsBtn().click();
ruleChainsPage.sortByNameBtn().click(); ruleChainsPage.sortByNameBtn().click();
ruleChainsPage.setRuleChainName(0); ruleChainsPage.setRuleChainName(0);
Assert.assertEquals(ruleChainsPage.getRuleChainName(), ruleChainName); assertThat(ruleChainsPage.getRuleChainName()).as("First rule chain after sort").isEqualTo(ruleChainName);
} }
@Epic("Rule chains smoke tests") @Epic("Rule chains smoke tests")
@ -71,9 +46,9 @@ public class SortByNameTest extends AbstractDriverBaseTest {
@Test(priority = 20, groups = "smoke", dataProviderClass = DataProviderCredential.class, dataProvider = "nameForAllSort") @Test(priority = 20, groups = "smoke", dataProviderClass = DataProviderCredential.class, dataProvider = "nameForAllSort")
@Description("Sort rule chain 'UP'") @Description("Sort rule chain 'UP'")
public void allSortUp(String ruleChain, String ruleChainSymbol, String ruleChainNumber) { public void allSortUp(String ruleChain, String ruleChainSymbol, String ruleChainNumber) {
testRestClient.postRuleChain(defaultRuleChainPrototype(ruleChainSymbol)); RuleChainId ruleChainSymbolId = testRestClient.postRuleChain(defaultRuleChainPrototype(ruleChainSymbol)).getId();
testRestClient.postRuleChain(defaultRuleChainPrototype(ruleChain)); RuleChainId ruleChainId = testRestClient.postRuleChain(defaultRuleChainPrototype(ruleChain)).getId();
testRestClient.postRuleChain(defaultRuleChainPrototype(ruleChainNumber)); RuleChainId ruleChainNumberId = testRestClient.postRuleChain(defaultRuleChainPrototype(ruleChainNumber)).getId();
sideBarMenuView.ruleChainsBtn().click(); sideBarMenuView.ruleChainsBtn().click();
ruleChainsPage.sortByNameBtn().click(); ruleChainsPage.sortByNameBtn().click();
@ -84,13 +59,13 @@ public class SortByNameTest extends AbstractDriverBaseTest {
ruleChainsPage.setRuleChainName(2); ruleChainsPage.setRuleChainName(2);
String thirdRuleChain = ruleChainsPage.getRuleChainName(); String thirdRuleChain = ruleChainsPage.getRuleChainName();
testRestClient.deleteRuleChain(getRuleChainByName(ruleChain).getId()); testRestClient.deleteRuleChain(ruleChainId);
testRestClient.deleteRuleChain(getRuleChainByName(ruleChainNumber).getId()); testRestClient.deleteRuleChain(ruleChainNumberId);
testRestClient.deleteRuleChain(getRuleChainByName(ruleChainSymbol).getId()); testRestClient.deleteRuleChain(ruleChainSymbolId);
Assert.assertEquals(firstRuleChain, ruleChainSymbol); assertThat(firstRuleChain).as("First rule chain with symbol in name").isEqualTo(ruleChainSymbol);
Assert.assertEquals(secondRuleChain, ruleChainNumber); assertThat(secondRuleChain).as("Second rule chain with number in name").isEqualTo(ruleChainNumber);
Assert.assertEquals(thirdRuleChain, ruleChain); assertThat(thirdRuleChain).as("Third rule chain with number in name").isEqualTo(ruleChain);
} }
@Epic("Rule chains smoke tests") @Epic("Rule chains smoke tests")
@ -105,7 +80,7 @@ public class SortByNameTest extends AbstractDriverBaseTest {
ruleChainsPage.sortByNameDown(); ruleChainsPage.sortByNameDown();
ruleChainsPage.setRuleChainName(ruleChainsPage.allNames().size() - 1); ruleChainsPage.setRuleChainName(ruleChainsPage.allNames().size() - 1);
Assert.assertEquals(ruleChainsPage.getRuleChainName(), ruleChainName); assertThat(ruleChainsPage.getRuleChainName()).as("Last rule chain after sort").isEqualTo(ruleChainName);
} }
@Epic("Rule chains smoke tests") @Epic("Rule chains smoke tests")
@ -113,9 +88,9 @@ public class SortByNameTest extends AbstractDriverBaseTest {
@Test(priority = 20, groups = "smoke", dataProviderClass = DataProviderCredential.class, dataProvider = "nameForAllSort") @Test(priority = 20, groups = "smoke", dataProviderClass = DataProviderCredential.class, dataProvider = "nameForAllSort")
@Description("Sort rule chain 'DOWN'") @Description("Sort rule chain 'DOWN'")
public void allSortDown(String ruleChain, String ruleChainSymbol, String ruleChainNumber) { public void allSortDown(String ruleChain, String ruleChainSymbol, String ruleChainNumber) {
testRestClient.postRuleChain(defaultRuleChainPrototype(ruleChainSymbol)); RuleChainId ruleChainSymbolId = testRestClient.postRuleChain(defaultRuleChainPrototype(ruleChainSymbol)).getId();
testRestClient.postRuleChain(defaultRuleChainPrototype(ruleChain)); RuleChainId ruleChainId = testRestClient.postRuleChain(defaultRuleChainPrototype(ruleChain)).getId();
testRestClient.postRuleChain(defaultRuleChainPrototype(ruleChainNumber)); RuleChainId ruleChainNumberId = testRestClient.postRuleChain(defaultRuleChainPrototype(ruleChainNumber)).getId();
sideBarMenuView.ruleChainsBtn().click(); sideBarMenuView.ruleChainsBtn().click();
int lastIndex = ruleChainsPage.allNames().size() - 1; int lastIndex = ruleChainsPage.allNames().size() - 1;
@ -127,12 +102,12 @@ public class SortByNameTest extends AbstractDriverBaseTest {
ruleChainsPage.setRuleChainName(lastIndex - 2); ruleChainsPage.setRuleChainName(lastIndex - 2);
String thirdRuleChain = ruleChainsPage.getRuleChainName(); String thirdRuleChain = ruleChainsPage.getRuleChainName();
testRestClient.deleteRuleChain(getRuleChainByName(ruleChain).getId()); testRestClient.deleteRuleChain(ruleChainId);
testRestClient.deleteRuleChain(getRuleChainByName(ruleChainNumber).getId()); testRestClient.deleteRuleChain(ruleChainNumberId);
testRestClient.deleteRuleChain(getRuleChainByName(ruleChainSymbol).getId()); testRestClient.deleteRuleChain(ruleChainSymbolId);
Assert.assertEquals(firstRuleChain, ruleChainSymbol); assertThat(firstRuleChain).as("First from the end rule chain with symbol in name").isEqualTo(ruleChainSymbol);
Assert.assertEquals(secondRuleChain, ruleChainNumber); assertThat(secondRuleChain).as("Second from the end rule chain with number in name").isEqualTo(ruleChainNumber);
Assert.assertEquals(thirdRuleChain, ruleChain); assertThat(thirdRuleChain).as("Third rule from the end chain with number in name").isEqualTo(ruleChain);
} }
} }

53
msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/ruleChainsSmoke/SortByTimeTest.java

@ -16,67 +16,36 @@
package org.thingsboard.server.msa.ui.tests.ruleChainsSmoke; package org.thingsboard.server.msa.ui.tests.ruleChainsSmoke;
import io.qameta.allure.Description; import io.qameta.allure.Description;
import io.qameta.allure.Epic;
import io.qameta.allure.Feature; import io.qameta.allure.Feature;
import org.testng.Assert;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test; import org.testng.annotations.Test;
import org.thingsboard.server.msa.ui.base.AbstractDriverBaseTest;
import org.thingsboard.server.msa.ui.pages.LoginPageHelper;
import org.thingsboard.server.msa.ui.pages.RuleChainsPageHelper;
import org.thingsboard.server.msa.ui.pages.SideBarMenuViewElements;
import static org.assertj.core.api.Assertions.assertThat;
import static org.thingsboard.server.msa.ui.utils.Const.ENTITY_NAME; import static org.thingsboard.server.msa.ui.utils.Const.ENTITY_NAME;
import static org.thingsboard.server.msa.ui.utils.EntityPrototypes.defaultRuleChainPrototype; import static org.thingsboard.server.msa.ui.utils.EntityPrototypes.defaultRuleChainPrototype;
public class SortByTimeTest extends AbstractDriverBaseTest { @Feature("Sort rule chain by time")
public class SortByTimeTest extends AbstractRuleChainTest {
private SideBarMenuViewElements sideBarMenuView;
private RuleChainsPageHelper ruleChainsPage;
private String ruleChainName;
@BeforeClass
public void login() {
new LoginPageHelper(driver).authorizationTenant();
sideBarMenuView = new SideBarMenuViewElements(driver);
ruleChainsPage = new RuleChainsPageHelper(driver);
}
@AfterMethod
public void delete() {
if (ruleChainName != null) {
testRestClient.deleteRuleChain(getRuleChainByName(ruleChainName).getId());
ruleChainName = null;
}
}
@Epic("Rule chains smoke tests")
@Feature("Sort rule chain by time")
@Test(priority = 10, groups = "smoke") @Test(priority = 10, groups = "smoke")
@Description("Sort rule chain 'DOWN'") @Description("Sort rule chain 'DOWN'")
public void sortByTimeDown() { public void sortByTimeDown() {
String ruleChain = ENTITY_NAME; ruleChainName = ENTITY_NAME;
testRestClient.postRuleChain(defaultRuleChainPrototype(ruleChain)); testRestClient.postRuleChain(defaultRuleChainPrototype(ruleChainName));
ruleChainName = ruleChain;
sideBarMenuView.ruleChainsBtn().click(); sideBarMenuView.ruleChainsBtn().click();
ruleChainsPage.setSort(); ruleChainsPage.setSort();
String firstListElement = ruleChainsPage.getSort().get(ruleChainsPage.getSort().size() - 1); String firstListElement = ruleChainsPage.getSort().get(ruleChainsPage.getSort().size() - 1);
String lastCreated = ruleChainsPage.createdTime().get(0).getText(); String lastCreated = ruleChainsPage.createdTime().get(0).getText();
Assert.assertEquals(firstListElement, lastCreated); assertThat(firstListElement).as("Last in list is last created").isEqualTo(lastCreated);
Assert.assertNotNull(ruleChainsPage.createdTimeEntity(ruleChain, lastCreated)); assertIsDisplayed(ruleChainsPage.createdTimeEntity(ruleChainName, lastCreated));
} }
@Epic("Rule chains smoke tests")
@Feature("Sort rule chain by time")
@Test(priority = 10, groups = "smoke") @Test(priority = 10, groups = "smoke")
@Description("Sort rule chain 'UP'") @Description("Sort rule chain 'UP'")
public void sortByTimeUp() { public void sortByTimeUp() {
String ruleChain = ENTITY_NAME; ruleChainName = ENTITY_NAME;
testRestClient.postRuleChain(defaultRuleChainPrototype(ruleChain)); testRestClient.postRuleChain(defaultRuleChainPrototype(ruleChainName));
ruleChainName = ruleChain;
sideBarMenuView.ruleChainsBtn().click(); sideBarMenuView.ruleChainsBtn().click();
ruleChainsPage.sortByTimeBtn().click(); ruleChainsPage.sortByTimeBtn().click();
@ -84,7 +53,7 @@ public class SortByTimeTest extends AbstractDriverBaseTest {
String firstListElement = ruleChainsPage.getSort().get(ruleChainsPage.getSort().size() - 1); String firstListElement = ruleChainsPage.getSort().get(ruleChainsPage.getSort().size() - 1);
String lastCreated = ruleChainsPage.createdTime().get(ruleChainsPage.createdTime().size() - 1).getText(); String lastCreated = ruleChainsPage.createdTime().get(ruleChainsPage.createdTime().size() - 1).getText();
Assert.assertEquals(firstListElement, lastCreated); assertThat(firstListElement).as("First in list is last created").isEqualTo(lastCreated);
Assert.assertNotNull(ruleChainsPage.createdTimeEntity(ruleChain, lastCreated)); assertIsDisplayed(ruleChainsPage.createdTimeEntity(ruleChainName, lastCreated));
} }
} }

7
msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/utils/DataProviderCredential.java

@ -149,4 +149,11 @@ public class DataProviderCredential {
{description, newDescription, description + newDescription}, {description, newDescription, description + newDescription},
{description, Keys.CONTROL + "A" + Keys.BACK_SPACE, ""}}; {description, Keys.CONTROL + "A" + Keys.BACK_SPACE, ""}};
} }
@DataProvider
public static Object[][] debugMode() {
return new Object[][]{
{false},
{true}};
}
} }

7
msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/utils/EntityPrototypes.java

@ -56,6 +56,13 @@ public class EntityPrototypes {
return ruleChain; return ruleChain;
} }
public static RuleChain defaultRuleChainPrototype(String entityName, boolean debugMode) {
RuleChain ruleChain = new RuleChain();
ruleChain.setName(entityName);
ruleChain.setDebugMode(debugMode);
return ruleChain;
}
public static DeviceProfile defaultDeviceProfile(String entityName) { public static DeviceProfile defaultDeviceProfile(String entityName) {
DeviceProfile deviceProfile = new DeviceProfile(); DeviceProfile deviceProfile = new DeviceProfile();
deviceProfile.setName(entityName); deviceProfile.setName(entityName);

Loading…
Cancel
Save