add tests on search and sort device profiles
This commit is contained in:
parent
fc304404a5
commit
4c58de7949
@ -43,7 +43,7 @@ public class TestProperties {
|
|||||||
if (instance.isActive()) {
|
if (instance.isActive()) {
|
||||||
return "https://host.docker.internal";
|
return "https://host.docker.internal";
|
||||||
}
|
}
|
||||||
return getProperties().getProperty("tb.baseUrl");
|
return getProperties().getProperty("tb.baseUiUrl");
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String getWebSocketUrl() {
|
public static String getWebSocketUrl() {
|
||||||
|
|||||||
@ -18,6 +18,7 @@ package org.thingsboard.server.msa.ui.base;
|
|||||||
import lombok.SneakyThrows;
|
import lombok.SneakyThrows;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.openqa.selenium.By;
|
import org.openqa.selenium.By;
|
||||||
|
import org.openqa.selenium.JavascriptExecutor;
|
||||||
import org.openqa.selenium.WebDriver;
|
import org.openqa.selenium.WebDriver;
|
||||||
import org.openqa.selenium.WebDriverException;
|
import org.openqa.selenium.WebDriverException;
|
||||||
import org.openqa.selenium.WebElement;
|
import org.openqa.selenium.WebElement;
|
||||||
@ -35,11 +36,14 @@ abstract public class AbstractBasePage {
|
|||||||
protected WebDriver driver;
|
protected WebDriver driver;
|
||||||
protected WebDriverWait wait;
|
protected WebDriverWait wait;
|
||||||
protected Actions actions;
|
protected Actions actions;
|
||||||
|
protected JavascriptExecutor js;
|
||||||
|
|
||||||
|
|
||||||
public AbstractBasePage(WebDriver driver) {
|
public AbstractBasePage(WebDriver driver) {
|
||||||
this.driver = driver;
|
this.driver = driver;
|
||||||
this.wait = new WebDriverWait(driver, Duration.ofMillis(5000));
|
this.wait = new WebDriverWait(driver, Duration.ofMillis(5000));
|
||||||
this.actions = new Actions(driver);
|
this.actions = new Actions(driver);
|
||||||
|
this.js = (JavascriptExecutor) driver;
|
||||||
}
|
}
|
||||||
|
|
||||||
@SneakyThrows
|
@SneakyThrows
|
||||||
@ -134,6 +138,18 @@ abstract public class AbstractBasePage {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void jsClick(WebElement element) {
|
||||||
|
js.executeScript("arguments[0].click();", element);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void scrollToElement(WebElement element) {
|
||||||
|
js.executeScript("arguments[0].scrollIntoView(true);", element);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void waitUntilAttributeContains(WebElement element, String attribute, String value) {
|
||||||
|
wait.until(ExpectedConditions.attributeContains(element, attribute, value));
|
||||||
|
}
|
||||||
|
|
||||||
public void goToNextTab(int tabNumber) {
|
public void goToNextTab(int tabNumber) {
|
||||||
waitUntilNumberOfTabToBe(tabNumber);
|
waitUntilNumberOfTabToBe(tabNumber);
|
||||||
ArrayList<String> tabs = new ArrayList<>(driver.getWindowHandles());
|
ArrayList<String> tabs = new ArrayList<>(driver.getWindowHandles());
|
||||||
|
|||||||
@ -22,10 +22,12 @@ import lombok.SneakyThrows;
|
|||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.commons.io.FileUtils;
|
import org.apache.commons.io.FileUtils;
|
||||||
import org.openqa.selenium.Dimension;
|
import org.openqa.selenium.Dimension;
|
||||||
|
import org.openqa.selenium.JavascriptExecutor;
|
||||||
import org.openqa.selenium.OutputType;
|
import org.openqa.selenium.OutputType;
|
||||||
import org.openqa.selenium.TakesScreenshot;
|
import org.openqa.selenium.TakesScreenshot;
|
||||||
import org.openqa.selenium.WebDriver;
|
import org.openqa.selenium.WebDriver;
|
||||||
import org.openqa.selenium.WebDriverException;
|
import org.openqa.selenium.WebDriverException;
|
||||||
|
import org.openqa.selenium.WebElement;
|
||||||
import org.openqa.selenium.chrome.ChromeDriver;
|
import org.openqa.selenium.chrome.ChromeDriver;
|
||||||
import org.openqa.selenium.chrome.ChromeOptions;
|
import org.openqa.selenium.chrome.ChromeOptions;
|
||||||
import org.openqa.selenium.remote.LocalFileDetector;
|
import org.openqa.selenium.remote.LocalFileDetector;
|
||||||
@ -58,6 +60,7 @@ abstract public class AbstractDriverBaseTest extends AbstractContainerTest {
|
|||||||
private static final String REMOTE_WEBDRIVER_HOST = "http://localhost:4444";
|
private static final String REMOTE_WEBDRIVER_HOST = "http://localhost:4444";
|
||||||
protected static final PageLink pageLink = new PageLink(10);
|
protected static final PageLink pageLink = new PageLink(10);
|
||||||
private static final ContainerTestSuite instance = ContainerTestSuite.getInstance();
|
private static final ContainerTestSuite instance = ContainerTestSuite.getInstance();
|
||||||
|
private JavascriptExecutor js;
|
||||||
|
|
||||||
@SneakyThrows
|
@SneakyThrows
|
||||||
@BeforeMethod
|
@BeforeMethod
|
||||||
@ -104,6 +107,11 @@ abstract public class AbstractDriverBaseTest extends AbstractContainerTest {
|
|||||||
return driver.getCurrentUrl().contains(urlPath);
|
return driver.getCurrentUrl().contains(urlPath);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void jsClick(WebElement element) {
|
||||||
|
js = (JavascriptExecutor) driver;
|
||||||
|
js.executeScript("arguments[0].click();", element);
|
||||||
|
}
|
||||||
|
|
||||||
public static RuleChain getRuleChainByName(String name) {
|
public static RuleChain getRuleChainByName(String name) {
|
||||||
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);
|
||||||
|
|||||||
@ -17,7 +17,8 @@ package org.thingsboard.server.msa.ui.pages;
|
|||||||
|
|
||||||
import org.openqa.selenium.WebDriver;
|
import org.openqa.selenium.WebDriver;
|
||||||
import org.openqa.selenium.WebElement;
|
import org.openqa.selenium.WebElement;
|
||||||
import org.w3c.dom.html.HTMLInputElement;
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public class ProfilesPageElements extends OtherPageElementsHelper {
|
public class ProfilesPageElements extends OtherPageElementsHelper {
|
||||||
public ProfilesPageElements(WebDriver driver) {
|
public ProfilesPageElements(WebDriver driver) {
|
||||||
@ -35,6 +36,7 @@ public class ProfilesPageElements extends OtherPageElementsHelper {
|
|||||||
private static final String DESCRIPTION_FIELD = "//textarea[@formcontrolname='description']";
|
private static final String DESCRIPTION_FIELD = "//textarea[@formcontrolname='description']";
|
||||||
private static final String ADD_DEVICE_PROFILE_ADD_BTN = ADD_DEVICE_PROFILE_VIEW + "//span[text() = 'Add']/..";
|
private static final String ADD_DEVICE_PROFILE_ADD_BTN = ADD_DEVICE_PROFILE_VIEW + "//span[text() = 'Add']/..";
|
||||||
private static final String DEVISE_PROFILE_VIEW_DELETE_BTN = "//tb-device-profile//span[contains(text(),'Delete')]";
|
private static final String DEVISE_PROFILE_VIEW_DELETE_BTN = "//tb-device-profile//span[contains(text(),'Delete')]";
|
||||||
|
private static final String PROFILE_NAMES = "//tbody/mat-row/mat-cell[contains(@class,'name')]";
|
||||||
|
|
||||||
protected String getDeviseProfileViewDeleteBtn() {
|
protected String getDeviseProfileViewDeleteBtn() {
|
||||||
return DEVISE_PROFILE_VIEW_DELETE_BTN;
|
return DEVISE_PROFILE_VIEW_DELETE_BTN;
|
||||||
@ -99,4 +101,8 @@ public class ProfilesPageElements extends OtherPageElementsHelper {
|
|||||||
public WebElement deviceProfileViewDeleteBtn() {
|
public WebElement deviceProfileViewDeleteBtn() {
|
||||||
return waitUntilElementToBeClickable(DEVISE_PROFILE_VIEW_DELETE_BTN);
|
return waitUntilElementToBeClickable(DEVISE_PROFILE_VIEW_DELETE_BTN);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<WebElement> profileNames() {
|
||||||
|
return waitUntilElementsToBeClickable(PROFILE_NAMES);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@ -16,8 +16,8 @@
|
|||||||
package org.thingsboard.server.msa.ui.pages;
|
package org.thingsboard.server.msa.ui.pages;
|
||||||
|
|
||||||
import org.openqa.selenium.By;
|
import org.openqa.selenium.By;
|
||||||
|
import org.openqa.selenium.JavascriptExecutor;
|
||||||
import org.openqa.selenium.WebDriver;
|
import org.openqa.selenium.WebDriver;
|
||||||
import org.openqa.selenium.WebElement;
|
|
||||||
import org.openqa.selenium.support.ui.ExpectedConditions;
|
import org.openqa.selenium.support.ui.ExpectedConditions;
|
||||||
|
|
||||||
public class ProfilesPageHelper extends ProfilesPageElements {
|
public class ProfilesPageHelper extends ProfilesPageElements {
|
||||||
@ -30,6 +30,7 @@ public class ProfilesPageHelper extends ProfilesPageElements {
|
|||||||
private String mobileDashboard;
|
private String mobileDashboard;
|
||||||
private String queue;
|
private String queue;
|
||||||
private String description;
|
private String description;
|
||||||
|
private String profile;
|
||||||
|
|
||||||
public void setName() {
|
public void setName() {
|
||||||
this.name = profileViewNameField().getAttribute("value");
|
this.name = profileViewNameField().getAttribute("value");
|
||||||
@ -48,9 +49,18 @@ public class ProfilesPageHelper extends ProfilesPageElements {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void setDescription() {
|
public void setDescription() {
|
||||||
|
scrollToElement(profileViewDescriptionField());
|
||||||
this.description = profileViewDescriptionField().getAttribute("value");
|
this.description = profileViewDescriptionField().getAttribute("value");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setProfileName() {
|
||||||
|
this.profile = profileNames().get(0).getText();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setProfileName(int number) {
|
||||||
|
this.profile = profileNames().get(number).getText();
|
||||||
|
}
|
||||||
|
|
||||||
public String getName() {
|
public String getName() {
|
||||||
return this.name;
|
return this.name;
|
||||||
}
|
}
|
||||||
@ -71,6 +81,10 @@ public class ProfilesPageHelper extends ProfilesPageElements {
|
|||||||
return this.description;
|
return this.description;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getProfileName() {
|
||||||
|
return this.profile;
|
||||||
|
}
|
||||||
|
|
||||||
public void enterName(String name) {
|
public void enterName(String name) {
|
||||||
addDeviceProfileNameField().click();
|
addDeviceProfileNameField().click();
|
||||||
addDeviceProfileNameField().sendKeys(name);
|
addDeviceProfileNameField().sendKeys(name);
|
||||||
@ -89,6 +103,7 @@ public class ProfilesPageHelper extends ProfilesPageElements {
|
|||||||
public void chooseQueue(String queue) {
|
public void chooseQueue(String queue) {
|
||||||
addDeviceProfileQueueField().click();
|
addDeviceProfileQueueField().click();
|
||||||
entityFromList(queue).click();
|
entityFromList(queue).click();
|
||||||
|
waitUntilAttributeContains(addDeviceProfileQueueField(), "aria-expanded", "false");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void enterDescription(String description) {
|
public void enterDescription(String description) {
|
||||||
@ -108,5 +123,14 @@ public class ProfilesPageHelper extends ProfilesPageElements {
|
|||||||
public boolean deleteDeviceProfileFromViewBtnIsNotDisplayed() {
|
public boolean deleteDeviceProfileFromViewBtnIsNotDisplayed() {
|
||||||
return wait.until(ExpectedConditions.invisibilityOfElementLocated(By.xpath(getDeviseProfileViewDeleteBtn())));
|
return wait.until(ExpectedConditions.invisibilityOfElementLocated(By.xpath(getDeviseProfileViewDeleteBtn())));
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
public void goToProfileHelpPage() {
|
||||||
|
jsClick(helpBtn());
|
||||||
|
goToNextTab(2);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void sortByNameDown() {
|
||||||
|
doubleClick(sortByNameBtn());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,3 +1,18 @@
|
|||||||
|
/**
|
||||||
|
* Copyright © 2016-2022 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.deviceProfileSmoke;
|
package org.thingsboard.server.msa.ui.tests.deviceProfileSmoke;
|
||||||
|
|
||||||
import io.qameta.allure.Description;
|
import io.qameta.allure.Description;
|
||||||
|
|||||||
@ -16,6 +16,7 @@
|
|||||||
package org.thingsboard.server.msa.ui.tests.deviceProfileSmoke;
|
package org.thingsboard.server.msa.ui.tests.deviceProfileSmoke;
|
||||||
|
|
||||||
import io.qameta.allure.Description;
|
import io.qameta.allure.Description;
|
||||||
|
import org.openqa.selenium.JavascriptExecutor;
|
||||||
import org.openqa.selenium.Keys;
|
import org.openqa.selenium.Keys;
|
||||||
import org.testng.Assert;
|
import org.testng.Assert;
|
||||||
import org.testng.annotations.AfterMethod;
|
import org.testng.annotations.AfterMethod;
|
||||||
@ -176,7 +177,7 @@ public class CreateDeviceProfileTest extends AbstractDriverBaseTest {
|
|||||||
|
|
||||||
sideBarMenuView.openDeviceProfiles();
|
sideBarMenuView.openDeviceProfiles();
|
||||||
profilesPage.allEntity().get(0).click();
|
profilesPage.allEntity().get(0).click();
|
||||||
profilesPage.goToHelpPage();
|
profilesPage.goToProfileHelpPage();
|
||||||
|
|
||||||
Assert.assertTrue(urlContains(urlPath));
|
Assert.assertTrue(urlContains(urlPath));
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,3 +1,18 @@
|
|||||||
|
/**
|
||||||
|
* Copyright © 2016-2022 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.deviceProfileSmoke;
|
package org.thingsboard.server.msa.ui.tests.deviceProfileSmoke;
|
||||||
|
|
||||||
import org.testng.Assert;
|
import org.testng.Assert;
|
||||||
|
|||||||
@ -1,3 +1,18 @@
|
|||||||
|
/**
|
||||||
|
* Copyright © 2016-2022 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.deviceProfileSmoke;
|
package org.thingsboard.server.msa.ui.tests.deviceProfileSmoke;
|
||||||
|
|
||||||
import io.qameta.allure.Description;
|
import io.qameta.allure.Description;
|
||||||
@ -9,13 +24,14 @@ import org.thingsboard.server.msa.ui.base.AbstractDriverBaseTest;
|
|||||||
import org.thingsboard.server.msa.ui.pages.LoginPageHelper;
|
import org.thingsboard.server.msa.ui.pages.LoginPageHelper;
|
||||||
import org.thingsboard.server.msa.ui.pages.ProfilesPageHelper;
|
import org.thingsboard.server.msa.ui.pages.ProfilesPageHelper;
|
||||||
import org.thingsboard.server.msa.ui.pages.SideBarMenuViewHelper;
|
import org.thingsboard.server.msa.ui.pages.SideBarMenuViewHelper;
|
||||||
|
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.thingsboard.server.msa.ui.base.AbstractBasePage.getRandomNumber;
|
import static org.thingsboard.server.msa.ui.base.AbstractBasePage.getRandomNumber;
|
||||||
|
import static org.thingsboard.server.msa.ui.utils.Const.EMPTY_DEVICE_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.TENANT_EMAIL;
|
import static org.thingsboard.server.msa.ui.utils.Const.TENANT_EMAIL;
|
||||||
import static org.thingsboard.server.msa.ui.utils.Const.TENANT_PASSWORD;
|
import static org.thingsboard.server.msa.ui.utils.Const.TENANT_PASSWORD;
|
||||||
import static org.thingsboard.server.msa.ui.utils.EntityPrototypes.defaultCustomerPrototype;
|
|
||||||
|
|
||||||
public class DeviceProfileEditMenuTest extends AbstractDriverBaseTest {
|
public class DeviceProfileEditMenuTest extends AbstractDriverBaseTest {
|
||||||
|
|
||||||
@ -42,24 +58,74 @@ public class DeviceProfileEditMenuTest extends AbstractDriverBaseTest {
|
|||||||
|
|
||||||
@Test(priority = 10, groups = "smoke")
|
@Test(priority = 10, groups = "smoke")
|
||||||
@Description
|
@Description
|
||||||
public void changeTitle() {
|
public void changeName() {
|
||||||
String name = ENTITY_NAME;
|
String name = ENTITY_NAME;
|
||||||
String newName = "Changed" + getRandomNumber();
|
String newName = "Changed" + getRandomNumber();
|
||||||
testRestClient.postDeviceProfile(EntityPrototypes.defaultDeviceProfile(name));
|
testRestClient.postDeviceProfile(EntityPrototypes.defaultDeviceProfile(name));
|
||||||
this.name = name;
|
this.name = name;
|
||||||
|
|
||||||
sideBarMenuView.customerBtn().click();
|
sideBarMenuView.openDeviceProfiles();
|
||||||
profilesPage.entity(name).click();
|
profilesPage.entity(name).click();
|
||||||
profilesPage.setHeaderName();
|
profilesPage.setHeaderName();
|
||||||
String titleBefore = profilesPage.getHeaderName();
|
String titleBefore = profilesPage.getHeaderName();
|
||||||
profilesPage.editPencilBtn().click();
|
jsClick(profilesPage.editPencilBtn());
|
||||||
profilesPage.changeNameEditMenu(newName);
|
profilesPage.changeNameEditMenu(newName);
|
||||||
profilesPage.doneBtnEditView().click();
|
profilesPage.doneBtnEditView().click();
|
||||||
|
this.name = newName;
|
||||||
profilesPage.setHeaderName();
|
profilesPage.setHeaderName();
|
||||||
String titleAfter = profilesPage.getHeaderName();
|
String titleAfter = profilesPage.getHeaderName();
|
||||||
|
|
||||||
|
|
||||||
Assert.assertNotEquals(titleBefore, titleAfter);
|
Assert.assertNotEquals(titleBefore, titleAfter);
|
||||||
Assert.assertEquals(titleAfter, newName);
|
Assert.assertEquals(titleAfter, newName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test(priority = 10, groups = "smoke")
|
||||||
|
@Description
|
||||||
|
public void deleteName() {
|
||||||
|
String name = ENTITY_NAME;
|
||||||
|
testRestClient.postDeviceProfile(EntityPrototypes.defaultDeviceProfile(name));
|
||||||
|
this.name = name;
|
||||||
|
|
||||||
|
sideBarMenuView.openDeviceProfiles();
|
||||||
|
profilesPage.entity(name).click();
|
||||||
|
jsClick(profilesPage.editPencilBtn());
|
||||||
|
profilesPage.changeNameEditMenu("");
|
||||||
|
|
||||||
|
Assert.assertFalse(profilesPage.doneBtnEditViewVisible().isEnabled());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(priority = 10, groups = "smoke")
|
||||||
|
@Description
|
||||||
|
public void saveWithOnlySpaceInName() {
|
||||||
|
String name = ENTITY_NAME;
|
||||||
|
testRestClient.postDeviceProfile(EntityPrototypes.defaultDeviceProfile(name));
|
||||||
|
this.name = name;
|
||||||
|
|
||||||
|
sideBarMenuView.openDeviceProfiles();
|
||||||
|
profilesPage.entity(name).click();
|
||||||
|
jsClick(profilesPage.editPencilBtn());
|
||||||
|
profilesPage.changeNameEditMenu(" ");
|
||||||
|
profilesPage.doneBtnEditView().click();
|
||||||
|
|
||||||
|
Assert.assertNotNull(profilesPage.warningMessage());
|
||||||
|
Assert.assertTrue(profilesPage.warningMessage().isDisplayed());
|
||||||
|
Assert.assertEquals(profilesPage.warningMessage().getText(), EMPTY_DEVICE_PROFILE_MESSAGE);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(priority = 10, groups = "smoke", dataProviderClass = DataProviderCredential.class, dataProvider = "editMenuDescription")
|
||||||
|
@Description
|
||||||
|
public void editDescription(String description, String newDescription, String finalDescription) {
|
||||||
|
String name = ENTITY_NAME;
|
||||||
|
testRestClient.postDeviceProfile(EntityPrototypes.defaultDeviceProfile(name, description));
|
||||||
|
this.name = name;
|
||||||
|
|
||||||
|
sideBarMenuView.openDeviceProfiles();
|
||||||
|
profilesPage.entity(name).click();
|
||||||
|
jsClick(profilesPage.editPencilBtn());
|
||||||
|
profilesPage.profileViewDescriptionField().sendKeys(newDescription);
|
||||||
|
profilesPage.doneBtnEditView().click();
|
||||||
|
profilesPage.setDescription();
|
||||||
|
|
||||||
|
Assert.assertEquals(profilesPage.getDescription(), finalDescription);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,67 @@
|
|||||||
|
/**
|
||||||
|
* Copyright © 2016-2022 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.deviceProfileSmoke;
|
||||||
|
|
||||||
|
import io.qameta.allure.Description;
|
||||||
|
import org.testng.Assert;
|
||||||
|
import org.testng.annotations.AfterMethod;
|
||||||
|
import org.testng.annotations.BeforeMethod;
|
||||||
|
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.ProfilesPageHelper;
|
||||||
|
import org.thingsboard.server.msa.ui.pages.SideBarMenuViewHelper;
|
||||||
|
import org.thingsboard.server.msa.ui.utils.DataProviderCredential;
|
||||||
|
|
||||||
|
import static org.thingsboard.server.msa.ui.utils.Const.TENANT_EMAIL;
|
||||||
|
import static org.thingsboard.server.msa.ui.utils.Const.TENANT_PASSWORD;
|
||||||
|
import static org.thingsboard.server.msa.ui.utils.EntityPrototypes.defaultDeviceProfile;
|
||||||
|
|
||||||
|
public class SearchDeviceProfileTest extends AbstractDriverBaseTest {
|
||||||
|
|
||||||
|
private SideBarMenuViewHelper sideBarMenuView;
|
||||||
|
private ProfilesPageHelper profilesPage;
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
@BeforeMethod
|
||||||
|
public void login() {
|
||||||
|
openLocalhost();
|
||||||
|
new LoginPageHelper(driver).authorizationTenant();
|
||||||
|
testRestClient.login(TENANT_EMAIL, TENANT_PASSWORD);
|
||||||
|
sideBarMenuView = new SideBarMenuViewHelper(driver);
|
||||||
|
profilesPage = new ProfilesPageHelper(driver);
|
||||||
|
}
|
||||||
|
|
||||||
|
@AfterMethod
|
||||||
|
public void delete() {
|
||||||
|
if (name != null) {
|
||||||
|
testRestClient.deleteDeviseProfile(getDeviceProfileByName(name).getId());
|
||||||
|
name = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(priority = 10, groups = "smoke", dataProviderClass = DataProviderCredential.class, dataProvider = "deviceProfileSearch")
|
||||||
|
@Description
|
||||||
|
public void searchFirstWord(String name, String namePath) {
|
||||||
|
testRestClient.postDeviceProfile(defaultDeviceProfile(name));
|
||||||
|
this.name = name;
|
||||||
|
|
||||||
|
sideBarMenuView.openDeviceProfiles();
|
||||||
|
profilesPage.searchEntity(namePath);
|
||||||
|
|
||||||
|
profilesPage.allEntity().forEach(x -> Assert.assertTrue(x.getText().contains(namePath)));
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,132 @@
|
|||||||
|
/**
|
||||||
|
* Copyright © 2016-2022 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.deviceProfileSmoke;
|
||||||
|
|
||||||
|
import io.qameta.allure.Description;
|
||||||
|
import org.testng.Assert;
|
||||||
|
import org.testng.annotations.AfterMethod;
|
||||||
|
import org.testng.annotations.BeforeMethod;
|
||||||
|
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.ProfilesPageHelper;
|
||||||
|
import org.thingsboard.server.msa.ui.pages.SideBarMenuViewHelper;
|
||||||
|
import org.thingsboard.server.msa.ui.utils.DataProviderCredential;
|
||||||
|
|
||||||
|
import static org.thingsboard.server.msa.ui.utils.Const.TENANT_EMAIL;
|
||||||
|
import static org.thingsboard.server.msa.ui.utils.Const.TENANT_PASSWORD;
|
||||||
|
import static org.thingsboard.server.msa.ui.utils.EntityPrototypes.defaultCustomerPrototype;
|
||||||
|
import static org.thingsboard.server.msa.ui.utils.EntityPrototypes.defaultDeviceProfile;
|
||||||
|
|
||||||
|
public class SortByNameTest extends AbstractDriverBaseTest {
|
||||||
|
private SideBarMenuViewHelper sideBarMenuView;
|
||||||
|
private ProfilesPageHelper profilesPage;
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
@BeforeMethod
|
||||||
|
public void login() {
|
||||||
|
openLocalhost();
|
||||||
|
new LoginPageHelper(driver).authorizationTenant();
|
||||||
|
testRestClient.login(TENANT_EMAIL, TENANT_PASSWORD);
|
||||||
|
sideBarMenuView = new SideBarMenuViewHelper(driver);
|
||||||
|
profilesPage = new ProfilesPageHelper(driver);
|
||||||
|
}
|
||||||
|
|
||||||
|
@AfterMethod
|
||||||
|
public void delete() {
|
||||||
|
if (name != null) {
|
||||||
|
testRestClient.deleteDeviseProfile(getDeviceProfileByName(name).getId());
|
||||||
|
name = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(priority = 10, groups = "smoke", dataProviderClass = DataProviderCredential.class, dataProvider = "nameForSort")
|
||||||
|
@Description
|
||||||
|
public void specialCharacterUp(String name) {
|
||||||
|
testRestClient.postDeviceProfile(defaultDeviceProfile(name));
|
||||||
|
this.name = name;
|
||||||
|
|
||||||
|
sideBarMenuView.openDeviceProfiles();
|
||||||
|
profilesPage.sortByNameBtn().click();
|
||||||
|
profilesPage.setProfileName();
|
||||||
|
|
||||||
|
Assert.assertEquals(profilesPage.getProfileName(), name);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(priority = 20, groups = "smoke", dataProviderClass = DataProviderCredential.class, dataProvider = "nameForAllSort")
|
||||||
|
@Description
|
||||||
|
public void allSortUp(String deviceProfile, String deviceProfileSymbol, String deviceProfileNumber) {
|
||||||
|
testRestClient.postDeviceProfile(defaultDeviceProfile(deviceProfileSymbol));
|
||||||
|
testRestClient.postDeviceProfile(defaultDeviceProfile(deviceProfile));
|
||||||
|
testRestClient.postDeviceProfile(defaultDeviceProfile(deviceProfileNumber));
|
||||||
|
|
||||||
|
sideBarMenuView.openDeviceProfiles();
|
||||||
|
profilesPage.sortByNameBtn().click();
|
||||||
|
profilesPage.setProfileName(0);
|
||||||
|
String firstDeviceProfile = profilesPage.getProfileName();
|
||||||
|
profilesPage.setProfileName(1);
|
||||||
|
String secondDeviceProfile = profilesPage.getProfileName();
|
||||||
|
profilesPage.setProfileName(2);
|
||||||
|
String thirdDeviceProfile = profilesPage.getProfileName();
|
||||||
|
|
||||||
|
testRestClient.deleteDeviseProfile(getDeviceProfileByName(deviceProfile).getId());
|
||||||
|
testRestClient.deleteDeviseProfile(getDeviceProfileByName(deviceProfileNumber).getId());
|
||||||
|
testRestClient.deleteDeviseProfile(getDeviceProfileByName(deviceProfileSymbol).getId());
|
||||||
|
|
||||||
|
Assert.assertEquals(firstDeviceProfile, deviceProfileSymbol);
|
||||||
|
Assert.assertEquals(secondDeviceProfile, deviceProfileNumber);
|
||||||
|
Assert.assertEquals(thirdDeviceProfile, deviceProfile);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(priority = 10, groups = "smoke", dataProviderClass = DataProviderCredential.class, dataProvider = "nameForSort")
|
||||||
|
@Description
|
||||||
|
public void specialCharacterDown(String name) {
|
||||||
|
testRestClient.postDeviceProfile(defaultDeviceProfile(name));
|
||||||
|
this.name = name;
|
||||||
|
|
||||||
|
sideBarMenuView.openDeviceProfiles();
|
||||||
|
profilesPage.sortByNameDown();
|
||||||
|
profilesPage.setProfileName(profilesPage.allEntity().size() - 1);
|
||||||
|
|
||||||
|
Assert.assertEquals(profilesPage.getProfileName(), name);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(priority = 20, groups = "smoke", dataProviderClass = DataProviderCredential.class, dataProvider = "nameForAllSort")
|
||||||
|
@Description
|
||||||
|
public void allSortDown(String deviceProfile, String deviceProfileSymbol, String deviceProfileNumber) {
|
||||||
|
testRestClient.postDeviceProfile(defaultDeviceProfile(deviceProfileSymbol));
|
||||||
|
testRestClient.postDeviceProfile(defaultDeviceProfile(deviceProfile));
|
||||||
|
testRestClient.postDeviceProfile(defaultDeviceProfile(deviceProfileNumber));
|
||||||
|
|
||||||
|
sideBarMenuView.openDeviceProfiles();
|
||||||
|
int lastIndex = profilesPage.allEntity().size() - 1;
|
||||||
|
profilesPage.sortByNameDown();
|
||||||
|
profilesPage.setProfileName(lastIndex);
|
||||||
|
String firstDeviceProfile = profilesPage.getProfileName();
|
||||||
|
profilesPage.setProfileName(lastIndex - 1);
|
||||||
|
String secondDeviceProfile = profilesPage.getProfileName();
|
||||||
|
profilesPage.setProfileName(lastIndex - 2);
|
||||||
|
String thirdDeviceProfile = profilesPage.getProfileName();
|
||||||
|
|
||||||
|
testRestClient.deleteDeviseProfile(getDeviceProfileByName(deviceProfile).getId());
|
||||||
|
testRestClient.deleteDeviseProfile(getDeviceProfileByName(deviceProfileNumber).getId());
|
||||||
|
testRestClient.deleteDeviseProfile(getDeviceProfileByName(deviceProfileSymbol).getId());
|
||||||
|
|
||||||
|
Assert.assertEquals(firstDeviceProfile, deviceProfileSymbol);
|
||||||
|
Assert.assertEquals(secondDeviceProfile, deviceProfileNumber);
|
||||||
|
Assert.assertEquals(thirdDeviceProfile, deviceProfile);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -15,8 +15,10 @@
|
|||||||
*/
|
*/
|
||||||
package org.thingsboard.server.msa.ui.utils;
|
package org.thingsboard.server.msa.ui.utils;
|
||||||
|
|
||||||
|
import org.openqa.selenium.Keys;
|
||||||
import org.testng.annotations.DataProvider;
|
import org.testng.annotations.DataProvider;
|
||||||
|
|
||||||
|
import static org.thingsboard.server.msa.ui.base.AbstractBasePage.getRandomNumber;
|
||||||
import static org.thingsboard.server.msa.ui.base.AbstractBasePage.getRandomSymbol;
|
import static org.thingsboard.server.msa.ui.base.AbstractBasePage.getRandomSymbol;
|
||||||
import static org.thingsboard.server.msa.ui.utils.Const.ENTITY_NAME;
|
import static org.thingsboard.server.msa.ui.utils.Const.ENTITY_NAME;
|
||||||
|
|
||||||
@ -31,6 +33,7 @@ public class DataProviderCredential {
|
|||||||
private static final String CUSTOMER_SECOND_WORD_NAME_PATH = "Customer";
|
private static final String CUSTOMER_SECOND_WORD_NAME_PATH = "Customer";
|
||||||
private static final String RULE_CHAIN_FIRST_WORD_NAME_PATH = "Root";
|
private static final String RULE_CHAIN_FIRST_WORD_NAME_PATH = "Root";
|
||||||
private static final String CUSTOMER_FIRST_WORD_NAME_PATH = "A";
|
private static final String CUSTOMER_FIRST_WORD_NAME_PATH = "A";
|
||||||
|
private static final String DEFAULT_DEVICE_PROFILE_NAME = "Device Profile";
|
||||||
|
|
||||||
@DataProvider
|
@DataProvider
|
||||||
public static Object[][] ruleChainNameForSearchByFirstAndSecondWord() {
|
public static Object[][] ruleChainNameForSearchByFirstAndSecondWord() {
|
||||||
@ -74,4 +77,23 @@ public class DataProviderCredential {
|
|||||||
{CUSTOMER_FIRST_WORD_NAME_PATH},
|
{CUSTOMER_FIRST_WORD_NAME_PATH},
|
||||||
{CUSTOMER_SECOND_WORD_NAME_PATH}};
|
{CUSTOMER_SECOND_WORD_NAME_PATH}};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@DataProvider
|
||||||
|
public static Object[][] deviceProfileSearch() {
|
||||||
|
return new Object[][]{
|
||||||
|
{DEFAULT_DEVICE_PROFILE_NAME, DEFAULT_DEVICE_PROFILE_NAME.split(" ")[0]},
|
||||||
|
{DEFAULT_DEVICE_PROFILE_NAME, DEFAULT_DEVICE_PROFILE_NAME.split(" ")[1]},
|
||||||
|
{NAME, ENTITY_NAME.split("`")[1]},
|
||||||
|
{NAME, String.valueOf(getRandomSymbol())}};
|
||||||
|
}
|
||||||
|
|
||||||
|
@DataProvider
|
||||||
|
public static Object[][] editMenuDescription() {
|
||||||
|
String newDescription = "Description" + getRandomNumber();
|
||||||
|
String description = "Description";
|
||||||
|
return new Object[][]{
|
||||||
|
{"", newDescription, newDescription},
|
||||||
|
{description, newDescription, description + newDescription},
|
||||||
|
{description, Keys.CONTROL + "A" + Keys.BACK_SPACE, ""}};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -17,11 +17,15 @@ package org.thingsboard.server.msa.ui.utils;
|
|||||||
|
|
||||||
import org.thingsboard.server.common.data.Customer;
|
import org.thingsboard.server.common.data.Customer;
|
||||||
import org.thingsboard.server.common.data.DeviceProfile;
|
import org.thingsboard.server.common.data.DeviceProfile;
|
||||||
|
import org.thingsboard.server.common.data.DeviceProfileProvisionType;
|
||||||
import org.thingsboard.server.common.data.DeviceProfileType;
|
import org.thingsboard.server.common.data.DeviceProfileType;
|
||||||
import org.thingsboard.server.common.data.DeviceTransportType;
|
import org.thingsboard.server.common.data.DeviceTransportType;
|
||||||
import org.thingsboard.server.common.data.device.profile.AllowCreateNewDevicesDeviceProfileProvisionConfiguration;
|
import org.thingsboard.server.common.data.device.profile.AllowCreateNewDevicesDeviceProfileProvisionConfiguration;
|
||||||
|
import org.thingsboard.server.common.data.device.profile.DefaultDeviceProfileConfiguration;
|
||||||
import org.thingsboard.server.common.data.device.profile.DefaultDeviceProfileTransportConfiguration;
|
import org.thingsboard.server.common.data.device.profile.DefaultDeviceProfileTransportConfiguration;
|
||||||
|
import org.thingsboard.server.common.data.device.profile.DeviceProfileConfiguration;
|
||||||
import org.thingsboard.server.common.data.device.profile.DeviceProfileData;
|
import org.thingsboard.server.common.data.device.profile.DeviceProfileData;
|
||||||
|
import org.thingsboard.server.common.data.device.profile.DisabledDeviceProfileProvisionConfiguration;
|
||||||
import org.thingsboard.server.common.data.rule.RuleChain;
|
import org.thingsboard.server.common.data.rule.RuleChain;
|
||||||
|
|
||||||
public class EntityPrototypes {
|
public class EntityPrototypes {
|
||||||
@ -43,8 +47,25 @@ public class EntityPrototypes {
|
|||||||
deviceProfile.setName(entityName);
|
deviceProfile.setName(entityName);
|
||||||
deviceProfile.setType(DeviceProfileType.DEFAULT);
|
deviceProfile.setType(DeviceProfileType.DEFAULT);
|
||||||
deviceProfile.setTransportType(DeviceTransportType.DEFAULT);
|
deviceProfile.setTransportType(DeviceTransportType.DEFAULT);
|
||||||
|
deviceProfile.setProvisionType(DeviceProfileProvisionType.DISABLED);
|
||||||
DeviceProfileData deviceProfileData = new DeviceProfileData();
|
DeviceProfileData deviceProfileData = new DeviceProfileData();
|
||||||
deviceProfileData.setProvisionConfiguration( new AllowCreateNewDevicesDeviceProfileProvisionConfiguration(""));
|
deviceProfileData.setConfiguration(new DefaultDeviceProfileConfiguration());
|
||||||
|
deviceProfileData.setProvisionConfiguration(new DisabledDeviceProfileProvisionConfiguration(null));
|
||||||
|
deviceProfileData.setTransportConfiguration(new DefaultDeviceProfileTransportConfiguration());
|
||||||
|
deviceProfile.setProfileData(deviceProfileData);
|
||||||
|
return deviceProfile;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static DeviceProfile defaultDeviceProfile(String entityName, String description){
|
||||||
|
DeviceProfile deviceProfile = new DeviceProfile();
|
||||||
|
deviceProfile.setName(entityName);
|
||||||
|
deviceProfile.setDescription(description);
|
||||||
|
deviceProfile.setType(DeviceProfileType.DEFAULT);
|
||||||
|
deviceProfile.setTransportType(DeviceTransportType.DEFAULT);
|
||||||
|
deviceProfile.setProvisionType(DeviceProfileProvisionType.DISABLED);
|
||||||
|
DeviceProfileData deviceProfileData = new DeviceProfileData();
|
||||||
|
deviceProfileData.setConfiguration(new DefaultDeviceProfileConfiguration());
|
||||||
|
deviceProfileData.setProvisionConfiguration(new DisabledDeviceProfileProvisionConfiguration(null));
|
||||||
deviceProfileData.setTransportConfiguration(new DefaultDeviceProfileTransportConfiguration());
|
deviceProfileData.setTransportConfiguration(new DefaultDeviceProfileTransportConfiguration());
|
||||||
deviceProfile.setProfileData(deviceProfileData);
|
deviceProfile.setProfileData(deviceProfileData);
|
||||||
return deviceProfile;
|
return deviceProfile;
|
||||||
|
|||||||
@ -1,2 +1,3 @@
|
|||||||
tb.baseUrl=http://localhost:8080
|
tb.baseUrl=http://localhost:8080
|
||||||
|
tb.baseUiUrl=http://localhost:8080
|
||||||
tb.wsUrl=ws://localhost:8080
|
tb.wsUrl=ws://localhost:8080
|
||||||
@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||||
<!--
|
<!--
|
||||||
|
|
||||||
Copyright © 2016-2022 The Thingsboard Authors
|
Copyright © 2016-2022 The Thingsboard Authors
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user