diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/TestProperties.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/TestProperties.java index b5d91647c1..aac6748781 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/TestProperties.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/TestProperties.java @@ -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() { diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/base/AbstractBasePage.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/base/AbstractBasePage.java index 169d621773..dc8f5eadfe 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/base/AbstractBasePage.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/base/AbstractBasePage.java @@ -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 tabs = new ArrayList<>(driver.getWindowHandles()); diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/base/AbstractDriverBaseTest.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/base/AbstractDriverBaseTest.java index dfc27f7563..b8678912f7 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/base/AbstractDriverBaseTest.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/base/AbstractDriverBaseTest.java @@ -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); diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/ProfilesPageElements.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/ProfilesPageElements.java index 16b986a159..0dde961ac9 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/ProfilesPageElements.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/ProfilesPageElements.java @@ -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 profileNames() { + return waitUntilElementsToBeClickable(PROFILE_NAMES); + } } \ No newline at end of file diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/ProfilesPageHelper.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/ProfilesPageHelper.java index 66afee2b44..b9d9f53608 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/ProfilesPageHelper.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/ProfilesPageHelper.java @@ -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()); + } +} diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/deviceProfileSmoke/CreateDeviceProfileImportTest.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/deviceProfileSmoke/CreateDeviceProfileImportTest.java index 421b8ed2c4..e9a7d4e171 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/deviceProfileSmoke/CreateDeviceProfileImportTest.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/deviceProfileSmoke/CreateDeviceProfileImportTest.java @@ -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; diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/deviceProfileSmoke/CreateDeviceProfileTest.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/deviceProfileSmoke/CreateDeviceProfileTest.java index 31c895d939..b03858d65d 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/deviceProfileSmoke/CreateDeviceProfileTest.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/deviceProfileSmoke/CreateDeviceProfileTest.java @@ -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)); } diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/deviceProfileSmoke/DeleteDeviceProfileTest.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/deviceProfileSmoke/DeleteDeviceProfileTest.java index e2ef96c5cd..409a94c4e1 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/deviceProfileSmoke/DeleteDeviceProfileTest.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/deviceProfileSmoke/DeleteDeviceProfileTest.java @@ -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; diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/deviceProfileSmoke/DeviceProfileEditMenuTest.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/deviceProfileSmoke/DeviceProfileEditMenuTest.java index deb30959d3..f1ac6c6d8f 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/deviceProfileSmoke/DeviceProfileEditMenuTest.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/deviceProfileSmoke/DeviceProfileEditMenuTest.java @@ -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); + } } diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/deviceProfileSmoke/SearchDeviceProfileTest.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/deviceProfileSmoke/SearchDeviceProfileTest.java new file mode 100644 index 0000000000..350d11b865 --- /dev/null +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/deviceProfileSmoke/SearchDeviceProfileTest.java @@ -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))); + } +} diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/deviceProfileSmoke/SortByNameTest.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/deviceProfileSmoke/SortByNameTest.java new file mode 100644 index 0000000000..45e824a4bc --- /dev/null +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/deviceProfileSmoke/SortByNameTest.java @@ -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); + } +} diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/utils/DataProviderCredential.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/utils/DataProviderCredential.java index 5536338fe5..70e393bd9d 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/utils/DataProviderCredential.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/utils/DataProviderCredential.java @@ -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, ""}}; + } } diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/utils/EntityPrototypes.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/utils/EntityPrototypes.java index b26b547432..bc1e8d3190 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/utils/EntityPrototypes.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/utils/EntityPrototypes.java @@ -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; diff --git a/msa/black-box-tests/src/test/resources/config.properties b/msa/black-box-tests/src/test/resources/config.properties index 419c73185d..4d8a0880a9 100644 --- a/msa/black-box-tests/src/test/resources/config.properties +++ b/msa/black-box-tests/src/test/resources/config.properties @@ -1,2 +1,3 @@ tb.baseUrl=http://localhost:8080 -tb.wsUrl=ws://localhost:8080 +tb.baseUiUrl=http://localhost:8080 +tb.wsUrl=ws://localhost:8080 \ No newline at end of file diff --git a/msa/black-box-tests/src/test/resources/smokesProfiles.xml b/msa/black-box-tests/src/test/resources/smokesProfiles.xml index 0cd79e4c79..43dd2b917a 100644 --- a/msa/black-box-tests/src/test/resources/smokesProfiles.xml +++ b/msa/black-box-tests/src/test/resources/smokesProfiles.xml @@ -1,7 +1,7 @@