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()) {
|
||||
return "https://host.docker.internal";
|
||||
}
|
||||
return getProperties().getProperty("tb.baseUrl");
|
||||
return getProperties().getProperty("tb.baseUiUrl");
|
||||
}
|
||||
|
||||
public static String getWebSocketUrl() {
|
||||
|
||||
@ -18,6 +18,7 @@ package org.thingsboard.server.msa.ui.base;
|
||||
import lombok.SneakyThrows;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.openqa.selenium.By;
|
||||
import org.openqa.selenium.JavascriptExecutor;
|
||||
import org.openqa.selenium.WebDriver;
|
||||
import org.openqa.selenium.WebDriverException;
|
||||
import org.openqa.selenium.WebElement;
|
||||
@ -35,11 +36,14 @@ abstract public class AbstractBasePage {
|
||||
protected WebDriver driver;
|
||||
protected WebDriverWait wait;
|
||||
protected Actions actions;
|
||||
protected JavascriptExecutor js;
|
||||
|
||||
|
||||
public AbstractBasePage(WebDriver driver) {
|
||||
this.driver = driver;
|
||||
this.wait = new WebDriverWait(driver, Duration.ofMillis(5000));
|
||||
this.actions = new Actions(driver);
|
||||
this.js = (JavascriptExecutor) driver;
|
||||
}
|
||||
|
||||
@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) {
|
||||
waitUntilNumberOfTabToBe(tabNumber);
|
||||
ArrayList<String> tabs = new ArrayList<>(driver.getWindowHandles());
|
||||
|
||||
@ -22,10 +22,12 @@ import lombok.SneakyThrows;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.io.FileUtils;
|
||||
import org.openqa.selenium.Dimension;
|
||||
import org.openqa.selenium.JavascriptExecutor;
|
||||
import org.openqa.selenium.OutputType;
|
||||
import org.openqa.selenium.TakesScreenshot;
|
||||
import org.openqa.selenium.WebDriver;
|
||||
import org.openqa.selenium.WebDriverException;
|
||||
import org.openqa.selenium.WebElement;
|
||||
import org.openqa.selenium.chrome.ChromeDriver;
|
||||
import org.openqa.selenium.chrome.ChromeOptions;
|
||||
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";
|
||||
protected static final PageLink pageLink = new PageLink(10);
|
||||
private static final ContainerTestSuite instance = ContainerTestSuite.getInstance();
|
||||
private JavascriptExecutor js;
|
||||
|
||||
@SneakyThrows
|
||||
@BeforeMethod
|
||||
@ -104,6 +107,11 @@ abstract public class AbstractDriverBaseTest extends AbstractContainerTest {
|
||||
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) {
|
||||
return testRestClient.getRuleChains(pageLink).getData().stream()
|
||||
.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.WebElement;
|
||||
import org.w3c.dom.html.HTMLInputElement;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class ProfilesPageElements extends OtherPageElementsHelper {
|
||||
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 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 PROFILE_NAMES = "//tbody/mat-row/mat-cell[contains(@class,'name')]";
|
||||
|
||||
protected String getDeviseProfileViewDeleteBtn() {
|
||||
return DEVISE_PROFILE_VIEW_DELETE_BTN;
|
||||
@ -99,4 +101,8 @@ public class ProfilesPageElements extends OtherPageElementsHelper {
|
||||
public WebElement deviceProfileViewDeleteBtn() {
|
||||
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;
|
||||
|
||||
import org.openqa.selenium.By;
|
||||
import org.openqa.selenium.JavascriptExecutor;
|
||||
import org.openqa.selenium.WebDriver;
|
||||
import org.openqa.selenium.WebElement;
|
||||
import org.openqa.selenium.support.ui.ExpectedConditions;
|
||||
|
||||
public class ProfilesPageHelper extends ProfilesPageElements {
|
||||
@ -30,6 +30,7 @@ public class ProfilesPageHelper extends ProfilesPageElements {
|
||||
private String mobileDashboard;
|
||||
private String queue;
|
||||
private String description;
|
||||
private String profile;
|
||||
|
||||
public void setName() {
|
||||
this.name = profileViewNameField().getAttribute("value");
|
||||
@ -48,9 +49,18 @@ public class ProfilesPageHelper extends ProfilesPageElements {
|
||||
}
|
||||
|
||||
public void setDescription() {
|
||||
scrollToElement(profileViewDescriptionField());
|
||||
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() {
|
||||
return this.name;
|
||||
}
|
||||
@ -71,6 +81,10 @@ public class ProfilesPageHelper extends ProfilesPageElements {
|
||||
return this.description;
|
||||
}
|
||||
|
||||
public String getProfileName() {
|
||||
return this.profile;
|
||||
}
|
||||
|
||||
public void enterName(String name) {
|
||||
addDeviceProfileNameField().click();
|
||||
addDeviceProfileNameField().sendKeys(name);
|
||||
@ -89,6 +103,7 @@ public class ProfilesPageHelper extends ProfilesPageElements {
|
||||
public void chooseQueue(String queue) {
|
||||
addDeviceProfileQueueField().click();
|
||||
entityFromList(queue).click();
|
||||
waitUntilAttributeContains(addDeviceProfileQueueField(), "aria-expanded", "false");
|
||||
}
|
||||
|
||||
public void enterDescription(String description) {
|
||||
@ -108,5 +123,14 @@ public class ProfilesPageHelper extends ProfilesPageElements {
|
||||
public boolean deleteDeviceProfileFromViewBtnIsNotDisplayed() {
|
||||
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;
|
||||
|
||||
import io.qameta.allure.Description;
|
||||
|
||||
@ -16,6 +16,7 @@
|
||||
package org.thingsboard.server.msa.ui.tests.deviceProfileSmoke;
|
||||
|
||||
import io.qameta.allure.Description;
|
||||
import org.openqa.selenium.JavascriptExecutor;
|
||||
import org.openqa.selenium.Keys;
|
||||
import org.testng.Assert;
|
||||
import org.testng.annotations.AfterMethod;
|
||||
@ -176,7 +177,7 @@ public class CreateDeviceProfileTest extends AbstractDriverBaseTest {
|
||||
|
||||
sideBarMenuView.openDeviceProfiles();
|
||||
profilesPage.allEntity().get(0).click();
|
||||
profilesPage.goToHelpPage();
|
||||
profilesPage.goToProfileHelpPage();
|
||||
|
||||
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;
|
||||
|
||||
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;
|
||||
|
||||
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.ProfilesPageHelper;
|
||||
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 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.TENANT_EMAIL;
|
||||
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 {
|
||||
|
||||
@ -42,24 +58,74 @@ public class DeviceProfileEditMenuTest extends AbstractDriverBaseTest {
|
||||
|
||||
@Test(priority = 10, groups = "smoke")
|
||||
@Description
|
||||
public void changeTitle() {
|
||||
public void changeName() {
|
||||
String name = ENTITY_NAME;
|
||||
String newName = "Changed" + getRandomNumber();
|
||||
testRestClient.postDeviceProfile(EntityPrototypes.defaultDeviceProfile(name));
|
||||
this.name = name;
|
||||
|
||||
sideBarMenuView.customerBtn().click();
|
||||
sideBarMenuView.openDeviceProfiles();
|
||||
profilesPage.entity(name).click();
|
||||
profilesPage.setHeaderName();
|
||||
String titleBefore = profilesPage.getHeaderName();
|
||||
profilesPage.editPencilBtn().click();
|
||||
jsClick(profilesPage.editPencilBtn());
|
||||
profilesPage.changeNameEditMenu(newName);
|
||||
profilesPage.doneBtnEditView().click();
|
||||
this.name = newName;
|
||||
profilesPage.setHeaderName();
|
||||
String titleAfter = profilesPage.getHeaderName();
|
||||
|
||||
|
||||
Assert.assertNotEquals(titleBefore, titleAfter);
|
||||
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;
|
||||
|
||||
import org.openqa.selenium.Keys;
|
||||
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.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 RULE_CHAIN_FIRST_WORD_NAME_PATH = "Root";
|
||||
private static final String CUSTOMER_FIRST_WORD_NAME_PATH = "A";
|
||||
private static final String DEFAULT_DEVICE_PROFILE_NAME = "Device Profile";
|
||||
|
||||
@DataProvider
|
||||
public static Object[][] ruleChainNameForSearchByFirstAndSecondWord() {
|
||||
@ -74,4 +77,23 @@ public class DataProviderCredential {
|
||||
{CUSTOMER_FIRST_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.DeviceProfile;
|
||||
import org.thingsboard.server.common.data.DeviceProfileProvisionType;
|
||||
import org.thingsboard.server.common.data.DeviceProfileType;
|
||||
import org.thingsboard.server.common.data.DeviceTransportType;
|
||||
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.DeviceProfileConfiguration;
|
||||
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;
|
||||
|
||||
public class EntityPrototypes {
|
||||
@ -43,8 +47,25 @@ public class EntityPrototypes {
|
||||
deviceProfile.setName(entityName);
|
||||
deviceProfile.setType(DeviceProfileType.DEFAULT);
|
||||
deviceProfile.setTransportType(DeviceTransportType.DEFAULT);
|
||||
deviceProfile.setProvisionType(DeviceProfileProvisionType.DISABLED);
|
||||
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());
|
||||
deviceProfile.setProfileData(deviceProfileData);
|
||||
return deviceProfile;
|
||||
|
||||
@ -1,2 +1,3 @@
|
||||
tb.baseUrl=http://localhost:8080
|
||||
tb.baseUiUrl=http://localhost:8080
|
||||
tb.wsUrl=ws://localhost:8080
|
||||
@ -1,7 +1,7 @@
|
||||
<?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");
|
||||
you may not use this file except in compliance with the License.
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user