Merge pull request #8394 from Seraphym-Tuhai/ui-tests-refactoring

UI Tests refactored (Rule chains smoke tests)
This commit is contained in:
Andrew Shvayka 2023-04-24 15:40:03 +03:00 committed by GitHub
commit 83dc7a048f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
27 changed files with 351 additions and 584 deletions

View File

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

View File

@ -47,8 +47,11 @@ import java.io.ByteArrayInputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.time.Duration;
import java.util.List;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.fail;
import static org.thingsboard.server.msa.TestProperties.getBaseUiUrl;
import static org.thingsboard.server.msa.ui.utils.Const.TENANT_EMAIL;
@ -62,9 +65,11 @@ abstract public class AbstractDriverBaseTest extends AbstractContainerTest {
private static final int WIDTH = 1680;
private static final int HEIGHT = 1050;
private static final String REMOTE_WEBDRIVER_HOST = "http://localhost:4444";
protected static final PageLink pageLink = new PageLink(10);
private static final ContainerTestSuite instance = ContainerTestSuite.getInstance();
protected final PageLink pageLink = new PageLink(10);
private final ContainerTestSuite instance = ContainerTestSuite.getInstance();
private JavascriptExecutor js;
public static final long WAIT_TIMEOUT = TimeUnit.SECONDS.toMillis(10);
private final Duration duration = Duration.ofMillis(WAIT_TIMEOUT);
@BeforeClass
public void startUp() throws MalformedURLException {
@ -102,8 +107,7 @@ abstract public class AbstractDriverBaseTest extends AbstractContainerTest {
}
public String getJwtTokenFromLocalStorage() {
js = (JavascriptExecutor) driver;
return (String) js.executeScript("return window.localStorage.getItem('jwt_token');");
return (String) getJs().executeScript("return window.localStorage.getItem('jwt_token');");
}
public void openBaseUiUrl() {
@ -119,7 +123,7 @@ abstract public class AbstractDriverBaseTest extends AbstractContainerTest {
}
protected boolean urlContains(String urlPath) {
WebDriverWait wait = new WebDriverWait(driver, Duration.ofMillis(5000));
WebDriverWait wait = new WebDriverWait(driver, duration);
try {
wait.until(ExpectedConditions.urlContains(urlPath));
} catch (WebDriverException e) {
@ -129,21 +133,22 @@ abstract public class AbstractDriverBaseTest extends AbstractContainerTest {
}
public void jsClick(WebElement element) {
js = (JavascriptExecutor) driver;
js.executeScript("arguments[0].click();", element);
getJs().executeScript("arguments[0].click();", element);
}
public static RuleChain getRuleChainByName(String name) {
try {
return testRestClient.getRuleChains(pageLink).getData().stream()
.filter(s -> s.getName().equals(name)).collect(Collectors.toList()).get(0);
} catch (Exception e) {
log.error("No such rule chain with name: " + name);
return null;
}
public RuleChain getRuleChainByName(String name) {
return testRestClient.getRuleChains(pageLink).getData().stream()
.filter(s -> s.getName().equals(name))
.findFirst().orElse(null);
}
public static Customer getCustomerByName(String name) {
public List<RuleChain> getRuleChainsByName(String name) {
return testRestClient.getRuleChains(pageLink).getData().stream()
.filter(s -> s.getName().equals(name))
.collect(Collectors.toList());
}
public Customer getCustomerByName(String name) {
try {
return testRestClient.getCustomers(pageLink).getData().stream()
.filter(x -> x.getName().equals(name)).collect(Collectors.toList()).get(0);
@ -153,7 +158,7 @@ abstract public class AbstractDriverBaseTest extends AbstractContainerTest {
}
}
public static DeviceProfile getDeviceProfileByName(String name) {
public DeviceProfile getDeviceProfileByName(String name) {
try {
return testRestClient.getDeviceProfiles(pageLink).getData().stream()
.filter(x -> x.getName().equals(name)).collect(Collectors.toList()).get(0);
@ -163,7 +168,7 @@ abstract public class AbstractDriverBaseTest extends AbstractContainerTest {
}
}
public static AssetProfile getAssetProfileByName(String name) {
public AssetProfile getAssetProfileByName(String name) {
try {
return testRestClient.getAssetProfiles(pageLink).getData().stream()
.filter(x -> x.getName().equals(name)).collect(Collectors.toList()).get(0);
@ -179,4 +184,30 @@ abstract public class AbstractDriverBaseTest extends AbstractContainerTest {
new ByteArrayInputStream(((TakesScreenshot) driver).getScreenshotAs(OutputType.BYTES)));
}
}
public JavascriptExecutor getJs() {
return js = (JavascriptExecutor) driver;
}
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()));
}
}
public void setRootRuleChain(String ruleChainName) {
List<RuleChain> ruleChains = getRuleChainsByName(ruleChainName);
if (!ruleChains.isEmpty()) {
testRestClient.setRootRuleChain(ruleChains.stream().findFirst().get().getId());
}
}
}

View File

@ -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 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 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 CHECKBOX = "//mat-row//span[contains(text(),'%s')]/../..//mat-checkbox";
private static final String CHECKBOXES = "//tbody//mat-checkbox";

View File

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

View File

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

View File

@ -98,7 +98,7 @@ public class CreateAssetProfileImportTest extends AbstractDriverBaseTest {
Assert.assertNotNull(profilesPage.importingFile(EMPTY_IMPORT_MESSAGE));
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")

View File

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

View File

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

View File

@ -98,7 +98,7 @@ public class CreateDeviceProfileImportTest extends AbstractDriverBaseTest {
Assert.assertNotNull(profilesPage.importingFile(EMPTY_IMPORT_MESSAGE));
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")

View File

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

View File

@ -1,96 +0,0 @@
/**
* Copyright © 2016-2023 The Thingsboard Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.thingsboard.server.msa.ui.tests.ruleChainsSmoke;
import io.qameta.allure.Description;
import io.qameta.allure.Epic;
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.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 org.thingsboard.server.msa.ui.utils.EntityPrototypes;
import static org.thingsboard.server.msa.ui.base.AbstractBasePage.random;
import static org.thingsboard.server.msa.ui.utils.Const.ENTITY_NAME;
public class OpenRuleChainTest extends AbstractDriverBaseTest {
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")
@Description("Open the rule chain by clicking on its name")
public void openRuleChainByRightCornerBtn() {
String ruleChainName = ENTITY_NAME + random();
testRestClient.postRuleChain(EntityPrototypes.defaultRuleChainPrototype(ruleChainName));
this.ruleChainName = ruleChainName;
sideBarMenuView.ruleChainsBtn().click();
ruleChainsPage.entity(ruleChainName).click();
openRuleChainPage.setHeadName();
Assert.assertTrue(urlContains(String.valueOf(getRuleChainByName(ruleChainName).getId())));
Assert.assertTrue(openRuleChainPage.headRuleChainName().isDisplayed());
Assert.assertTrue(openRuleChainPage.inputNode().isDisplayed());
Assert.assertEquals(ruleChainName, openRuleChainPage.getHeadName());
}
@Epic("Rule chains smoke tests")
@Feature("Open rule chain")
@Test(priority = 10, groups = "smoke")
@Description("Open the rule chain by clicking on the 'Open rule chain' button in the entity view")
public void openRuleChainByViewBtn() {
String ruleChainName = ENTITY_NAME + random();
testRestClient.postRuleChain(EntityPrototypes.defaultRuleChainPrototype(ruleChainName));
this.ruleChainName = ruleChainName;
sideBarMenuView.ruleChainsBtn().click();
ruleChainsPage.detailsBtn(ruleChainName).click();
ruleChainsPage.openRuleChainFromViewBtn().click();
openRuleChainPage.setHeadName();
Assert.assertTrue(urlContains(String.valueOf(getRuleChainByName(ruleChainName).getId())));
Assert.assertTrue(openRuleChainPage.headRuleChainName().isDisplayed());
Assert.assertTrue(openRuleChainPage.inputNode().isDisplayed());
Assert.assertEquals(ruleChainName, openRuleChainPage.getHeadName());
}
}

View File

@ -0,0 +1,49 @@
/**
* Copyright © 2016-2023 The Thingsboard Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.thingsboard.server.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;
}
}

View File

@ -13,56 +13,26 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
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.Epic;
import io.qameta.allure.Feature;
import org.openqa.selenium.WebElement;
import org.testng.Assert;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeClass;
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.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_TXT_FILE_NAME;
import static org.thingsboard.server.msa.ui.utils.EntityPrototypes.defaultRuleChainPrototype;
public class CreateRuleChainImportTest extends AbstractDriverBaseTest {
private SideBarMenuViewElements sideBarMenuView;
private RuleChainsPageHelper ruleChainsPage;
private OpenRuleChainPageHelper openRuleChainPage;
@Feature("Import rule chain")
public class CreateRuleChainImportTest extends AbstractRuleChainTest {
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 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")
@Description("Drop json file")
public void importRuleChain() {
@ -70,12 +40,9 @@ public class CreateRuleChainImportTest extends AbstractDriverBaseTest {
ruleChainsPage.openImportRuleChainView();
ruleChainsPage.browseFile().sendKeys(absolutePathToFileImportRuleChain);
Assert.assertNotNull(ruleChainsPage.importingFile(IMPORT_RULE_CHAIN_FILE_NAME));
Assert.assertTrue(ruleChainsPage.importingFile(IMPORT_RULE_CHAIN_FILE_NAME).isDisplayed());
assertIsDisplayed(ruleChainsPage.importingFile(IMPORT_RULE_CHAIN_FILE_NAME));
}
@Epic("Rule chains smoke tests")
@Feature("Import rule chain")
@Test(priority = 20, groups = "smoke")
@Description("Drop json file and delete it")
public void importRuleChainAndDeleteFile() {
@ -84,13 +51,10 @@ public class CreateRuleChainImportTest extends AbstractDriverBaseTest {
ruleChainsPage.browseFile().sendKeys(absolutePathToFileImportRuleChain);
ruleChainsPage.clearImportFileBtn().click();
Assert.assertNotNull(ruleChainsPage.importingFile(EMPTY_IMPORT_MESSAGE));
Assert.assertTrue(ruleChainsPage.importingFile(EMPTY_IMPORT_MESSAGE).isDisplayed());
Assert.assertTrue(ruleChainsPage.entityIsNotPresent(IMPORT_RULE_CHAIN_FILE_NAME));
assertIsDisplayed(ruleChainsPage.importingFile(EMPTY_IMPORT_MESSAGE));
ruleChainsPage.assertEntityIsNotPresent(IMPORT_RULE_CHAIN_FILE_NAME);
}
@Epic("Rule chains smoke tests")
@Feature("Import rule chain")
@Test(priority = 20, groups = "smoke")
@Description("Import txt file")
public void importTxtFile() {
@ -98,12 +62,9 @@ public class CreateRuleChainImportTest extends AbstractDriverBaseTest {
ruleChainsPage.openImportRuleChainView();
ruleChainsPage.browseFile().sendKeys(absolutePathToFileImportTxt);
Assert.assertNotNull(ruleChainsPage.importingFile(EMPTY_IMPORT_MESSAGE));
Assert.assertTrue(ruleChainsPage.importingFile(EMPTY_IMPORT_MESSAGE).isDisplayed());
assertIsDisplayed(ruleChainsPage.importingFile(EMPTY_IMPORT_MESSAGE));
}
@Epic("Rule chains smoke tests")
@Feature("Import rule chain")
@Test(priority = 30, groups = "smoke")
@Description("Import rule chain")
public void importRuleChainAndSave() {
@ -116,18 +77,14 @@ public class CreateRuleChainImportTest extends AbstractDriverBaseTest {
ruleChainName = IMPORT_RULE_CHAIN_NAME;
sideBarMenuView.ruleChainsBtn().click();
Assert.assertNotNull(ruleChainsPage.entity(IMPORT_RULE_CHAIN_NAME));
Assert.assertTrue(ruleChainsPage.entity(IMPORT_RULE_CHAIN_NAME).isDisplayed());
assertIsDisplayed(ruleChainsPage.entity(ruleChainName));
}
@Epic("Rule chains smoke tests")
@Feature("Import rule chain")
@Test(priority = 40, groups = "smoke")
@Description("Import rule chain with same name")
public void importRuleChainAndSaveWithSameName() {
String ruleChainName = IMPORT_RULE_CHAIN_NAME;
ruleChainName = IMPORT_RULE_CHAIN_NAME;
testRestClient.postRuleChain(defaultRuleChainPrototype(ruleChainName));
this.ruleChainName = ruleChainName;
sideBarMenuView.ruleChainsBtn().click();
ruleChainsPage.openImportRuleChainView();
@ -137,15 +94,8 @@ public class CreateRuleChainImportTest extends AbstractDriverBaseTest {
doneBtn.click();
sideBarMenuView.ruleChainsBtn().click();
boolean entityNotNull = ruleChainsPage.entity(ruleChainName) != null;
boolean entitiesSizeMoreOne = ruleChainsPage.entities(ruleChainName).size() > 1;
ArrayList<Boolean> entityIsDisplayed = new ArrayList<>();
ruleChainsPage.entities(ruleChainName).forEach(x -> entityIsDisplayed.add(x.isDisplayed()));
testRestClient.deleteRuleChain(getRuleChainByName(ruleChainName).getId());
Assert.assertTrue(entityNotNull);
Assert.assertTrue(entitiesSizeMoreOne);
entityIsDisplayed.forEach(Assert::assertTrue);
assertThat(ruleChainsPage.entities(ruleChainName).size() > 1).
as("More than 1 rule chains have been created").isTrue();
ruleChainsPage.entities(ruleChainName).forEach(this::assertIsDisplayed);
}
}

View File

@ -13,54 +13,25 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
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.Epic;
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.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 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.utils.Const.EMPTY_RULE_CHAIN_MESSAGE;
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")
@Description("Add rule chain after specifying the name (text/numbers /special characters)")
public void createRuleChain() {
String ruleChainName = ENTITY_NAME + random();
ruleChainName = ENTITY_NAME + random();
sideBarMenuView.ruleChainsBtn().click();
ruleChainsPage.openCreateRuleChainView();
@ -68,18 +39,14 @@ public class CreateRuleChainTest extends AbstractDriverBaseTest {
ruleChainsPage.nameField().sendKeys(ruleChainName);
ruleChainsPage.addBtnC().click();
ruleChainsPage.refreshBtn().click();
this.ruleChainName = ruleChainName;
Assert.assertNotNull(ruleChainsPage.entity(ruleChainName));
Assert.assertTrue(ruleChainsPage.entity(ruleChainName).isDisplayed());
assertIsDisplayed(ruleChainsPage.entity(ruleChainName));
}
@Epic("Rule chains smoke tests")
@Feature("Create rule chain")
@Test(priority = 10, groups = "smoke")
@Description("Add rule chain after specifying the name and description (text/numbers /special characters)")
public void createRuleChainWithDescription() {
String ruleChainName = ENTITY_NAME + random();
ruleChainName = ENTITY_NAME + random();
sideBarMenuView.ruleChainsBtn().click();
ruleChainsPage.openCreateRuleChainView();
@ -87,27 +54,23 @@ public class CreateRuleChainTest extends AbstractDriverBaseTest {
ruleChainsPage.descriptionAddEntityView().sendKeys(ruleChainName);
ruleChainsPage.addBtnC().click();
ruleChainsPage.refreshBtn().click();
this.ruleChainName = ruleChainName;
ruleChainsPage.detailsBtn(ruleChainName).click();
ruleChainsPage.setHeaderName();
Assert.assertEquals(ruleChainsPage.getHeaderName(), ruleChainName);
Assert.assertEquals(ruleChainsPage.descriptionEntityView().getAttribute("value"), ruleChainName);
assertThat(ruleChainsPage.getHeaderName()).as("Header of rule chain details tab").isEqualTo(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")
@Description("Add rule chain without the name")
public void createRuleChainWithoutName() {
sideBarMenuView.ruleChainsBtn().click();
ruleChainsPage.openCreateRuleChainView();
Assert.assertFalse(ruleChainsPage.addBtnV().isEnabled());
assertIsDisable(ruleChainsPage.addBtnV());
}
@Epic("Rule chains smoke tests")
@Feature("Create rule chain")
@Test(priority = 20, groups = "smoke")
@Description("Create rule chain only with spase in name")
public void createRuleChainWithOnlySpace() {
@ -116,21 +79,16 @@ public class CreateRuleChainTest extends AbstractDriverBaseTest {
ruleChainsPage.nameField().sendKeys(" ");
ruleChainsPage.addBtnC().click();
Assert.assertNotNull(ruleChainsPage.warningMessage());
Assert.assertTrue(ruleChainsPage.warningMessage().isDisplayed());
Assert.assertEquals(ruleChainsPage.warningMessage().getText(), EMPTY_RULE_CHAIN_MESSAGE);
Assert.assertNotNull(ruleChainsPage.addEntityView());
Assert.assertTrue(ruleChainsPage.addEntityView().isDisplayed());
assertIsDisplayed(ruleChainsPage.warningMessage());
assertThat(ruleChainsPage.warningMessage().getText()).as("Text of warning message").isEqualTo(EMPTY_RULE_CHAIN_MESSAGE);
assertIsDisplayed(ruleChainsPage.addEntityView());
}
@Epic("Rule chains smoke tests")
@Feature("Create rule chain")
@Test(priority = 20, groups = "smoke")
@Description("Create a rule chain with the same name")
public void createRuleChainWithSameName() {
String ruleChainName = ENTITY_NAME + random();
ruleChainName = ENTITY_NAME + random();
testRestClient.postRuleChain(EntityPrototypes.defaultRuleChainPrototype(ruleChainName));
this.ruleChainName = ruleChainName;
sideBarMenuView.ruleChainsBtn().click();
ruleChainsPage.openCreateRuleChainView();
@ -138,37 +96,24 @@ public class CreateRuleChainTest extends AbstractDriverBaseTest {
ruleChainsPage.addBtnC().click();
ruleChainsPage.refreshBtn().click();
boolean entityNotNull = ruleChainsPage.entity(ruleChainName) != null;
boolean entitiesSizeMoreOne = ruleChainsPage.entities(ruleChainName).size() > 1;
ArrayList<Boolean> entityIsDisplayed = new ArrayList<>();
ruleChainsPage.entities(ruleChainName).forEach(x -> entityIsDisplayed.add(x.isDisplayed()));
testRestClient.deleteRuleChain(getRuleChainByName(ruleChainName).getId());
Assert.assertTrue(entityNotNull);
Assert.assertTrue(entitiesSizeMoreOne);
entityIsDisplayed.forEach(Assert::assertTrue);
assertThat(ruleChainsPage.entities(ruleChainName).size() > 1).
as("More than 1 rule chains have been created").isTrue();
ruleChainsPage.entities(ruleChainName).forEach(this::assertIsDisplayed);
}
@Epic("Rule chains smoke tests")
@Feature("Create rule chain")
@Test(priority = 30, groups = "smoke")
@Description("Add rule chain after specifying the name (text/numbers /special characters) without refresh")
public void createRuleChainWithoutRefresh() {
String ruleChainName = ENTITY_NAME + random();
ruleChainName = ENTITY_NAME + random();
sideBarMenuView.ruleChainsBtn().click();
ruleChainsPage.openCreateRuleChainView();
ruleChainsPage.nameField().sendKeys(ruleChainName);
ruleChainsPage.addBtnC().click();
this.ruleChainName = ruleChainName;
Assert.assertNotNull(ruleChainsPage.entity(ruleChainName));
Assert.assertTrue(ruleChainsPage.entity(ruleChainName).isDisplayed());
assertIsDisplayed(ruleChainsPage.entity(ruleChainName));
}
@Epic("Rule chains smoke tests")
@Feature("Create rule chain")
@Test(priority = 40, groups = "smoke")
@Description("Go to rule chain documentation page")
public void documentation() {
@ -179,6 +124,6 @@ public class CreateRuleChainTest extends AbstractDriverBaseTest {
ruleChainsPage.detailsBtn(ruleChainsPage.getRuleChainName()).click();
ruleChainsPage.goToHelpPage();
Assert.assertTrue(urlContains(urlPath), "URL contains " + urlPath);
assertThat(urlContains(urlPath)).as("Redirected URL contains " + urlPath).isTrue();
}
}

View File

@ -13,72 +13,53 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
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.Epic;
import io.qameta.allure.Feature;
import org.testng.Assert;
import org.testng.annotations.BeforeClass;
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.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.ROOT_RULE_CHAIN_NAME;
import static org.thingsboard.server.msa.ui.utils.EntityPrototypes.defaultRuleChainPrototype;
public class DeleteRuleChainTest extends AbstractDriverBaseTest {
private SideBarMenuViewElements sideBarMenuView;
private RuleChainsPageHelper ruleChainsPage;
@Feature("Delete rule chain")
public class DeleteRuleChainTest extends AbstractRuleChainTest {
@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")
@Description("Remove the rule chain by clicking on the trash icon in the right side of rule chain")
public void removeRuleChainByRightSideBtn() {
String ruleChainName = ENTITY_NAME + random();
ruleChainName = ENTITY_NAME + random();
testRestClient.postRuleChain(defaultRuleChainPrototype(ruleChainName));
sideBarMenuView.ruleChainsBtn().click();
String deletedRuleChain = ruleChainsPage.deleteRuleChainTrash(ruleChainName);
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")
@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() {
String ruleChainName = ENTITY_NAME + random();
ruleChainName = ENTITY_NAME + random();
testRestClient.postRuleChain(defaultRuleChainPrototype(ruleChainName));
sideBarMenuView.ruleChainsBtn().click();
String deletedRuleChain = ruleChainsPage.deleteSelected(ruleChainName);
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")
@Description("Remove the rule chain by clicking on the 'Delete rule chain' btn in the entity view")
public void removeFromRuleChainView() {
String ruleChainName = ENTITY_NAME + random();
ruleChainName = ENTITY_NAME + random();
testRestClient.postRuleChain(defaultRuleChainPrototype(ruleChainName));
sideBarMenuView.ruleChainsBtn().click();
@ -86,21 +67,17 @@ public class DeleteRuleChainTest extends AbstractDriverBaseTest {
String deletedRuleChain = ruleChainsPage.deleteRuleChainFromView(ruleChainName);
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")
@Description("Remove the root rule chain by clicking on the trash icon in the right side of rule chain")
public void removeRootRuleChain() {
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")
@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() {
@ -117,7 +94,8 @@ public class DeleteRuleChainTest extends AbstractDriverBaseTest {
sideBarMenuView.ruleChainsBtn().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")
@ -132,15 +110,12 @@ public class DeleteRuleChainTest extends AbstractDriverBaseTest {
ruleChainsPage.warningPopUpYesBtn().click();
ruleChainsPage.refreshBtn().click();
Assert.assertNotNull(ruleChainsPage.entity(deletedRuleChain));
Assert.assertTrue(ruleChainsPage.entity(deletedRuleChain).isDisplayed());
Assert.assertNotNull(ruleChainsPage.warningMessage());
Assert.assertTrue(ruleChainsPage.warningMessage().isDisplayed());
Assert.assertEquals(ruleChainsPage.warningMessage().getText(), DELETE_RULE_CHAIN_WITH_PROFILE_MESSAGE);
assertIsDisplayed(ruleChainsPage.entity(deletedRuleChain));
assertIsDisplayed(ruleChainsPage.warningMessage());
assertThat(ruleChainsPage.warningMessage().getText())
.as("Text of warning message").isEqualTo(DELETE_RULE_CHAIN_WITH_PROFILE_MESSAGE);
}
@Epic("Rule chains smoke tests")
@Feature("Delete rule chain")
@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")
public void removeSelectedProfileRuleChain() {
@ -148,11 +123,10 @@ public class DeleteRuleChainTest extends AbstractDriverBaseTest {
String deletedRuleChain = ruleChainsPage.deleteSelected("Thermostat");
ruleChainsPage.refreshBtn().click();
Assert.assertNotNull(ruleChainsPage.entity(deletedRuleChain));
Assert.assertTrue(ruleChainsPage.entity(deletedRuleChain).isDisplayed());
Assert.assertNotNull(ruleChainsPage.warningMessage());
Assert.assertTrue(ruleChainsPage.warningMessage().isDisplayed());
Assert.assertEquals(ruleChainsPage.warningMessage().getText(), DELETE_RULE_CHAIN_WITH_PROFILE_MESSAGE);
assertIsDisplayed(ruleChainsPage.entity(deletedRuleChain));
assertIsDisplayed(ruleChainsPage.warningMessage());
assertThat(ruleChainsPage.warningMessage().getText())
.as("Text of warning message").isEqualTo(DELETE_RULE_CHAIN_WITH_PROFILE_MESSAGE);
}
@Epic("Rule chains smoke tests")
@ -167,10 +141,10 @@ public class DeleteRuleChainTest extends AbstractDriverBaseTest {
jsClick(ruleChainsPage.deleteBtnFromView());
ruleChainsPage.warningPopUpYesBtn().click();
Assert.assertNotNull(ruleChainsPage.entity(deletedRuleChain));
Assert.assertNotNull(ruleChainsPage.warningMessage());
Assert.assertTrue(ruleChainsPage.warningMessage().isDisplayed());
Assert.assertEquals(ruleChainsPage.warningMessage().getText(), DELETE_RULE_CHAIN_WITH_PROFILE_MESSAGE);
assertIsDisplayed(ruleChainsPage.entity(deletedRuleChain));
assertIsDisplayed(ruleChainsPage.warningMessage());
assertThat(ruleChainsPage.warningMessage().getText())
.as("Text of warning message").isEqualTo(DELETE_RULE_CHAIN_WITH_PROFILE_MESSAGE);
}
@Epic("Rule chains smoke tests")
@ -178,12 +152,12 @@ public class DeleteRuleChainTest extends AbstractDriverBaseTest {
@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")
public void removeRuleChainByRightSideBtnWithoutRefresh() {
String ruleChainName = ENTITY_NAME + random();
ruleChainName = ENTITY_NAME + random();
testRestClient.postRuleChain(defaultRuleChainPrototype(ruleChainName));
sideBarMenuView.ruleChainsBtn().click();
String deletedRuleChain = ruleChainsPage.deleteRuleChainTrash(ruleChainName);
Assert.assertTrue(ruleChainsPage.entityIsNotPresent(deletedRuleChain));
ruleChainsPage.assertEntityIsNotPresent(deletedRuleChain);
}
}

View File

@ -13,43 +13,25 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
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.Epic;
import io.qameta.allure.Feature;
import org.testng.Assert;
import org.testng.annotations.BeforeClass;
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.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.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")
@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")
public void canDeleteSeveralRuleChainsByTopBtn() {
String ruleChainName = ENTITY_NAME + random();
ruleChainName = ENTITY_NAME + random();
testRestClient.postRuleChain(defaultRuleChainPrototype(ruleChainName + 1));
testRestClient.postRuleChain(defaultRuleChainPrototype(ruleChainName));
@ -57,16 +39,14 @@ public class DeleteSeveralRuleChainsTest extends AbstractDriverBaseTest {
ruleChainsPage.deleteSelected(2);
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")
@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")
public void selectAllRuleChain() {
String ruleChainName = ENTITY_NAME + random();
ruleChainName = ENTITY_NAME + random();
testRestClient.postRuleChain(defaultRuleChainPrototype(ruleChainName + 1));
testRestClient.postRuleChain(defaultRuleChainPrototype(ruleChainName));
@ -76,11 +56,9 @@ public class DeleteSeveralRuleChainsTest extends AbstractDriverBaseTest {
ruleChainsPage.warningPopUpYesBtn().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")
@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")
@ -88,11 +66,9 @@ public class DeleteSeveralRuleChainsTest extends AbstractDriverBaseTest {
sideBarMenuView.ruleChainsBtn().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")
@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")
@ -103,8 +79,6 @@ public class DeleteSeveralRuleChainsTest extends AbstractDriverBaseTest {
ruleChainsPage.assertCheckBoxIsNotDisplayed(ROOT_RULE_CHAIN_NAME);
}
@Epic("Rule chains smoke tests")
@Feature("Delete several rule chains")
@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 " +
"that appears at the top without refresh")
@ -116,6 +90,6 @@ public class DeleteSeveralRuleChainsTest extends AbstractDriverBaseTest {
sideBarMenuView.ruleChainsBtn().click();
ruleChainsPage.deleteSelected(2);
Assert.assertTrue(ruleChainsPage.ruleChainsIsNotPresent(ruleChainName));
ruleChainsPage.assertRuleChainsIsNotPresent(ruleChainName);
}
}

View File

@ -13,39 +13,23 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
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.Epic;
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.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;
private RuleChainsPageHelper ruleChainsPage;
@BeforeClass
public void login() {
new LoginPageHelper(driver).authorizationTenant();
sideBarMenuView = new SideBarMenuViewElements(driver);
ruleChainsPage = new RuleChainsPageHelper(driver);
}
@Feature("Make rule chain root")
public class MakeRuleChainRootTest extends AbstractRuleChainTest {
@AfterMethod
public void makeRoot() {
testRestClient.setRootRuleChain(getRuleChainByName("Root Rule Chain").getId());
setRootRuleChain("Root Rule Chain");
}
@Epic("Rule chains smoke tests")
@Feature("Make rule chain root")
@Test(priority = 10, groups = "smoke")
@Description("Make rule chain root by clicking on the 'Make rule chain root' icon in the right corner")
public void makeRuleChainRootByRightCornerBtn() {
@ -55,11 +39,9 @@ public class MakeRuleChainRootTest extends AbstractDriverBaseTest {
ruleChainsPage.makeRootBtn(ruleChain).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")
@Description("Make rule chain root by clicking on the 'Make rule chain root' button in the entity view")
public void makeRuleChainRootFromView() {
@ -71,11 +53,9 @@ public class MakeRuleChainRootTest extends AbstractDriverBaseTest {
ruleChainsPage.warningPopUpYesBtn().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")
@Description("Make multiple root rule chains (only one rule chain can be root)")
public void multiplyRoot() {
@ -87,6 +67,6 @@ public class MakeRuleChainRootTest extends AbstractDriverBaseTest {
ruleChainsPage.warningPopUpYesBtn().click();
ruleChainsPage.closeEntityViewBtn().click();
Assert.assertEquals(ruleChainsPage.rootCheckBoxesEnable().size(), 1);
assertThat(ruleChainsPage.rootCheckBoxesEnable()).as("Enable only 1 root checkbox").hasSize(1);
}
}

View File

@ -0,0 +1,66 @@
/**
* Copyright © 2016-2023 The Thingsboard Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.thingsboard.server.msa.ui.tests.rulechainssmoke;
import io.qameta.allure.Description;
import io.qameta.allure.Feature;
import org.testng.annotations.Test;
import org.thingsboard.server.common.data.rule.RuleChain;
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.utils.Const.ENTITY_NAME;
@Feature("Open rule chain")
public class OpenRuleChainTest extends AbstractRuleChainTest {
@Test(priority = 10, groups = "smoke")
@Description("Open the rule chain by clicking on its name")
public void openRuleChainByRightCornerBtn() {
ruleChainName = ENTITY_NAME + random();
testRestClient.postRuleChain(EntityPrototypes.defaultRuleChainPrototype(ruleChainName));
RuleChain ruleChain = getRuleChainByName(ruleChainName);
sideBarMenuView.ruleChainsBtn().click();
ruleChainsPage.entity(ruleChainName).click();
openRuleChainPage.setHeadName();
assertThat(urlContains(ruleChain.getUuidId().toString())).as("URL contains rule chain's ID").isTrue();
assertIsDisplayed(openRuleChainPage.headRuleChainName());
assertIsDisplayed(openRuleChainPage.inputNode());
assertThat(openRuleChainPage.getHeadName()).as("Head of opened rule chain page text").isEqualTo(ruleChainName);
}
@Test(priority = 10, groups = "smoke")
@Description("Open the rule chain by clicking on the 'Open rule chain' button in the entity view")
public void openRuleChainByViewBtn() {
ruleChainName = ENTITY_NAME + random();
testRestClient.postRuleChain(EntityPrototypes.defaultRuleChainPrototype(ruleChainName));
RuleChain ruleChain = getRuleChainByName(ruleChainName);
sideBarMenuView.ruleChainsBtn().click();
ruleChainsPage.detailsBtn(ruleChainName).click();
ruleChainsPage.openRuleChainFromViewBtn().click();
openRuleChainPage.setHeadName();
assertThat(ruleChain).as("Rule chain created").isNotNull();
assertThat(urlContains(ruleChain.getUuidId().toString())).as("URL contains rule chain's ID").isTrue();
assertIsDisplayed(openRuleChainPage.headRuleChainName());
assertIsDisplayed(openRuleChainPage.inputNode());
assertThat(openRuleChainPage.getHeadName()).as("Head of opened rule chain page text").isEqualTo(ruleChainName);
}
}

View File

@ -13,58 +13,30 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
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.Epic;
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.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.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.random;
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.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")
@Description("Change name by edit menu")
public void changeName() {
String newRuleChainName = "Changed" + getRandomNumber();
String ruleChainName = ENTITY_NAME + random();
ruleChainName = ENTITY_NAME + random();
testRestClient.postRuleChain(defaultRuleChainPrototype(ruleChainName));
this.ruleChainName = ruleChainName;
sideBarMenuView.ruleChainsBtn().click();
ruleChainsPage.detailsBtn(ruleChainName).click();
@ -73,39 +45,33 @@ public class RuleChainEditMenuTest extends AbstractDriverBaseTest {
ruleChainsPage.editPencilBtn().click();
ruleChainsPage.changeNameEditMenu(newRuleChainName);
ruleChainsPage.doneBtnEditView().click();
this.ruleChainName = newRuleChainName;
ruleChainName = newRuleChainName;
ruleChainsPage.setHeaderName();
String nameAfter = ruleChainsPage.getHeaderName();
Assert.assertNotEquals(nameBefore, nameAfter);
Assert.assertEquals(newRuleChainName, nameAfter);
assertThat(nameAfter).as("The name has changed").isNotEqualTo(nameBefore);
assertThat(nameAfter).as("The name has changed correctly").isEqualTo(newRuleChainName);
}
@Epic("Rule chains smoke tests")
@Feature("Edit rule chain")
@Test(priority = 20, groups = "smoke")
@Description("Delete name and save")
public void deleteName() {
String ruleChainName = ENTITY_NAME + random();
ruleChainName = ENTITY_NAME + random();
testRestClient.postRuleChain(defaultRuleChainPrototype(ruleChainName));
this.ruleChainName = ruleChainName;
sideBarMenuView.ruleChainsBtn().click();
ruleChainsPage.detailsBtn(ruleChainName).click();
ruleChainsPage.editPencilBtn().click();
ruleChainsPage.changeNameEditMenu("");
Assert.assertFalse(ruleChainsPage.doneBtnEditViewVisible().isEnabled());
assertIsDisable(ruleChainsPage.doneBtnEditViewVisible());
}
@Epic("Rule chains smoke tests")
@Feature("Edit rule chain")
@Test(priority = 20, groups = "smoke")
@Description("Save only with space")
public void saveOnlyWithSpace() {
String ruleChainName = ENTITY_NAME +random();
ruleChainName = ENTITY_NAME + random();
testRestClient.postRuleChain(defaultRuleChainPrototype(ruleChainName));
this.ruleChainName = ruleChainName;
sideBarMenuView.ruleChainsBtn().click();
ruleChainsPage.detailsBtn(ruleChainName).click();
@ -113,50 +79,44 @@ public class RuleChainEditMenuTest extends AbstractDriverBaseTest {
ruleChainsPage.changeNameEditMenu(" ");
ruleChainsPage.doneBtnEditView().click();
Assert.assertNotNull(ruleChainsPage.warningMessage());
Assert.assertTrue(ruleChainsPage.warningMessage().isDisplayed());
Assert.assertEquals(ruleChainsPage.warningMessage().getText(), EMPTY_RULE_CHAIN_MESSAGE);
assertIsDisplayed(ruleChainsPage.warningMessage());
assertThat(ruleChainsPage.warningMessage().getText()).as("Text of warning message").isEqualTo(EMPTY_RULE_CHAIN_MESSAGE);
}
@Epic("Rule chains smoke tests")
@Feature("Edit rule chain")
@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")
public void editDescription(String description, String newDescription, String finalDescription) {
String name = ENTITY_NAME + random();
testRestClient.postRuleChain(EntityPrototypes.defaultRuleChainPrototype(name, description));
ruleChainName = name;
ruleChainName = ENTITY_NAME + random();
testRestClient.postRuleChain(EntityPrototypes.defaultRuleChainPrototype(ruleChainName, description));
sideBarMenuView.ruleChainsBtn().click();
ruleChainsPage.detailsBtn(name).click();
ruleChainsPage.detailsBtn(ruleChainName).click();
ruleChainsPage.editPencilBtn().click();
ruleChainsPage.descriptionEntityView().sendKeys(newDescription);
ruleChainsPage.doneBtnEditView().click();
ruleChainsPage.setDescription();
Assert.assertEquals(ruleChainsPage.getDescription(), finalDescription);
assertThat(ruleChainsPage.getDescription()).as("The description changed correctly").isEqualTo(finalDescription);
}
@Epic("Rule chains smoke tests")
@Feature("Edit rule chain")
@Test(priority = 20, groups = "smoke")
@Test(priority = 20, groups = "smoke", dataProviderClass = DataProviderCredential.class, dataProvider = "debugMode")
@Description("Enable debug mode/Disable debug mode")
public void debugMode() {
String ruleChainName = ENTITY_NAME + random();
testRestClient.postRuleChain(defaultRuleChainPrototype(ruleChainName));
this.ruleChainName = ruleChainName;
public void debugMode(boolean debugMode) {
ruleChainName = ENTITY_NAME + random();
testRestClient.postRuleChain(defaultRuleChainPrototype(ruleChainName, debugMode));
sideBarMenuView.ruleChainsBtn().click();
ruleChainsPage.detailsBtn(ruleChainName).click();
ruleChainsPage.editPencilBtn().click();
ruleChainsPage.debugCheckboxEdit().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");
Assert.assertTrue(debugMode, "Debug mode enable");
if (debugMode) {
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();
}
}
}
}

View File

@ -13,60 +13,39 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
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.Epic;
import io.qameta.allure.Feature;
import org.testng.Assert;
import org.testng.annotations.BeforeClass;
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 static org.assertj.core.api.Assertions.assertThat;
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")
@Description("Search rule chain by first word in the name/Search rule chain by second word in the name")
public void searchFirstWord(String namePath) {
sideBarMenuView.ruleChainsBtn().click();
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")
@Description("Search rule chain by symbol in the name/Search rule chain by number in the name")
public void searchNumber(String name, String namePath) {
testRestClient.postRuleChain(defaultRuleChainPrototype(name));
ruleChainName = name;
testRestClient.postRuleChain(defaultRuleChainPrototype(ruleChainName));
sideBarMenuView.ruleChainsBtn().click();
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());
}
}

View File

@ -13,57 +13,31 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
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.Epic;
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.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 static org.assertj.core.api.Assertions.assertThat;
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")
@Description("Sort rule chain 'UP'")
public void specialCharacterUp(String ruleChainName) {
public void specialCharacterUp(String name) {
ruleChainName = name;
testRestClient.postRuleChain(defaultRuleChainPrototype(ruleChainName));
this.ruleChainName = ruleChainName;
sideBarMenuView.ruleChainsBtn().click();
ruleChainsPage.sortByNameBtn().click();
ruleChainsPage.setRuleChainName(0);
Assert.assertEquals(ruleChainsPage.getRuleChainName(), ruleChainName);
assertThat(ruleChainsPage.getRuleChainName()).as("First rule chain after sort").isEqualTo(ruleChainName);
}
@Epic("Rule chains smoke tests")
@ -84,13 +58,13 @@ public class SortByNameTest extends AbstractDriverBaseTest {
ruleChainsPage.setRuleChainName(2);
String thirdRuleChain = ruleChainsPage.getRuleChainName();
testRestClient.deleteRuleChain(getRuleChainByName(ruleChain).getId());
testRestClient.deleteRuleChain(getRuleChainByName(ruleChainNumber).getId());
testRestClient.deleteRuleChain(getRuleChainByName(ruleChainSymbol).getId());
deleteRuleChainByName(ruleChain);
deleteRuleChainByName(ruleChainNumber);
deleteRuleChainByName(ruleChainSymbol);
Assert.assertEquals(firstRuleChain, ruleChainSymbol);
Assert.assertEquals(secondRuleChain, ruleChainNumber);
Assert.assertEquals(thirdRuleChain, ruleChain);
assertThat(firstRuleChain).as("First rule chain with symbol in name").isEqualTo(ruleChainSymbol);
assertThat(secondRuleChain).as("Second rule chain with number in name").isEqualTo(ruleChainNumber);
assertThat(thirdRuleChain).as("Third rule chain with number in name").isEqualTo(ruleChain);
}
@Epic("Rule chains smoke tests")
@ -105,7 +79,7 @@ public class SortByNameTest extends AbstractDriverBaseTest {
ruleChainsPage.sortByNameDown();
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")
@ -127,12 +101,12 @@ public class SortByNameTest extends AbstractDriverBaseTest {
ruleChainsPage.setRuleChainName(lastIndex - 2);
String thirdRuleChain = ruleChainsPage.getRuleChainName();
testRestClient.deleteRuleChain(getRuleChainByName(ruleChain).getId());
testRestClient.deleteRuleChain(getRuleChainByName(ruleChainNumber).getId());
testRestClient.deleteRuleChain(getRuleChainByName(ruleChainSymbol).getId());
deleteRuleChainByName(ruleChain);
deleteRuleChainByName(ruleChainNumber);
deleteRuleChainByName(ruleChainSymbol);
Assert.assertEquals(firstRuleChain, ruleChainSymbol);
Assert.assertEquals(secondRuleChain, ruleChainNumber);
Assert.assertEquals(thirdRuleChain, ruleChain);
assertThat(firstRuleChain).as("First from the end rule chain with symbol in name").isEqualTo(ruleChainSymbol);
assertThat(secondRuleChain).as("Second from the end rule chain with number in name").isEqualTo(ruleChainNumber);
assertThat(thirdRuleChain).as("Third rule from the end chain with number in name").isEqualTo(ruleChain);
}
}
}

View File

@ -13,70 +13,39 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
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.Epic;
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.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.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")
@Description("Sort rule chain 'DOWN'")
public void sortByTimeDown() {
String ruleChain = ENTITY_NAME;
testRestClient.postRuleChain(defaultRuleChainPrototype(ruleChain));
ruleChainName = ruleChain;
ruleChainName = ENTITY_NAME;
testRestClient.postRuleChain(defaultRuleChainPrototype(ruleChainName));
sideBarMenuView.ruleChainsBtn().click();
ruleChainsPage.setSort();
String firstListElement = ruleChainsPage.getSort().get(ruleChainsPage.getSort().size() - 1);
String lastCreated = ruleChainsPage.createdTime().get(0).getText();
Assert.assertEquals(firstListElement, lastCreated);
Assert.assertNotNull(ruleChainsPage.createdTimeEntity(ruleChain, lastCreated));
assertThat(firstListElement).as("Last in list is last created").isEqualTo(lastCreated);
assertIsDisplayed(ruleChainsPage.createdTimeEntity(ruleChainName, lastCreated));
}
@Epic("Rule chains smoke tests")
@Feature("Sort rule chain by time")
@Test(priority = 10, groups = "smoke")
@Description("Sort rule chain 'UP'")
public void sortByTimeUp() {
String ruleChain = ENTITY_NAME;
testRestClient.postRuleChain(defaultRuleChainPrototype(ruleChain));
ruleChainName = ruleChain;
ruleChainName = ENTITY_NAME;
testRestClient.postRuleChain(defaultRuleChainPrototype(ruleChainName));
sideBarMenuView.ruleChainsBtn().click();
ruleChainsPage.sortByTimeBtn().click();
@ -84,7 +53,7 @@ public class SortByTimeTest extends AbstractDriverBaseTest {
String firstListElement = ruleChainsPage.getSort().get(ruleChainsPage.getSort().size() - 1);
String lastCreated = ruleChainsPage.createdTime().get(ruleChainsPage.createdTime().size() - 1).getText();
Assert.assertEquals(firstListElement, lastCreated);
Assert.assertNotNull(ruleChainsPage.createdTimeEntity(ruleChain, lastCreated));
assertThat(firstListElement).as("First in list is last created").isEqualTo(lastCreated);
assertIsDisplayed(ruleChainsPage.createdTimeEntity(ruleChainName, lastCreated));
}
}

View File

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

View File

@ -63,6 +63,13 @@ public class EntityPrototypes {
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) {
DeviceProfile deviceProfile = new DeviceProfile();
deviceProfile.setName(entityName);

View File

@ -34,7 +34,7 @@
</run>
</groups>
<packages>
<package name="org.thingsboard.server.msa.ui.tests.ruleChainsSmoke"/>
<package name="org.thingsboard.server.msa.ui.tests.rulechainssmoke"/>
</packages>
</test>
<test name="Smoke customers tests">

View File

@ -29,7 +29,7 @@
</run>
</groups>
<packages>
<package name="org.thingsboard.server.msa.ui.tests.ruleChainsSmoke"/>
<package name="org.thingsboard.server.msa.ui.tests.rulechainssmoke"/>
</packages>
</test>
</suite>

View File

@ -29,7 +29,7 @@
</run>
</groups>
<packages>
<package name="org.thingsboard.server.msa.ui.tests.ruleChainsSmoke"/>
<package name="org.thingsboard.server.msa.ui.tests.rulechainssmoke"/>
</packages>
</test>
<test name="Smoke customers tests">