From 1ff1b7c1dd103b95da0c805f06901c8104722473 Mon Sep 17 00:00:00 2001 From: Seraphym-Tuhai Date: Mon, 3 Apr 2023 17:23:08 +0300 Subject: [PATCH 1/8] assign, reassign tests --- .../server/msa/TestRestClient.java | 41 ++++++++++- .../server/msa/ui/pages/AlarmElements.java | 26 +++++++ .../server/msa/ui/pages/AlarmHelper.java | 14 ++++ .../msa/ui/pages/DevicePageElements.java | 21 ++++++ .../server/msa/ui/pages/DevicePageHelper.java | 14 ++++ .../msa/ui/pages/SideBarMenuViewElements.java | 15 ++++ .../msa/ui/pages/SideBarMenuViewHelper.java | 20 +++++ .../server/msa/ui/tests/AssignDetailsTab.java | 73 +++++++++++++++++++ .../msa/ui/utils/DataProviderCredential.java | 7 ++ .../server/msa/ui/utils/EntityPrototypes.java | 32 ++++++++ 10 files changed, 261 insertions(+), 2 deletions(-) create mode 100644 msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/AlarmElements.java create mode 100644 msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/AlarmHelper.java create mode 100644 msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/DevicePageElements.java create mode 100644 msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/DevicePageHelper.java create mode 100644 msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/AssignDetailsTab.java diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/TestRestClient.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/TestRestClient.java index a030f3a8c9..a014dbee07 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/TestRestClient.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/TestRestClient.java @@ -29,13 +29,17 @@ import io.restassured.specification.RequestSpecification; import org.thingsboard.server.common.data.Customer; import org.thingsboard.server.common.data.Device; import org.thingsboard.server.common.data.DeviceProfile; +import org.thingsboard.server.common.data.User; +import org.thingsboard.server.common.data.alarm.Alarm; import org.thingsboard.server.common.data.asset.AssetProfile; +import org.thingsboard.server.common.data.id.AlarmId; import org.thingsboard.server.common.data.id.AssetProfileId; import org.thingsboard.server.common.data.id.CustomerId; import org.thingsboard.server.common.data.id.DeviceId; import org.thingsboard.server.common.data.id.DeviceProfileId; import org.thingsboard.server.common.data.id.EntityId; import org.thingsboard.server.common.data.id.RuleChainId; +import org.thingsboard.server.common.data.id.UserId; import org.thingsboard.server.common.data.page.PageData; import org.thingsboard.server.common.data.page.PageLink; import org.thingsboard.server.common.data.relation.EntityRelation; @@ -178,7 +182,7 @@ public class TestRestClient { } public JsonPath postProvisionRequest(String provisionRequest) { - return given().spec(requestSpec) + return given().spec(requestSpec) .body(provisionRequest) .post("/api/v1/provision") .getBody() @@ -293,7 +297,7 @@ public class TestRestClient { } public DeviceProfile getDeviceProfileById(DeviceProfileId deviceProfileId) { - return given().spec(requestSpec).get("/api/deviceProfile/{deviceProfileId}", deviceProfileId.getId()) + return given().spec(requestSpec).get("/api/deviceProfile/{deviceProfileId}", deviceProfileId.getId()) .then() .assertThat() .statusCode(HTTP_OK) @@ -388,6 +392,39 @@ public class TestRestClient { }); } + public Alarm postAlarm(Alarm alarm) { + return given().spec(requestSpec) + .body(alarm) + .post("/api/alarm") + .then() + .statusCode(HTTP_OK) + .extract() + .as(Alarm.class); + } + + public void deleteAlarm(AlarmId alarmId) { + given().spec(requestSpec) + .delete("/api/alarm/{alarmId}", alarmId.getId()) + .then() + .statusCode(HTTP_OK); + } + + public User postUser(User user) { + return given().spec(requestSpec) + .body(user) + .post("/api/user?sendActivationMail=false") + .then() + .statusCode(HTTP_OK) + .extract() + .as(User.class); + } + + public void deleteUser(UserId userId) { + given().spec(requestSpec) + .delete("/api/user/{userId}", userId.getId()) + .then() + .statusCode(HTTP_OK); + } public String getToken() { return token; } diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/AlarmElements.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/AlarmElements.java new file mode 100644 index 0000000000..d3528b0789 --- /dev/null +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/AlarmElements.java @@ -0,0 +1,26 @@ +package org.thingsboard.server.msa.ui.pages; + +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; + +public class AlarmElements extends OtherPageElements{ + public AlarmElements(WebDriver driver) { + super(driver); + } + + private static final String ASSIGN_BTN = "//mat-icon[contains(text(),'keyboard_arrow_down')]/parent::button"; + private static final String USER_ASSIGN_DROPDOWN = "//div[contains(@class,'tb-assignee')]//span[contains(text(),'%s')]"; + private static final String ASSIGN_USER_DISPLAY_NAME = "//span[text()='%s']/ancestor::mat-row//span[@class='user-display-name']"; + + public WebElement assignBtn() { + return waitUntilElementToBeClickable(ASSIGN_BTN); + } + + public WebElement userFromAssignDropDown(String userEmail) { + return waitUntilElementToBeClickable(String.format(USER_ASSIGN_DROPDOWN, userEmail)); + } + + public WebElement assignUserDisplayName(String userEmail) { + return waitUntilElementToBeClickable(String.format(ASSIGN_USER_DISPLAY_NAME, userEmail)); + } +} diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/AlarmHelper.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/AlarmHelper.java new file mode 100644 index 0000000000..bef84d98ee --- /dev/null +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/AlarmHelper.java @@ -0,0 +1,14 @@ +package org.thingsboard.server.msa.ui.pages; + +import org.openqa.selenium.WebDriver; + +public class AlarmHelper extends AlarmElements { + public AlarmHelper(WebDriver driver) { + super(driver); + } + + public void assignTo(String user) { + jsClick(assignBtn()); + userFromAssignDropDown(user).click(); + } +} diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/DevicePageElements.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/DevicePageElements.java new file mode 100644 index 0000000000..411e5545ea --- /dev/null +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/DevicePageElements.java @@ -0,0 +1,21 @@ +package org.thingsboard.server.msa.ui.pages; + +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; + +public class DevicePageElements extends OtherPageElements{ + public DevicePageElements(WebDriver driver) { + super(driver); + } + + private static final String DEVICE = "//table//span[text()='%s']"; + private static final String DEVICE_DETAILS_ALARMS = "//tb-details-panel//span[text()='Alarms']"; + + public WebElement device(String deviceName) { + return waitUntilElementToBeClickable(String.format(DEVICE, deviceName)); + } + + public WebElement deviceDetailsAlarmsBtn() { + return waitUntilElementToBeClickable(DEVICE_DETAILS_ALARMS); + } +} diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/DevicePageHelper.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/DevicePageHelper.java new file mode 100644 index 0000000000..0377b6e207 --- /dev/null +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/DevicePageHelper.java @@ -0,0 +1,14 @@ +package org.thingsboard.server.msa.ui.pages; + +import org.openqa.selenium.WebDriver; + +public class DevicePageHelper extends DevicePageElements{ + public DevicePageHelper(WebDriver driver) { + super(driver); + } + + public void openDeviceAlarms(String deviceName) { + device(deviceName).click(); + deviceDetailsAlarmsBtn().click(); + } +} diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/SideBarMenuViewElements.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/SideBarMenuViewElements.java index ab8ee9bf55..5ecf27b5bd 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/SideBarMenuViewElements.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/SideBarMenuViewElements.java @@ -30,6 +30,13 @@ public class SideBarMenuViewElements extends AbstractBasePage { private static final String PROFILES_BTN = "//mat-toolbar//mat-icon[text()='badge']/ancestor::tb-menu-toggle"; private static final String DEVICE_PROFILE_BTN = "//mat-toolbar//a[@href='/profiles/deviceProfiles']"; private static final String ASSET_PROFILE_BTN = "//mat-toolbar//a[@href='/profiles/assetProfiles']"; + private static final String ALARMS_BTN = "//mat-toolbar//a[@href='/alarms']"; + private static final String ENTITIES_DROPDOWN = "//mat-toolbar//mat-icon[text()='category']/ancestor::a//span[contains(@class,'pull-right')]"; + private static final String DEVICES_BTN = "//ul[@id='docs-menu-entity.entities']//span[text()='Devices']"; + + public WebElement entitiesDropdown() { + return waitUntilElementToBeClickable(ENTITIES_DROPDOWN); + } public WebElement ruleChainsBtn() { return waitUntilElementToBeClickable(RULE_CHAINS_BTN); @@ -54,4 +61,12 @@ public class SideBarMenuViewElements extends AbstractBasePage { public WebElement assetProfileBtn() { return waitUntilElementToBeClickable(ASSET_PROFILE_BTN); } + + public WebElement alarmsBtn() { + return waitUntilElementToBeClickable(ALARMS_BTN); + } + + public WebElement devicesBtn() { + return waitUntilElementToBeClickable(DEVICES_BTN); + } } \ No newline at end of file diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/SideBarMenuViewHelper.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/SideBarMenuViewHelper.java index 4d56689809..92848ff68c 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/SideBarMenuViewHelper.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/SideBarMenuViewHelper.java @@ -16,6 +16,7 @@ package org.thingsboard.server.msa.ui.pages; import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; public class SideBarMenuViewHelper extends SideBarMenuViewElements { public SideBarMenuViewHelper(WebDriver driver) { @@ -31,4 +32,23 @@ public class SideBarMenuViewHelper extends SideBarMenuViewElements { profilesBtn().click(); assetProfileBtn().click(); } + + public void goToDevicesPage() { + openEntitiesDropdown(); + devicesBtn().click(); + } + + public void openEntitiesDropdown() { + if (entitiesDropdownIsClose()) { + entitiesDropdown().click(); + } + } + + public boolean entitiesDropdownIsClose() { + return dropdownIsClose(entitiesDropdown()); + } + + private boolean dropdownIsClose(WebElement dropdown) { + return !dropdown.getAttribute("class").contains("tb-toggled"); + } } \ No newline at end of file diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/AssignDetailsTab.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/AssignDetailsTab.java new file mode 100644 index 0000000000..420fe17a86 --- /dev/null +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/AssignDetailsTab.java @@ -0,0 +1,73 @@ +package org.thingsboard.server.msa.ui.tests; + +import org.testng.Assert; +import org.testng.annotations.AfterClass; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; +import org.thingsboard.server.common.data.id.AlarmId; +import org.thingsboard.server.common.data.id.DeviceId; +import org.thingsboard.server.common.data.id.UserId; +import org.thingsboard.server.msa.prototypes.DevicePrototypes; +import org.thingsboard.server.msa.ui.base.AbstractDriverBaseTest; +import org.thingsboard.server.msa.ui.pages.AlarmHelper; +import org.thingsboard.server.msa.ui.pages.DevicePageHelper; +import org.thingsboard.server.msa.ui.pages.LoginPageHelper; +import org.thingsboard.server.msa.ui.pages.SideBarMenuViewHelper; +import org.thingsboard.server.msa.ui.utils.DataProviderCredential; +import org.thingsboard.server.msa.ui.utils.EntityPrototypes; + +public class AssignDetailsTab extends AbstractDriverBaseTest { + + AlarmId alarmId; + DeviceId deviceId; + UserId userId; + String deviceName; + SideBarMenuViewHelper sideBarMenuView; + AlarmHelper alarmPage; + DevicePageHelper devicePage; + + @BeforeClass + public void generateAlarm() { + new LoginPageHelper(driver).authorizationTenant(); + sideBarMenuView = new SideBarMenuViewHelper(driver); + alarmPage = new AlarmHelper(driver); + devicePage = new DevicePageHelper(driver); + } + + @AfterMethod + public void deleteAlarm() { + testRestClient.deleteAlarm(alarmId); + testRestClient.deleteDevice(deviceId); + if (userId != null) { + testRestClient.deleteUser(userId); + } + } + + @Test(dataProviderClass = DataProviderCredential.class, dataProvider = "assignTo") + public void assignAlarmTo(String user) { + deviceName = testRestClient.postDevice("", DevicePrototypes.defaultDevicePrototype("")).getName(); + deviceId = testRestClient.getDeviceByName(deviceName).getId(); + alarmId = testRestClient.postAlarm(EntityPrototypes.defaultAlarm(deviceId)).getId(); + + sideBarMenuView.goToDevicesPage(); + devicePage.openDeviceAlarms(deviceName); + alarmPage.assignTo(user); + + Assert.assertTrue(alarmPage.assignUserDisplayName(user).isDisplayed()); + } + + @Test + public void reassignAlarm() { + userId = testRestClient.postUser(EntityPrototypes.defaultUser(getCustomerByName("Customer A").getId())).getId(); + deviceName = testRestClient.postDevice("", DevicePrototypes.defaultDevicePrototype("")).getName(); + deviceId = testRestClient.getDeviceByName(deviceName).getId(); + alarmId = testRestClient.postAlarm(EntityPrototypes.defaultAlarm(deviceId, userId)).getId(); + + sideBarMenuView.goToDevicesPage(); + devicePage.openDeviceAlarms(deviceName); + alarmPage.assignTo("customer@thingsboard.org"); + + Assert.assertTrue(alarmPage.assignUserDisplayName("customer@thingsboard.org").isDisplayed()); + } +} 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 73783544a1..a0188665c8 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 @@ -149,4 +149,11 @@ public class DataProviderCredential { {description, newDescription, description + newDescription}, {description, Keys.CONTROL + "A" + Keys.BACK_SPACE, ""}}; } + + @DataProvider + public static Object[][] assignTo() { + return new Object[][]{ + {Const.TENANT_EMAIL}, + {"customer@thingsboard.org"}}; + } } 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 c131c0fb25..84f28bb6f2 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 @@ -21,12 +21,19 @@ 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.User; +import org.thingsboard.server.common.data.alarm.Alarm; +import org.thingsboard.server.common.data.alarm.AlarmSeverity; import org.thingsboard.server.common.data.asset.AssetProfile; 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.DeviceProfileData; import org.thingsboard.server.common.data.device.profile.DisabledDeviceProfileProvisionConfiguration; +import org.thingsboard.server.common.data.id.CustomerId; +import org.thingsboard.server.common.data.id.EntityId; +import org.thingsboard.server.common.data.id.UserId; import org.thingsboard.server.common.data.rule.RuleChain; +import org.thingsboard.server.common.data.security.Authority; public class EntityPrototypes { @@ -97,4 +104,29 @@ public class EntityPrototypes { assetProfile.setDescription(description); return assetProfile; } + + public static Alarm defaultAlarm(EntityId id) { + Alarm alarm = new Alarm(); + alarm.setType("default"); + alarm.setOriginator(id); + alarm.setSeverity(AlarmSeverity.CRITICAL); + return alarm; + } + + public static Alarm defaultAlarm(EntityId id, UserId userId) { + Alarm alarm = new Alarm(); + alarm.setType("default"); + alarm.setOriginator(id); + alarm.setSeverity(AlarmSeverity.CRITICAL); + alarm.setAssigneeId(userId); + return alarm; + } + + public static User defaultUser(CustomerId customerId) { + User user = new User(); + user.setEmail("test@thingsboard.org"); + user.setCustomerId(customerId); + user.setAuthority(Authority.CUSTOMER_USER); + return user; + } } From 32c6b7385f1fa9cde915a3d3338a39483a51401e Mon Sep 17 00:00:00 2001 From: Seraphym-Tuhai Date: Mon, 10 Apr 2023 09:07:22 +0300 Subject: [PATCH 2/8] add tests on search --- .../server/msa/ui/pages/AlarmElements.java | 18 ++++++-- .../server/msa/ui/pages/AlarmHelper.java | 18 ++++++++ .../msa/ui/pages/DevicePageElements.java | 7 ++- .../server/msa/ui/pages/DevicePageHelper.java | 6 ++- .../server/msa/ui/tests/AssignDetailsTab.java | 45 +++++++++++++++++-- .../server/msa/ui/utils/EntityPrototypes.java | 9 ++++ 6 files changed, 93 insertions(+), 10 deletions(-) diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/AlarmElements.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/AlarmElements.java index d3528b0789..48300429f6 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/AlarmElements.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/AlarmElements.java @@ -3,14 +3,18 @@ package org.thingsboard.server.msa.ui.pages; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; +import java.util.List; + public class AlarmElements extends OtherPageElements{ public AlarmElements(WebDriver driver) { super(driver); } private static final String ASSIGN_BTN = "//mat-icon[contains(text(),'keyboard_arrow_down')]/parent::button"; - private static final String USER_ASSIGN_DROPDOWN = "//div[contains(@class,'tb-assignee')]//span[contains(text(),'%s')]"; - private static final String ASSIGN_USER_DISPLAY_NAME = "//span[text()='%s']/ancestor::mat-row//span[@class='user-display-name']"; + private static final String USER_ASSIGN_DROPDOWN = "//div[@class='user-display-name']/span[contains(text(),'%s')]"; + private static final String ASSIGN_USERS_DISPLAY_NAME = "//div[@class='user-display-name']/span"; + private static final String ASSIGN_USER_DISPLAY_NAME = "//span[@class='user-display-name'][contains(text(),'%s')]"; + private static final String SEARCH_FIELD = "//input[@placeholder='Search users']"; public WebElement assignBtn() { return waitUntilElementToBeClickable(ASSIGN_BTN); @@ -20,7 +24,15 @@ public class AlarmElements extends OtherPageElements{ return waitUntilElementToBeClickable(String.format(USER_ASSIGN_DROPDOWN, userEmail)); } - public WebElement assignUserDisplayName(String userEmail) { + public WebElement assignedUser(String userEmail) { return waitUntilElementToBeClickable(String.format(ASSIGN_USER_DISPLAY_NAME, userEmail)); } + + public List assignUsers() { + return waitUntilElementsToBeClickable(ASSIGN_USERS_DISPLAY_NAME); + } + + public WebElement searchUserField() { + return waitUntilElementToBeClickable(SEARCH_FIELD); + } } diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/AlarmHelper.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/AlarmHelper.java index bef84d98ee..4075a89ad1 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/AlarmHelper.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/AlarmHelper.java @@ -1,6 +1,11 @@ package org.thingsboard.server.msa.ui.pages; import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; public class AlarmHelper extends AlarmElements { public AlarmHelper(WebDriver driver) { @@ -11,4 +16,17 @@ public class AlarmHelper extends AlarmElements { jsClick(assignBtn()); userFromAssignDropDown(user).click(); } + + private List users; + + public void setUsers() { + users = assignUsers() + .stream() + .map(WebElement::getText) + .collect(Collectors.toList()); + } + + public List getUsers() { + return users; + } } diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/DevicePageElements.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/DevicePageElements.java index 411e5545ea..ba766ef3fd 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/DevicePageElements.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/DevicePageElements.java @@ -9,7 +9,8 @@ public class DevicePageElements extends OtherPageElements{ } private static final String DEVICE = "//table//span[text()='%s']"; - private static final String DEVICE_DETAILS_ALARMS = "//tb-details-panel//span[text()='Alarms']"; + private static final String DEVICE_DETAILS_VIEW = "//tb-details-panel"; + private static final String DEVICE_DETAILS_ALARMS = DEVICE_DETAILS_VIEW + "//span[text()='Alarms']"; public WebElement device(String deviceName) { return waitUntilElementToBeClickable(String.format(DEVICE, deviceName)); @@ -18,4 +19,8 @@ public class DevicePageElements extends OtherPageElements{ public WebElement deviceDetailsAlarmsBtn() { return waitUntilElementToBeClickable(DEVICE_DETAILS_ALARMS); } + + public WebElement deviceDetailsView() { + return waitUntilPresenceOfElementLocated(DEVICE_DETAILS_VIEW); + } } diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/DevicePageHelper.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/DevicePageHelper.java index 0377b6e207..19716d3fb6 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/DevicePageHelper.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/DevicePageHelper.java @@ -2,13 +2,15 @@ package org.thingsboard.server.msa.ui.pages; import org.openqa.selenium.WebDriver; -public class DevicePageHelper extends DevicePageElements{ +public class DevicePageHelper extends DevicePageElements { public DevicePageHelper(WebDriver driver) { super(driver); } public void openDeviceAlarms(String deviceName) { - device(deviceName).click(); + if (!deviceDetailsView().isDisplayed()) { + device(deviceName).click(); + } deviceDetailsAlarmsBtn().click(); } } diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/AssignDetailsTab.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/AssignDetailsTab.java index 420fe17a86..cdf10356b3 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/AssignDetailsTab.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/AssignDetailsTab.java @@ -1,7 +1,6 @@ package org.thingsboard.server.msa.ui.tests; import org.testng.Assert; -import org.testng.annotations.AfterClass; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; @@ -17,6 +16,8 @@ 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.assertj.core.api.Assertions.assertThat; + public class AssignDetailsTab extends AbstractDriverBaseTest { AlarmId alarmId; @@ -54,12 +55,13 @@ public class AssignDetailsTab extends AbstractDriverBaseTest { devicePage.openDeviceAlarms(deviceName); alarmPage.assignTo(user); - Assert.assertTrue(alarmPage.assignUserDisplayName(user).isDisplayed()); + Assert.assertTrue(alarmPage.assignedUser(user).isDisplayed()); } @Test public void reassignAlarm() { - userId = testRestClient.postUser(EntityPrototypes.defaultUser(getCustomerByName("Customer A").getId())).getId(); + testRestClient.postCustomer(EntityPrototypes.defaultCustomerPrototype("TestCustomer")); + userId = testRestClient.postUser(EntityPrototypes.defaultUser(getCustomerByName("TestCustomer").getId())).getId(); deviceName = testRestClient.postDevice("", DevicePrototypes.defaultDevicePrototype("")).getName(); deviceId = testRestClient.getDeviceByName(deviceName).getId(); alarmId = testRestClient.postAlarm(EntityPrototypes.defaultAlarm(deviceId, userId)).getId(); @@ -68,6 +70,41 @@ public class AssignDetailsTab extends AbstractDriverBaseTest { devicePage.openDeviceAlarms(deviceName); alarmPage.assignTo("customer@thingsboard.org"); - Assert.assertTrue(alarmPage.assignUserDisplayName("customer@thingsboard.org").isDisplayed()); + Assert.assertTrue(alarmPage.assignedUser("customer@thingsboard.org").isDisplayed()); + } + + @Test + public void searchByEmail() { + deviceName = testRestClient.postDevice("", DevicePrototypes.defaultDevicePrototype("")).getName(); + deviceId = testRestClient.getDeviceByName(deviceName).getId(); + alarmId = testRestClient.postAlarm(EntityPrototypes.defaultAlarm(deviceId)).getId(); + + sideBarMenuView.goToDevicesPage(); + devicePage.openDeviceAlarms(deviceName); + alarmPage.assignBtn().click(); + alarmPage.searchUserField().sendKeys("customer@thingsboard.org"); + alarmPage.setUsers(); + + assertThat(alarmPage.getUsers()).contains("customer@thingsboard.org"); + alarmPage.assignUsers().forEach(u -> assertThat(u.isDisplayed()).isTrue()); + } + + @Test + public void searchByName() { + String name = "usik"; + + userId = testRestClient.postUser(EntityPrototypes.defaultUser(getCustomerByName("Customer A").getId(), name)).getId(); + deviceName = testRestClient.postDevice("", DevicePrototypes.defaultDevicePrototype("")).getName(); + deviceId = testRestClient.getDeviceByName(deviceName).getId(); + alarmId = testRestClient.postAlarm(EntityPrototypes.defaultAlarm(deviceId)).getId(); + + sideBarMenuView.goToDevicesPage(); + devicePage.openDeviceAlarms(deviceName); + alarmPage.assignBtn().click(); + alarmPage.searchUserField().sendKeys(name); + alarmPage.setUsers(); + + assertThat(alarmPage.getUsers()).contains(name); + alarmPage.assignUsers().forEach(u -> assertThat(u.isDisplayed()).isTrue()); } } 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 84f28bb6f2..bce4373191 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 @@ -129,4 +129,13 @@ public class EntityPrototypes { user.setAuthority(Authority.CUSTOMER_USER); return user; } + + public static User defaultUser(CustomerId customerId, String name) { + User user = new User(); + user.setEmail("test@thingsboard.org"); + user.setFirstName(name); + user.setCustomerId(customerId); + user.setAuthority(Authority.CUSTOMER_USER); + return user; + } } From 982f6e23fb307347dd4979f4206f2ac3fc1b897f Mon Sep 17 00:00:00 2001 From: Seraphym-Tuhai Date: Thu, 13 Apr 2023 10:57:23 +0300 Subject: [PATCH 3/8] add test on propagated alarm --- .../server/msa/TestRestClient.java | 13 ++ .../ui/pages/AlarmDetailsViewElements.java | 32 +++ .../msa/ui/pages/AlarmDetailsViewHelper.java | 19 ++ .../server/msa/ui/pages/AlarmElements.java | 40 +++- .../server/msa/ui/pages/AlarmHelper.java | 36 ++- .../msa/ui/pages/CustomerPageElements.java | 10 +- .../msa/ui/pages/DevicePageElements.java | 15 ++ .../server/msa/ui/pages/DevicePageHelper.java | 15 ++ .../server/msa/ui/pages/LoginPageHelper.java | 14 +- .../server/msa/ui/tests/AssignDetailsTab.java | 110 --------- .../AbstractAssignByCustomerTest.java | 6 + .../ui/tests/assignee/AbstractAssignTest.java | 117 ++++++++++ .../tests/assignee/AssignByCustomerTest.java | 4 + .../ui/tests/assignee/AssignDetailsTab.java | 209 ++++++++++++++++++ .../msa/ui/utils/DataProviderCredential.java | 6 - .../server/msa/ui/utils/EntityPrototypes.java | 55 ++++- 16 files changed, 564 insertions(+), 137 deletions(-) create mode 100644 msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/AlarmDetailsViewElements.java create mode 100644 msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/AlarmDetailsViewHelper.java delete mode 100644 msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/AssignDetailsTab.java create mode 100644 msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/assignee/AbstractAssignByCustomerTest.java create mode 100644 msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/assignee/AbstractAssignTest.java create mode 100644 msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/assignee/AssignByCustomerTest.java create mode 100644 msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/assignee/AssignDetailsTab.java diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/TestRestClient.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/TestRestClient.java index a014dbee07..45829e7d1e 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/TestRestClient.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/TestRestClient.java @@ -29,6 +29,7 @@ import io.restassured.specification.RequestSpecification; import org.thingsboard.server.common.data.Customer; import org.thingsboard.server.common.data.Device; import org.thingsboard.server.common.data.DeviceProfile; +import org.thingsboard.server.common.data.Tenant; import org.thingsboard.server.common.data.User; import org.thingsboard.server.common.data.alarm.Alarm; import org.thingsboard.server.common.data.asset.AssetProfile; @@ -432,4 +433,16 @@ public class TestRestClient { public String getRefreshToken() { return refreshToken; } + + public PageData getTenants(PageLink pageLink) { + Map params = new HashMap<>(); + addPageLinkToParam(params, pageLink); + return given().spec(requestSpec).queryParams(params) + .get("/api/tenants") + .then() + .statusCode(HTTP_OK) + .extract() + .as(new TypeRef>() { + }); + } } diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/AlarmDetailsViewElements.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/AlarmDetailsViewElements.java new file mode 100644 index 0000000000..44f41aff2c --- /dev/null +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/AlarmDetailsViewElements.java @@ -0,0 +1,32 @@ +package org.thingsboard.server.msa.ui.pages; + +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.thingsboard.server.msa.ui.base.AbstractBasePage; + +public class AlarmDetailsViewElements extends AbstractBasePage { + public AlarmDetailsViewElements(WebDriver driver) { + super(driver); + } + + private static final String ASSIGN_FIELD = "//mat-label[contains(text(),'Assignee')]/parent::label/following-sibling::input"; + private static final String USER_FROM_DROP_DOWN = "//div[@class='user-display-name']/span[text() = '%s']"; + private static final String CLOSE_VIEW_BTN = "//mat-dialog-container//mat-icon[contains(text(),'close')]/parent::button"; + private static final String UNASSIGNED_BTN = "//div[@role='listbox']//mat-icon[text() = 'account_circle']/following-sibling::span"; + + public WebElement assignField() { + return waitUntilElementToBeClickable(ASSIGN_FIELD); + } + + public WebElement userFromAssignDropdown(String emailOrName) { + return waitUntilElementToBeClickable(String.format(USER_FROM_DROP_DOWN, emailOrName)); + } + + public WebElement closeViewBtn() { + return waitUntilElementToBeClickable(CLOSE_VIEW_BTN); + } + + public WebElement unassignedBtn() { + return waitUntilElementToBeClickable(UNASSIGNED_BTN); + } +} diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/AlarmDetailsViewHelper.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/AlarmDetailsViewHelper.java new file mode 100644 index 0000000000..b658164b37 --- /dev/null +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/AlarmDetailsViewHelper.java @@ -0,0 +1,19 @@ +package org.thingsboard.server.msa.ui.pages; + +import org.openqa.selenium.WebDriver; + +public class AlarmDetailsViewHelper extends AlarmDetailsViewElements{ + public AlarmDetailsViewHelper(WebDriver driver) { + super(driver); + } + + public void assignAlarmTo(String emailOrName) { + assignField().click(); + userFromAssignDropdown(emailOrName).click(); + } + + public void unassignedAlarm() { + assignField().click(); + unassignedBtn().click(); + } +} diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/AlarmElements.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/AlarmElements.java index 48300429f6..ad3ccb748d 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/AlarmElements.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/AlarmElements.java @@ -1,3 +1,18 @@ +/** + * Copyright © 2016-2023 The Thingsboard Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package org.thingsboard.server.msa.ui.pages; import org.openqa.selenium.WebDriver; @@ -10,14 +25,17 @@ public class AlarmElements extends OtherPageElements{ super(driver); } - private static final String ASSIGN_BTN = "//mat-icon[contains(text(),'keyboard_arrow_down')]/parent::button"; - private static final String USER_ASSIGN_DROPDOWN = "//div[@class='user-display-name']/span[contains(text(),'%s')]"; - private static final String ASSIGN_USERS_DISPLAY_NAME = "//div[@class='user-display-name']/span"; + private static final String ASSIGN_BTN = "//span[text() = '%s']/ancestor::mat-row//mat-icon[contains(text(),'keyboard_arrow_down')]/parent::button"; + private static final String USER_ASSIGN_DROPDOWN = "//div[@class='user-display-name']/span[text() = '%s']"; + protected static final String ASSIGN_USERS_DISPLAY_NAME = "//div[@class='user-display-name']/span"; private static final String ASSIGN_USER_DISPLAY_NAME = "//span[@class='user-display-name'][contains(text(),'%s')]"; private static final String SEARCH_FIELD = "//input[@placeholder='Search users']"; + private static final String UNASSIGNED_BTN = "//div[@role='listbox']//mat-icon[text() = 'account_circle']/following-sibling::span"; + private static final String UNASSIGNED = "//span[text() = '%s']/ancestor::mat-row//span[@class='assignee-cell']/mat-icon[text() = 'account_circle']/following-sibling::span"; + private static final String ALARM_DETAILS_BTN = "//span[text() = '%s']/ancestor::mat-row//mat-icon[contains(text(),'more_horiz')]/parent::button"; - public WebElement assignBtn() { - return waitUntilElementToBeClickable(ASSIGN_BTN); + public WebElement assignBtn(String type) { + return waitUntilElementToBeClickable(String.format(ASSIGN_BTN, type)); } public WebElement userFromAssignDropDown(String userEmail) { @@ -35,4 +53,16 @@ public class AlarmElements extends OtherPageElements{ public WebElement searchUserField() { return waitUntilElementToBeClickable(SEARCH_FIELD); } + + public WebElement unassignedBtn() { + return waitUntilElementToBeClickable(UNASSIGNED_BTN); + } + + public WebElement unassigned(String alarmType) { + return waitUntilVisibilityOfElementLocated(String.format(UNASSIGNED, alarmType)); + } + + public WebElement alarmDetailsBtn(String alarmType) { + return waitUntilElementToBeClickable(String.format(ALARM_DETAILS_BTN, alarmType)); + } } diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/AlarmHelper.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/AlarmHelper.java index 4075a89ad1..7abb0006db 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/AlarmHelper.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/AlarmHelper.java @@ -1,9 +1,24 @@ +/** + * Copyright © 2016-2023 The Thingsboard Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package org.thingsboard.server.msa.ui.pages; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; +import org.thingsboard.server.msa.ui.utils.Const; -import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; @@ -12,11 +27,21 @@ public class AlarmHelper extends AlarmElements { super(driver); } - public void assignTo(String user) { - jsClick(assignBtn()); + public void assignAlarmTo(String alarmType, String user) { + jsClick(assignBtn(alarmType)); userFromAssignDropDown(user).click(); } + public void unassignedAlarm(String alarmType) { + assignBtn(alarmType).click(); + unassignedBtn().click(); + } + + public void searchAlarm(String alarmType, String emailOrName) { + assignBtn(alarmType).click(); + searchUserField().sendKeys(emailOrName); + } + private List users; public void setUsers() { @@ -29,4 +54,9 @@ public class AlarmHelper extends AlarmElements { public List getUsers() { return users; } + + public void assertUsersForAssignIsNotPresent() { + sleep(1); + elementsIsNotPresent(ASSIGN_USERS_DISPLAY_NAME); + } } diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/CustomerPageElements.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/CustomerPageElements.java index 1d69ddd5fc..90f51c4903 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/CustomerPageElements.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/CustomerPageElements.java @@ -32,14 +32,16 @@ public class CustomerPageElements extends OtherPageElementsHelper { private static final String TITLES = "//mat-cell[contains(@class,'cdk-column-title')]/span"; protected static final String EDIT_MENU_DASHBOARD_FIELD = "//input[@formcontrolname='dashboard']"; private static final String EDIT_MENU_DASHBOARD = "//div[@class='cdk-overlay-pane']//span/span[contains(text(),'%s')]"; - private static final String MANAGE_CUSTOMERS_USERS_BTN = ENTITY + "/ancestor::mat-row//mat-icon[contains(text(),' account_circle')]"; + private static final String MANAGE_CUSTOMERS_USERS_BTN = ENTITY + "/ancestor::mat-row//mat-icon[contains(text(),' account_circle')]/parent::button"; private static final String MANAGE_CUSTOMERS_ASSETS_BTN = ENTITY + "/ancestor::mat-row//mat-icon[contains(text(),' domain')]/parent::button"; private static final String MANAGE_CUSTOMERS_DEVICES_BTN = ENTITY + "/ancestor::mat-row//mat-icon[contains(text(),'devices_other')]/parent::button"; private static final String MANAGE_CUSTOMERS_DASHBOARDS_BTN = ENTITY + "/ancestor::mat-row//mat-icon[contains(text(),'dashboard')]/parent::button"; private static final String MANAGE_CUSTOMERS_EDGE_BTN = ENTITY + "/ancestor::mat-row//mat-icon[contains(text(),'router')]/parent::button"; private static final String ADD_USER_EMAIL = "//tb-add-user-dialog//input[@formcontrolname='email']"; private static final String ACTIVATE_WINDOW_OK_BTN = "//span[contains(text(),'OK')]"; - private static final String USER_LOGIN_BTN = "//mat-icon[@data-mat-icon-name='login']"; + private static final String USER_LOGIN_BTN = "//mat-icon[@data-mat-icon-name='login']/parent::button"; + private static final String USER_LOGIN_BTN_BY_EMAIL = "//mat-cell[contains(@class,'email')]/span[contains(text(),'%s')]" + + "/ancestor::mat-row//mat-icon[@data-mat-icon-name='login']/parent::button"; private static final String USERS_WIDGET = "//tb-widget"; private static final String SELECT_COUNTRY_MENU = "//mat-form-field//mat-select[@formcontrolname='country']"; private static final String COUNTRIES = "//span[@class='mdc-list-item__primary-text']"; @@ -148,6 +150,10 @@ public class CustomerPageElements extends OtherPageElementsHelper { return waitUntilElementToBeClickable(USER_LOGIN_BTN); } + public WebElement getUserLoginBtnByEmail(String email) { + return waitUntilElementToBeClickable(String.format(USER_LOGIN_BTN_BY_EMAIL, email)); + } + public WebElement usersWidget() { return waitUntilVisibilityOfElementLocated(USERS_WIDGET); } diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/DevicePageElements.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/DevicePageElements.java index ba766ef3fd..d8bb1b021e 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/DevicePageElements.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/DevicePageElements.java @@ -1,3 +1,18 @@ +/** + * Copyright © 2016-2023 The Thingsboard Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package org.thingsboard.server.msa.ui.pages; import org.openqa.selenium.WebDriver; diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/DevicePageHelper.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/DevicePageHelper.java index 19716d3fb6..12413641af 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/DevicePageHelper.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/DevicePageHelper.java @@ -1,3 +1,18 @@ +/** + * Copyright © 2016-2023 The Thingsboard Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package org.thingsboard.server.msa.ui.pages; import org.openqa.selenium.WebDriver; diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/LoginPageHelper.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/LoginPageHelper.java index 38a4a50207..5044ee1a65 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/LoginPageHelper.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/LoginPageHelper.java @@ -25,10 +25,18 @@ public class LoginPageHelper extends LoginPageElements { super(driver); } - public void authorizationTenant() { - emailField().sendKeys(Const.TENANT_EMAIL); - passwordField().sendKeys(Const.TENANT_PASSWORD); + public void login(String username, String password) { + emailField().sendKeys(username); + passwordField().sendKeys(password); submitBtn().click(); waitUntilUrlContainsText("/home"); } + + public void authorizationTenant() { + login(Const.TENANT_EMAIL, Const.TENANT_PASSWORD); + } + + public void authorizationCustomer() { + login("customer@thingsboard.org", "customer"); + } } diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/AssignDetailsTab.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/AssignDetailsTab.java deleted file mode 100644 index cdf10356b3..0000000000 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/AssignDetailsTab.java +++ /dev/null @@ -1,110 +0,0 @@ -package org.thingsboard.server.msa.ui.tests; - -import org.testng.Assert; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.thingsboard.server.common.data.id.AlarmId; -import org.thingsboard.server.common.data.id.DeviceId; -import org.thingsboard.server.common.data.id.UserId; -import org.thingsboard.server.msa.prototypes.DevicePrototypes; -import org.thingsboard.server.msa.ui.base.AbstractDriverBaseTest; -import org.thingsboard.server.msa.ui.pages.AlarmHelper; -import org.thingsboard.server.msa.ui.pages.DevicePageHelper; -import org.thingsboard.server.msa.ui.pages.LoginPageHelper; -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.assertj.core.api.Assertions.assertThat; - -public class AssignDetailsTab extends AbstractDriverBaseTest { - - AlarmId alarmId; - DeviceId deviceId; - UserId userId; - String deviceName; - SideBarMenuViewHelper sideBarMenuView; - AlarmHelper alarmPage; - DevicePageHelper devicePage; - - @BeforeClass - public void generateAlarm() { - new LoginPageHelper(driver).authorizationTenant(); - sideBarMenuView = new SideBarMenuViewHelper(driver); - alarmPage = new AlarmHelper(driver); - devicePage = new DevicePageHelper(driver); - } - - @AfterMethod - public void deleteAlarm() { - testRestClient.deleteAlarm(alarmId); - testRestClient.deleteDevice(deviceId); - if (userId != null) { - testRestClient.deleteUser(userId); - } - } - - @Test(dataProviderClass = DataProviderCredential.class, dataProvider = "assignTo") - public void assignAlarmTo(String user) { - deviceName = testRestClient.postDevice("", DevicePrototypes.defaultDevicePrototype("")).getName(); - deviceId = testRestClient.getDeviceByName(deviceName).getId(); - alarmId = testRestClient.postAlarm(EntityPrototypes.defaultAlarm(deviceId)).getId(); - - sideBarMenuView.goToDevicesPage(); - devicePage.openDeviceAlarms(deviceName); - alarmPage.assignTo(user); - - Assert.assertTrue(alarmPage.assignedUser(user).isDisplayed()); - } - - @Test - public void reassignAlarm() { - testRestClient.postCustomer(EntityPrototypes.defaultCustomerPrototype("TestCustomer")); - userId = testRestClient.postUser(EntityPrototypes.defaultUser(getCustomerByName("TestCustomer").getId())).getId(); - deviceName = testRestClient.postDevice("", DevicePrototypes.defaultDevicePrototype("")).getName(); - deviceId = testRestClient.getDeviceByName(deviceName).getId(); - alarmId = testRestClient.postAlarm(EntityPrototypes.defaultAlarm(deviceId, userId)).getId(); - - sideBarMenuView.goToDevicesPage(); - devicePage.openDeviceAlarms(deviceName); - alarmPage.assignTo("customer@thingsboard.org"); - - Assert.assertTrue(alarmPage.assignedUser("customer@thingsboard.org").isDisplayed()); - } - - @Test - public void searchByEmail() { - deviceName = testRestClient.postDevice("", DevicePrototypes.defaultDevicePrototype("")).getName(); - deviceId = testRestClient.getDeviceByName(deviceName).getId(); - alarmId = testRestClient.postAlarm(EntityPrototypes.defaultAlarm(deviceId)).getId(); - - sideBarMenuView.goToDevicesPage(); - devicePage.openDeviceAlarms(deviceName); - alarmPage.assignBtn().click(); - alarmPage.searchUserField().sendKeys("customer@thingsboard.org"); - alarmPage.setUsers(); - - assertThat(alarmPage.getUsers()).contains("customer@thingsboard.org"); - alarmPage.assignUsers().forEach(u -> assertThat(u.isDisplayed()).isTrue()); - } - - @Test - public void searchByName() { - String name = "usik"; - - userId = testRestClient.postUser(EntityPrototypes.defaultUser(getCustomerByName("Customer A").getId(), name)).getId(); - deviceName = testRestClient.postDevice("", DevicePrototypes.defaultDevicePrototype("")).getName(); - deviceId = testRestClient.getDeviceByName(deviceName).getId(); - alarmId = testRestClient.postAlarm(EntityPrototypes.defaultAlarm(deviceId)).getId(); - - sideBarMenuView.goToDevicesPage(); - devicePage.openDeviceAlarms(deviceName); - alarmPage.assignBtn().click(); - alarmPage.searchUserField().sendKeys(name); - alarmPage.setUsers(); - - assertThat(alarmPage.getUsers()).contains(name); - alarmPage.assignUsers().forEach(u -> assertThat(u.isDisplayed()).isTrue()); - } -} diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/assignee/AbstractAssignByCustomerTest.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/assignee/AbstractAssignByCustomerTest.java new file mode 100644 index 0000000000..6cc9186f5a --- /dev/null +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/assignee/AbstractAssignByCustomerTest.java @@ -0,0 +1,6 @@ +package org.thingsboard.server.msa.ui.tests.assignee; + +import org.thingsboard.server.msa.ui.base.AbstractDriverBaseTest; + +abstract public class AbstractAssignByCustomerTest extends AbstractDriverBaseTest { +} diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/assignee/AbstractAssignTest.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/assignee/AbstractAssignTest.java new file mode 100644 index 0000000000..633345774c --- /dev/null +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/assignee/AbstractAssignTest.java @@ -0,0 +1,117 @@ +package org.thingsboard.server.msa.ui.tests.assignee; + +import org.openqa.selenium.WebElement; +import org.testng.annotations.AfterClass; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.DataProvider; +import org.thingsboard.server.common.data.id.AlarmId; +import org.thingsboard.server.common.data.id.CustomerId; +import org.thingsboard.server.common.data.id.DeviceId; +import org.thingsboard.server.common.data.id.TenantId; +import org.thingsboard.server.common.data.id.UserId; +import org.thingsboard.server.msa.ui.base.AbstractDriverBaseTest; +import org.thingsboard.server.msa.ui.pages.AlarmDetailsViewHelper; +import org.thingsboard.server.msa.ui.pages.AlarmHelper; +import org.thingsboard.server.msa.ui.pages.CustomerPageHelper; +import org.thingsboard.server.msa.ui.pages.DevicePageHelper; +import org.thingsboard.server.msa.ui.pages.LoginPageHelper; +import org.thingsboard.server.msa.ui.pages.SideBarMenuViewHelper; +import org.thingsboard.server.msa.ui.utils.EntityPrototypes; + +import java.util.List; + +import static org.thingsboard.server.msa.ui.base.AbstractBasePage.random; + +abstract public class AbstractAssignTest extends AbstractDriverBaseTest { + + protected AlarmId alarmId; + protected AlarmId assignedAlarmId; + protected AlarmId propageteAlarmId; + protected AlarmId propageteAssigneAlarmId; + protected AlarmId tenantAssigneAlarmId; + protected DeviceId deviceId; + protected UserId userId; + protected UserId userWithNameId; +// protected TenantId tenantId = testRestClient.getTenants(pageLink).getData().get(0).getId(); + protected CustomerId customerId; + protected String deviceName; + protected SideBarMenuViewHelper sideBarMenuView; + protected AlarmHelper alarmPage; + protected DevicePageHelper devicePage; + protected AlarmDetailsViewHelper alarmDetailsView; + CustomerPageHelper customerPage; + + protected String name = "User"; + protected String customerTitle = "Customer" + random(); + protected String userEmail = random() + "@thingsboard.org"; + protected String userWithNameEmail = random() + "@thingsboard.org"; + protected String alarm = "Test alarm 1"; + protected String assignedAlarm = "Test alarm 2"; + protected String propagateAlarm = "Test propagated alarm 1"; + protected String propagateAssignedAlarm = "Test propagated alarm 2"; + + @BeforeClass + public void generateTestEntities() { + new LoginPageHelper(driver).authorizationTenant(); + sideBarMenuView = new SideBarMenuViewHelper(driver); + alarmPage = new AlarmHelper(driver); + devicePage = new DevicePageHelper(driver); + alarmDetailsView = new AlarmDetailsViewHelper(driver); + customerPage = new CustomerPageHelper(driver); + + customerId = testRestClient.postCustomer(EntityPrototypes.defaultCustomerPrototype(customerTitle)).getId(); + userId = testRestClient.postUser(EntityPrototypes.defaultUser(userEmail, getCustomerByName(customerTitle).getId())).getId(); + userWithNameId = testRestClient.postUser(EntityPrototypes.defaultUser(userWithNameEmail, getCustomerByName(customerTitle).getId(), name)).getId(); + deviceName = testRestClient.postDevice("", EntityPrototypes.defaultDevicePrototype("", customerId)).getName(); + deviceId = testRestClient.getDeviceByName(deviceName).getId(); + } + + @BeforeMethod + public void generateTestAlarms() { + if (getJwtTokenFromLocalStorage() == null) { + new LoginPageHelper(driver).authorizationTenant(); + } + alarmId = testRestClient.postAlarm(EntityPrototypes.defaultAlarm(deviceId, alarm)).getId(); + assignedAlarmId = testRestClient.postAlarm(EntityPrototypes.defaultAlarm(deviceId, assignedAlarm, userId)).getId(); + propageteAlarmId = testRestClient.postAlarm(EntityPrototypes.defaultAlarm(deviceId, propagateAlarm, true)).getId(); + propageteAssigneAlarmId = testRestClient.postAlarm(EntityPrototypes.defaultAlarm(deviceId, propagateAssignedAlarm, userId, true)).getId(); + + + } + + @AfterClass + public void deleteTestEntities() { + testRestClient.deleteDevice(deviceId); + testRestClient.deleteCustomer(customerId); + } + + @AfterMethod + public void deleteTestAlarms() { + testRestClient.deleteAlarm(alarmId); + testRestClient.deleteAlarm(assignedAlarmId); + testRestClient.deleteAlarm(propageteAlarmId); + testRestClient.deleteAlarm(propageteAssigneAlarmId); + } + + public void loginByUser(String userEmail) { + sideBarMenuView.customerBtn().click(); + customerPage.manageCustomersUserBtn(customerTitle).click(); + customerPage.getUserLoginBtnByEmail(userEmail).click(); + } + + @DataProvider + public Object[][] alarms() { + return new Object[][]{ + {alarm}, + {propagateAlarm}}; + } + + @DataProvider + public Object[][] assignedAlarms() { + return new Object[][]{ + {assignedAlarm}, + {propagateAssignedAlarm}}; + } +} diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/assignee/AssignByCustomerTest.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/assignee/AssignByCustomerTest.java new file mode 100644 index 0000000000..5c376ec3d0 --- /dev/null +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/assignee/AssignByCustomerTest.java @@ -0,0 +1,4 @@ +package org.thingsboard.server.msa.ui.tests.assignee; + +public class AssignByCustomerTest extends AbstractAssignByCustomerTest{ +} diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/assignee/AssignDetailsTab.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/assignee/AssignDetailsTab.java new file mode 100644 index 0000000000..aed0483f3e --- /dev/null +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/assignee/AssignDetailsTab.java @@ -0,0 +1,209 @@ +/** + * Copyright © 2016-2023 The Thingsboard Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.server.msa.ui.tests.assignee; + +import org.junit.platform.commons.function.Try; +import org.openqa.selenium.html5.WebStorage; +import org.testng.Assert; +import org.testng.annotations.Test; +import org.thingsboard.server.msa.ui.utils.Const; + +import static org.assertj.core.api.Assertions.assertThat; + +public class AssignDetailsTab extends AbstractAssignTest { + + /*@BeforeMethod + public void openAlarmView() { + sideBarMenuView.goToDevicesPage(); + devicePage.openDeviceAlarms(deviceName); + }*/ + + @Test(dataProvider = "alarms") + public void assignAlarmToYourself(String alarm) { + sideBarMenuView.goToDevicesPage(); + devicePage.openDeviceAlarms(deviceName); + alarmPage.assignAlarmTo(alarm, Const.TENANT_EMAIL); + + Assert.assertTrue(alarmPage.assignedUser(Const.TENANT_EMAIL).isDisplayed()); + } + + @Test(dataProvider = "alarms") + public void assignAlarmToAnotherUser(String alarm) { + sideBarMenuView.goToDevicesPage(); + devicePage.openDeviceAlarms(deviceName); + alarmPage.assignAlarmTo(alarm, userEmail); + + Assert.assertTrue(alarmPage.assignedUser(userEmail).isDisplayed()); + } + + @Test(dataProvider = "assignedAlarms") + public void unassignedAlarm(String assignedAlarm) { + sideBarMenuView.goToDevicesPage(); + devicePage.openDeviceAlarms(deviceName); + alarmPage.unassignedAlarm(assignedAlarm); + + Assert.assertTrue(alarmPage.unassigned(assignedAlarm).isDisplayed()); + } + + @Test(dataProvider = "assignedAlarms") + public void reassignAlarm(String assignedAlarm) { + sideBarMenuView.goToDevicesPage(); + devicePage.openDeviceAlarms(deviceName); + alarmPage.assignAlarmTo(assignedAlarm, Const.TENANT_EMAIL); + + Assert.assertTrue(alarmPage.assignedUser(Const.TENANT_EMAIL).isDisplayed()); + } + + @Test + public void searchByEmail() { + sideBarMenuView.goToDevicesPage(); + devicePage.openDeviceAlarms(deviceName); + alarmPage.searchAlarm(alarm, Const.TENANT_EMAIL); + alarmPage.setUsers(); + + assertThat(alarmPage.getUsers()).hasSize(1).contains(Const.TENANT_EMAIL); + alarmPage.assignUsers().forEach(u -> assertThat(u.isDisplayed()).isTrue()); + } + + @Test + public void searchByName() { + sideBarMenuView.goToDevicesPage(); + devicePage.openDeviceAlarms(deviceName); + alarmPage.searchAlarm(alarm, name); + alarmPage.setUsers(); + + assertThat(alarmPage.getUsers()).hasSize(1).contains(name); + alarmPage.assignUsers().forEach(u -> assertThat(u.isDisplayed()).isTrue()); + } + + @Test + public void assignAlarmToYourselfFromDetails() { + sideBarMenuView.goToDevicesPage(); + devicePage.openDeviceAlarms(deviceName); + alarmPage.alarmDetailsBtn(alarm).click(); + alarmDetailsView.assignAlarmTo(Const.TENANT_EMAIL); + alarmDetailsView.closeViewBtn().click(); + + Assert.assertTrue(alarmPage.assignedUser(Const.TENANT_EMAIL).isDisplayed()); + } + + @Test + public void assignAlarmToAnotherUserFromDetails() { + sideBarMenuView.goToDevicesPage(); + devicePage.openDeviceAlarms(deviceName); + alarmPage.alarmDetailsBtn(alarm).click(); + alarmDetailsView.assignAlarmTo(userEmail); + alarmDetailsView.closeViewBtn().click(); + + Assert.assertTrue(alarmPage.assignedUser(userEmail).isDisplayed()); + } + + @Test + public void unassignedAlarmFromDetails() { + sideBarMenuView.goToDevicesPage(); + devicePage.openDeviceAlarms(deviceName); + alarmPage.alarmDetailsBtn(assignedAlarm).click(); + alarmDetailsView.unassignedAlarm(); + alarmDetailsView.closeViewBtn().click(); + + Assert.assertTrue(alarmPage.unassigned(assignedAlarm).isDisplayed()); + } + + @Test + public void reassignAlarmFromDetails() { + sideBarMenuView.goToDevicesPage(); + devicePage.openDeviceAlarms(deviceName); + alarmPage.alarmDetailsBtn(assignedAlarm).click(); + alarmDetailsView.assignAlarmTo(Const.TENANT_EMAIL); + alarmDetailsView.closeViewBtn().click(); + + Assert.assertTrue(alarmPage.assignedUser(Const.TENANT_EMAIL).isDisplayed()); + } + + @Test + public void assignAlarmToYourselfCustomer() { + loginByUser(userEmail); + sideBarMenuView.goToDevicesPage(); + devicePage.openDeviceAlarms(deviceName); + alarmPage.assignAlarmTo(alarm, userEmail); + clearStorage(); + + Assert.assertTrue(alarmPage.assignedUser(userEmail).isDisplayed()); + } + + @Test + public void reassignAlarmByCustomerFromAnotherCustomerUser() { + loginByUser(userWithNameEmail); + sideBarMenuView.goToDevicesPage(); + devicePage.openDeviceAlarms(deviceName); + alarmPage.assignAlarmTo(assignedAlarm, name); + clearStorage(); + + Assert.assertTrue(alarmPage.assignedUser(name).isDisplayed()); + } + + @Test + public void unassignedAlarmFromCustomer() { + loginByUser(userWithNameEmail); + sideBarMenuView.goToDevicesPage(); + devicePage.openDeviceAlarms(deviceName); + alarmPage.unassignedAlarm(assignedAlarm); + clearStorage(); + + Assert.assertTrue(alarmPage.unassigned(assignedAlarm).isDisplayed()); + } + + @Test + public void unassignedAlarmFromAnotherUserFromCustomer() { + loginByUser(userEmail); + sideBarMenuView.goToDevicesPage(); + devicePage.openDeviceAlarms(deviceName); + alarmPage.unassignedAlarm(assignedAlarm); + clearStorage(); + + Assert.assertTrue(alarmPage.unassigned(assignedAlarm).isDisplayed()); + } + + @Test + public void checkTheDisplayOfNamesEmailsFromCustomer() { + sideBarMenuView.goToDevicesPage(); + devicePage.openDeviceAlarms(deviceName); + alarmPage.assignAlarmTo(alarm, Const.TENANT_EMAIL); + loginByUser(userEmail); + sideBarMenuView.goToDevicesPage(); + devicePage.openDeviceAlarms(deviceName); + alarmPage.assignBtn(alarm).click(); + try { + alarmPage.assertUsersForAssignIsNotPresent(); + } finally { + clearStorage(); + } + } + + public WebStorage getWebStorage() { + if (driver instanceof WebStorage) { + return (WebStorage) driver; + } else { + throw new IllegalArgumentException("This test expects the driver to implement WebStorage"); + } + } + + public void clearStorage() { + getWebStorage().getLocalStorage().clear(); + getWebStorage().getSessionStorage().clear(); + } + +} 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 a0188665c8..bce6e071f4 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 @@ -150,10 +150,4 @@ public class DataProviderCredential { {description, Keys.CONTROL + "A" + Keys.BACK_SPACE, ""}}; } - @DataProvider - public static Object[][] assignTo() { - return new Object[][]{ - {Const.TENANT_EMAIL}, - {"customer@thingsboard.org"}}; - } } 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 bce4373191..504980a001 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 @@ -15,8 +15,10 @@ */ package org.thingsboard.server.msa.ui.utils; +import org.testcontainers.shaded.org.apache.commons.lang3.RandomStringUtils; import org.thingsboard.common.util.JacksonUtil; import org.thingsboard.server.common.data.Customer; +import org.thingsboard.server.common.data.Device; import org.thingsboard.server.common.data.DeviceProfile; import org.thingsboard.server.common.data.DeviceProfileProvisionType; import org.thingsboard.server.common.data.DeviceProfileType; @@ -32,8 +34,11 @@ import org.thingsboard.server.common.data.device.profile.DisabledDeviceProfilePr import org.thingsboard.server.common.data.id.CustomerId; import org.thingsboard.server.common.data.id.EntityId; import org.thingsboard.server.common.data.id.UserId; +import org.thingsboard.server.common.data.notification.targets.platform.CustomerUsersFilter; import org.thingsboard.server.common.data.rule.RuleChain; import org.thingsboard.server.common.data.security.Authority; +import org.thingsboard.server.common.data.security.UserCredentials; +import org.thingsboard.server.common.data.settings.UserSettings; public class EntityPrototypes { @@ -105,37 +110,71 @@ public class EntityPrototypes { return assetProfile; } - public static Alarm defaultAlarm(EntityId id) { + public static Alarm defaultAlarm(EntityId id, String type) { Alarm alarm = new Alarm(); - alarm.setType("default"); + alarm.setType(type); alarm.setOriginator(id); alarm.setSeverity(AlarmSeverity.CRITICAL); return alarm; } - public static Alarm defaultAlarm(EntityId id, UserId userId) { + public static Alarm defaultAlarm(EntityId id, String type, boolean propagate) { Alarm alarm = new Alarm(); - alarm.setType("default"); + alarm.setType(type); + alarm.setOriginator(id); + alarm.setSeverity(AlarmSeverity.CRITICAL); + alarm.setPropagate(propagate); + return alarm; + } + + public static Alarm defaultAlarm(EntityId id, String type, UserId userId) { + Alarm alarm = new Alarm(); + alarm.setType(type); alarm.setOriginator(id); alarm.setSeverity(AlarmSeverity.CRITICAL); alarm.setAssigneeId(userId); return alarm; } - public static User defaultUser(CustomerId customerId) { + public static Alarm defaultAlarm(EntityId id, String type, UserId userId, boolean propagate) { + Alarm alarm = new Alarm(); + alarm.setType(type); + alarm.setOriginator(id); + alarm.setSeverity(AlarmSeverity.CRITICAL); + alarm.setAssigneeId(userId); + alarm.setPropagate(propagate); + return alarm; + } + + public static User defaultUser(String email, CustomerId customerId) { User user = new User(); - user.setEmail("test@thingsboard.org"); + user.setEmail(email); user.setCustomerId(customerId); user.setAuthority(Authority.CUSTOMER_USER); return user; } - public static User defaultUser(CustomerId customerId, String name) { + public static User defaultUser(String email, CustomerId customerId, String name) { User user = new User(); - user.setEmail("test@thingsboard.org"); + user.setEmail(email); user.setFirstName(name); user.setCustomerId(customerId); user.setAuthority(Authority.CUSTOMER_USER); return user; } + + public static Device defaultDevicePrototype(String name){ + Device device = new Device(); + device.setName(name + RandomStringUtils.randomAlphanumeric(7)); + device.setType("DEFAULT"); + return device; + } + + public static Device defaultDevicePrototype(String name, CustomerId id){ + Device device = new Device(); + device.setName(name + RandomStringUtils.randomAlphanumeric(7)); + device.setCustomerId(id); + device.setType("DEFAULT"); + return device; + } } From c9760ab55be5e38020f7b76ca2bd7a840d096d06 Mon Sep 17 00:00:00 2001 From: Seraphym-Tuhai Date: Thu, 13 Apr 2023 17:39:55 +0300 Subject: [PATCH 4/8] add test on customer, asset and entity view alarm --- .../server/msa/TestRestClient.java | 42 +++++++++ .../msa/ui/base/AbstractDriverBaseTest.java | 14 +++ .../ui/pages/AlarmDetailsViewElements.java | 23 ++++- .../msa/ui/pages/AlarmDetailsViewHelper.java | 15 ++++ .../server/msa/ui/pages/AlarmElements.java | 5 ++ .../msa/ui/pages/CustomerPageElements.java | 10 +++ .../msa/ui/pages/CustomerPageHelper.java | 7 ++ .../msa/ui/pages/DevicePageElements.java | 27 +++++- .../server/msa/ui/pages/DevicePageHelper.java | 6 ++ .../msa/ui/pages/SideBarMenuViewElements.java | 10 +++ .../msa/ui/pages/SideBarMenuViewHelper.java | 10 +++ .../AbstractAssignByCustomerTest.java | 15 ++++ .../ui/tests/assignee/AbstractAssignTest.java | 52 +++++++++-- .../tests/assignee/AssignByCustomerTest.java | 15 ++++ .../ui/tests/assignee/AssignDetailsTab.java | 88 ++++++++++++------- .../server/msa/ui/utils/EntityPrototypes.java | 18 ++++ 16 files changed, 315 insertions(+), 42 deletions(-) diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/TestRestClient.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/TestRestClient.java index 45829e7d1e..c34d14e48f 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/TestRestClient.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/TestRestClient.java @@ -29,16 +29,20 @@ import io.restassured.specification.RequestSpecification; import org.thingsboard.server.common.data.Customer; import org.thingsboard.server.common.data.Device; import org.thingsboard.server.common.data.DeviceProfile; +import org.thingsboard.server.common.data.EntityView; import org.thingsboard.server.common.data.Tenant; import org.thingsboard.server.common.data.User; import org.thingsboard.server.common.data.alarm.Alarm; +import org.thingsboard.server.common.data.asset.Asset; import org.thingsboard.server.common.data.asset.AssetProfile; import org.thingsboard.server.common.data.id.AlarmId; +import org.thingsboard.server.common.data.id.AssetId; import org.thingsboard.server.common.data.id.AssetProfileId; import org.thingsboard.server.common.data.id.CustomerId; import org.thingsboard.server.common.data.id.DeviceId; import org.thingsboard.server.common.data.id.DeviceProfileId; import org.thingsboard.server.common.data.id.EntityId; +import org.thingsboard.server.common.data.id.EntityViewId; import org.thingsboard.server.common.data.id.RuleChainId; import org.thingsboard.server.common.data.id.UserId; import org.thingsboard.server.common.data.page.PageData; @@ -445,4 +449,42 @@ public class TestRestClient { .as(new TypeRef>() { }); } + + public Asset postAsset(Asset asset) { + return given().spec(requestSpec) + .body(asset) + .post("/api/asset") + .then() + .statusCode(HTTP_OK) + .extract() + .as(Asset.class); + } + + public Asset getAssetById(AssetId assetId) { + return given().spec(requestSpec) + .get("/api/asset/{assetId}", assetId.getId()) + .then() + .statusCode(HTTP_OK) + .extract() + .as(Asset.class); + } + + public EntityView postEntityView(EntityView entityView) { + return given().spec(requestSpec) + .body(entityView) + .post("/api/entityView") + .then() + .statusCode(HTTP_OK) + .extract() + .as(EntityView.class); + } + + public EntityView getEntityViewById(EntityViewId entityViewId) { + return given().spec(requestSpec) + .get("/api/entityView/{entityViewId}", entityViewId.getId()) + .then() + .statusCode(HTTP_OK) + .extract() + .as(EntityView.class); + } } 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 e88397b781..aecdc61c03 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 @@ -27,6 +27,7 @@ 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.html5.WebStorage; import org.openqa.selenium.remote.LocalFileDetector; import org.openqa.selenium.remote.RemoteWebDriver; import org.openqa.selenium.support.ui.ExpectedConditions; @@ -179,4 +180,17 @@ abstract public class AbstractDriverBaseTest extends AbstractContainerTest { new ByteArrayInputStream(((TakesScreenshot) driver).getScreenshotAs(OutputType.BYTES))); } } + + public WebStorage getWebStorage() { + if (driver instanceof WebStorage) { + return (WebStorage) driver; + } else { + throw new IllegalArgumentException("This test expects the driver to implement WebStorage"); + } + } + + public void clearStorage() { + getWebStorage().getLocalStorage().clear(); + getWebStorage().getSessionStorage().clear(); + } } diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/AlarmDetailsViewElements.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/AlarmDetailsViewElements.java index 44f41aff2c..7d88a1ed4f 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/AlarmDetailsViewElements.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/AlarmDetailsViewElements.java @@ -1,3 +1,18 @@ +/** + * Copyright © 2016-2023 The Thingsboard Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package org.thingsboard.server.msa.ui.pages; import org.openqa.selenium.WebDriver; @@ -9,9 +24,9 @@ public class AlarmDetailsViewElements extends AbstractBasePage { super(driver); } - private static final String ASSIGN_FIELD = "//mat-label[contains(text(),'Assignee')]/parent::label/following-sibling::input"; + private static final String ASSIGN_FIELD = "//tb-alarm-assignee//mat-icon[contains(text(),'keyboard_arrow_down')]/parent::button"; private static final String USER_FROM_DROP_DOWN = "//div[@class='user-display-name']/span[text() = '%s']"; - private static final String CLOSE_VIEW_BTN = "//mat-dialog-container//mat-icon[contains(text(),'close')]/parent::button"; + private static final String CLOSE_ALARM_DETAILS_VIEW_BTN = "//mat-dialog-container//mat-icon[contains(text(),'close')]/parent::button"; private static final String UNASSIGNED_BTN = "//div[@role='listbox']//mat-icon[text() = 'account_circle']/following-sibling::span"; public WebElement assignField() { @@ -22,8 +37,8 @@ public class AlarmDetailsViewElements extends AbstractBasePage { return waitUntilElementToBeClickable(String.format(USER_FROM_DROP_DOWN, emailOrName)); } - public WebElement closeViewBtn() { - return waitUntilElementToBeClickable(CLOSE_VIEW_BTN); + public WebElement closeAlarmDetailsViewBtn() { + return waitUntilElementToBeClickable(CLOSE_ALARM_DETAILS_VIEW_BTN); } public WebElement unassignedBtn() { diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/AlarmDetailsViewHelper.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/AlarmDetailsViewHelper.java index b658164b37..89d572cf3c 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/AlarmDetailsViewHelper.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/AlarmDetailsViewHelper.java @@ -1,3 +1,18 @@ +/** + * Copyright © 2016-2023 The Thingsboard Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package org.thingsboard.server.msa.ui.pages; import org.openqa.selenium.WebDriver; diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/AlarmElements.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/AlarmElements.java index ad3ccb748d..87baef8594 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/AlarmElements.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/AlarmElements.java @@ -33,6 +33,7 @@ public class AlarmElements extends OtherPageElements{ private static final String UNASSIGNED_BTN = "//div[@role='listbox']//mat-icon[text() = 'account_circle']/following-sibling::span"; private static final String UNASSIGNED = "//span[text() = '%s']/ancestor::mat-row//span[@class='assignee-cell']/mat-icon[text() = 'account_circle']/following-sibling::span"; private static final String ALARM_DETAILS_BTN = "//span[text() = '%s']/ancestor::mat-row//mat-icon[contains(text(),'more_horiz')]/parent::button"; + private static final String ACCESS_FORBIDDEN_DIALOG_VIEW = "//h2[text() = 'Access Forbidden']/parent::tb-confirm-dialog"; public WebElement assignBtn(String type) { return waitUntilElementToBeClickable(String.format(ASSIGN_BTN, type)); @@ -65,4 +66,8 @@ public class AlarmElements extends OtherPageElements{ public WebElement alarmDetailsBtn(String alarmType) { return waitUntilElementToBeClickable(String.format(ALARM_DETAILS_BTN, alarmType)); } + + public WebElement accessForbiddenDialogView() { + return waitUntilVisibilityOfElementLocated(ACCESS_FORBIDDEN_DIALOG_VIEW); + } } diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/CustomerPageElements.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/CustomerPageElements.java index 90f51c4903..465c3d918e 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/CustomerPageElements.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/CustomerPageElements.java @@ -73,6 +73,8 @@ public class CustomerPageElements extends OtherPageElementsHelper { private static final String MANAGE_CUSTOMERS_DASHBOARD_BTN_VIEW = "Manage dashboards"; private static final String MANAGE_CUSTOMERS_EDGE_BTN_VIEW = "Manage edges "; private static final String DELETE_FROM_VIEW_BTN = "//tb-customer//span[contains(text(),' Delete')]"; + private static final String CUSTOMER_DETAILS_VIEW = "//tb-details-panel"; + private static final String CUSTOMER_DETAILS_ALARMS = CUSTOMER_DETAILS_VIEW + "//span[text()='Alarms']"; public WebElement titleFieldAddEntityView() { return waitUntilElementToBeClickable(ADD_ENTITY_VIEW + String.format(INPUT_FIELD, INPUT_FIELD_NAME_TITLE)); @@ -285,4 +287,12 @@ public class CustomerPageElements extends OtherPageElementsHelper { public WebElement customerViewDeleteBtn() { return waitUntilElementToBeClickable(DELETE_FROM_VIEW_BTN); } + + public WebElement customerDetailsView() { + return waitUntilPresenceOfElementLocated(CUSTOMER_DETAILS_VIEW); + } + + public WebElement customerDetailsAlarmsBtn() { + return waitUntilElementToBeClickable(CUSTOMER_DETAILS_ALARMS); + } } diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/CustomerPageHelper.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/CustomerPageHelper.java index ba90361dc8..25b3aff7e1 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/CustomerPageHelper.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/CustomerPageHelper.java @@ -161,4 +161,11 @@ public class CustomerPageHelper extends CustomerPageElements { phoneNumberEntityView().sendKeys(number); phoneNumberEntityView().sendKeys(Keys.TAB); } + + public void openCustomerAlarms(String customerName) { + if (!customerDetailsView().isDisplayed()) { + customer(customerName).click(); + } + customerDetailsAlarmsBtn().click(); + } } diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/DevicePageElements.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/DevicePageElements.java index d8bb1b021e..f5e6c2800a 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/DevicePageElements.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/DevicePageElements.java @@ -26,7 +26,12 @@ public class DevicePageElements extends OtherPageElements{ private static final String DEVICE = "//table//span[text()='%s']"; private static final String DEVICE_DETAILS_VIEW = "//tb-details-panel"; private static final String DEVICE_DETAILS_ALARMS = DEVICE_DETAILS_VIEW + "//span[text()='Alarms']"; - + private static final String ASSIGN_TO_CUSTOMER_BTN = "//mat-cell[contains(@class,'name')]/span[text()='%s']" + + "/ancestor::mat-row//mat-icon[contains(text(),'assignment_ind')]/parent::button"; + private static final String CHOOSE_CUSTOMER_FOR_ASSIGN_FIELD = "//input[@formcontrolname='entity']"; + private static final String CUSTOMER_FROM_ASSIGN_DROPDOWN = "//div[@role = 'listbox']//span[text() = '%s']"; + private static final String CLOSE_DEVICE_DETAILS_VIEW = "//header//mat-icon[contains(text(),'close')]/parent::button"; + private static final String SUBMIT_ASSIGN_TO_CUSTOMER_BTN = "//button[@type='submit']"; public WebElement device(String deviceName) { return waitUntilElementToBeClickable(String.format(DEVICE, deviceName)); } @@ -38,4 +43,24 @@ public class DevicePageElements extends OtherPageElements{ public WebElement deviceDetailsView() { return waitUntilPresenceOfElementLocated(DEVICE_DETAILS_VIEW); } + + public WebElement assignToCustomerBtn(String deviceName) { + return waitUntilElementToBeClickable(String.format(ASSIGN_TO_CUSTOMER_BTN, deviceName)); + } + + public WebElement chooseCustomerForAssignField() { + return waitUntilElementToBeClickable(CHOOSE_CUSTOMER_FOR_ASSIGN_FIELD); + } + + public WebElement customerFromAssignDropdown(String customerTitle) { + return waitUntilElementToBeClickable(String.format(CUSTOMER_FROM_ASSIGN_DROPDOWN, customerTitle)); + } + + public WebElement closeDeviceDetailsViewBtn() { + return waitUntilElementToBeClickable(CLOSE_DEVICE_DETAILS_VIEW); + } + + public WebElement submitAssignToCustomerBtn() { + return waitUntilElementToBeClickable(SUBMIT_ASSIGN_TO_CUSTOMER_BTN); + } } diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/DevicePageHelper.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/DevicePageHelper.java index 12413641af..19e85244cd 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/DevicePageHelper.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/DevicePageHelper.java @@ -28,4 +28,10 @@ public class DevicePageHelper extends DevicePageElements { } deviceDetailsAlarmsBtn().click(); } + + public void assignToCustomer(String customerTitle) { + chooseCustomerForAssignField().click(); + customerFromAssignDropdown(customerTitle).click(); + submitAssignToCustomerBtn().click(); + } } diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/SideBarMenuViewElements.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/SideBarMenuViewElements.java index 5ecf27b5bd..54675bdc7a 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/SideBarMenuViewElements.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/SideBarMenuViewElements.java @@ -33,6 +33,8 @@ public class SideBarMenuViewElements extends AbstractBasePage { private static final String ALARMS_BTN = "//mat-toolbar//a[@href='/alarms']"; private static final String ENTITIES_DROPDOWN = "//mat-toolbar//mat-icon[text()='category']/ancestor::a//span[contains(@class,'pull-right')]"; private static final String DEVICES_BTN = "//ul[@id='docs-menu-entity.entities']//span[text()='Devices']"; + private static final String ASSETS_BTN = "//ul[@id='docs-menu-entity.entities']//span[text()='Assets']"; + private static final String ENTITY_VIEWS_BTN = "//ul[@id='docs-menu-entity.entities']//span[text()='Entity Views']"; public WebElement entitiesDropdown() { return waitUntilElementToBeClickable(ENTITIES_DROPDOWN); @@ -69,4 +71,12 @@ public class SideBarMenuViewElements extends AbstractBasePage { public WebElement devicesBtn() { return waitUntilElementToBeClickable(DEVICES_BTN); } + + public WebElement assetsBtn() { + return waitUntilElementToBeClickable(ASSETS_BTN); + } + + public WebElement entityViewsBtn() { + return waitUntilElementToBeClickable(ENTITY_VIEWS_BTN); + } } \ No newline at end of file diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/SideBarMenuViewHelper.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/SideBarMenuViewHelper.java index 92848ff68c..297438c193 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/SideBarMenuViewHelper.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/SideBarMenuViewHelper.java @@ -38,6 +38,16 @@ public class SideBarMenuViewHelper extends SideBarMenuViewElements { devicesBtn().click(); } + public void goToAssetsPage() { + openEntitiesDropdown(); + assetsBtn().click(); + } + + public void goToEntityViewsPage() { + openEntitiesDropdown(); + entityViewsBtn().click(); + } + public void openEntitiesDropdown() { if (entitiesDropdownIsClose()) { entitiesDropdown().click(); diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/assignee/AbstractAssignByCustomerTest.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/assignee/AbstractAssignByCustomerTest.java index 6cc9186f5a..516abf8ab7 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/assignee/AbstractAssignByCustomerTest.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/assignee/AbstractAssignByCustomerTest.java @@ -1,3 +1,18 @@ +/** + * Copyright © 2016-2023 The Thingsboard Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package org.thingsboard.server.msa.ui.tests.assignee; import org.thingsboard.server.msa.ui.base.AbstractDriverBaseTest; diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/assignee/AbstractAssignTest.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/assignee/AbstractAssignTest.java index 633345774c..1dfe2b139d 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/assignee/AbstractAssignTest.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/assignee/AbstractAssignTest.java @@ -1,15 +1,30 @@ +/** + * Copyright © 2016-2023 The Thingsboard Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package org.thingsboard.server.msa.ui.tests.assignee; -import org.openqa.selenium.WebElement; import org.testng.annotations.AfterClass; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeClass; import org.testng.annotations.BeforeMethod; import org.testng.annotations.DataProvider; import org.thingsboard.server.common.data.id.AlarmId; +import org.thingsboard.server.common.data.id.AssetId; import org.thingsboard.server.common.data.id.CustomerId; import org.thingsboard.server.common.data.id.DeviceId; -import org.thingsboard.server.common.data.id.TenantId; +import org.thingsboard.server.common.data.id.EntityViewId; import org.thingsboard.server.common.data.id.UserId; import org.thingsboard.server.msa.ui.base.AbstractDriverBaseTest; import org.thingsboard.server.msa.ui.pages.AlarmDetailsViewHelper; @@ -20,8 +35,6 @@ import org.thingsboard.server.msa.ui.pages.LoginPageHelper; import org.thingsboard.server.msa.ui.pages.SideBarMenuViewHelper; import org.thingsboard.server.msa.ui.utils.EntityPrototypes; -import java.util.List; - import static org.thingsboard.server.msa.ui.base.AbstractBasePage.random; abstract public class AbstractAssignTest extends AbstractDriverBaseTest { @@ -30,13 +43,19 @@ abstract public class AbstractAssignTest extends AbstractDriverBaseTest { protected AlarmId assignedAlarmId; protected AlarmId propageteAlarmId; protected AlarmId propageteAssigneAlarmId; - protected AlarmId tenantAssigneAlarmId; + protected AlarmId tenantAlarmId; + protected AlarmId onCustomerAlarmId; + protected AlarmId assetAlarmId; + protected AlarmId entityViewAlarmId; protected DeviceId deviceId; + protected DeviceId tenantDeviceId; protected UserId userId; protected UserId userWithNameId; -// protected TenantId tenantId = testRestClient.getTenants(pageLink).getData().get(0).getId(); protected CustomerId customerId; protected String deviceName; + protected String assetName; + protected String entityViewName; + protected String tenantDeviceName; protected SideBarMenuViewHelper sideBarMenuView; protected AlarmHelper alarmPage; protected DevicePageHelper devicePage; @@ -51,6 +70,12 @@ abstract public class AbstractAssignTest extends AbstractDriverBaseTest { protected String assignedAlarm = "Test alarm 2"; protected String propagateAlarm = "Test propagated alarm 1"; protected String propagateAssignedAlarm = "Test propagated alarm 2"; + protected String tenantAlarm = "Test tenant alarm"; + protected String customerAlarm = "Test customer alarm"; + protected String assetAlarm = "Test asset alarm"; + protected String entityViewAlarm = "Test entity view alarm"; + protected AssetId assetId; + protected EntityViewId entityViewId; @BeforeClass public void generateTestEntities() { @@ -65,7 +90,16 @@ abstract public class AbstractAssignTest extends AbstractDriverBaseTest { userId = testRestClient.postUser(EntityPrototypes.defaultUser(userEmail, getCustomerByName(customerTitle).getId())).getId(); userWithNameId = testRestClient.postUser(EntityPrototypes.defaultUser(userWithNameEmail, getCustomerByName(customerTitle).getId(), name)).getId(); deviceName = testRestClient.postDevice("", EntityPrototypes.defaultDevicePrototype("", customerId)).getName(); + tenantDeviceName = testRestClient.postDevice("", EntityPrototypes.defaultDevicePrototype("")).getName(); deviceId = testRestClient.getDeviceByName(deviceName).getId(); + tenantDeviceId = testRestClient.getDeviceByName(tenantDeviceName).getId(); + onCustomerAlarmId = testRestClient.postAlarm(EntityPrototypes.defaultAlarm(customerId, customerAlarm)).getId(); + assetId = testRestClient.postAsset(EntityPrototypes.defaultAssetPrototype("", customerId)).getId(); + assetName = testRestClient.getAssetById(assetId).getName(); + assetAlarmId = testRestClient.postAlarm(EntityPrototypes.defaultAlarm(assetId, assetAlarm)).getId(); + entityViewId = testRestClient.postEntityView(EntityPrototypes.defaultEntityViewPrototype("", "", "DEVICE")).getId(); + entityViewName = testRestClient.getEntityViewById(entityViewId).getName(); + entityViewAlarmId = testRestClient.postAlarm(EntityPrototypes.defaultAlarm(entityViewId, entityViewAlarm)).getId(); } @BeforeMethod @@ -78,13 +112,18 @@ abstract public class AbstractAssignTest extends AbstractDriverBaseTest { propageteAlarmId = testRestClient.postAlarm(EntityPrototypes.defaultAlarm(deviceId, propagateAlarm, true)).getId(); propageteAssigneAlarmId = testRestClient.postAlarm(EntityPrototypes.defaultAlarm(deviceId, propagateAssignedAlarm, userId, true)).getId(); + tenantAlarmId = testRestClient.postAlarm(EntityPrototypes.defaultAlarm(tenantDeviceId, tenantAlarm)).getId(); } @AfterClass public void deleteTestEntities() { testRestClient.deleteDevice(deviceId); + testRestClient.deleteDevice(tenantDeviceId); testRestClient.deleteCustomer(customerId); + testRestClient.deleteAlarm(onCustomerAlarmId); + testRestClient.deleteAlarm(assetAlarmId); + testRestClient.deleteAlarm(entityViewAlarmId); } @AfterMethod @@ -93,6 +132,7 @@ abstract public class AbstractAssignTest extends AbstractDriverBaseTest { testRestClient.deleteAlarm(assignedAlarmId); testRestClient.deleteAlarm(propageteAlarmId); testRestClient.deleteAlarm(propageteAssigneAlarmId); + testRestClient.deleteAlarm(tenantAlarmId); } public void loginByUser(String userEmail) { diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/assignee/AssignByCustomerTest.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/assignee/AssignByCustomerTest.java index 5c376ec3d0..e02f0ce45b 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/assignee/AssignByCustomerTest.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/assignee/AssignByCustomerTest.java @@ -1,3 +1,18 @@ +/** + * Copyright © 2016-2023 The Thingsboard Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package org.thingsboard.server.msa.ui.tests.assignee; public class AssignByCustomerTest extends AbstractAssignByCustomerTest{ diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/assignee/AssignDetailsTab.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/assignee/AssignDetailsTab.java index aed0483f3e..9781ef6417 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/assignee/AssignDetailsTab.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/assignee/AssignDetailsTab.java @@ -15,22 +15,15 @@ */ package org.thingsboard.server.msa.ui.tests.assignee; -import org.junit.platform.commons.function.Try; -import org.openqa.selenium.html5.WebStorage; import org.testng.Assert; import org.testng.annotations.Test; +import org.thingsboard.server.msa.ui.pages.AssetPageElements; import org.thingsboard.server.msa.ui.utils.Const; import static org.assertj.core.api.Assertions.assertThat; public class AssignDetailsTab extends AbstractAssignTest { - /*@BeforeMethod - public void openAlarmView() { - sideBarMenuView.goToDevicesPage(); - devicePage.openDeviceAlarms(deviceName); - }*/ - @Test(dataProvider = "alarms") public void assignAlarmToYourself(String alarm) { sideBarMenuView.goToDevicesPage(); @@ -85,7 +78,7 @@ public class AssignDetailsTab extends AbstractAssignTest { alarmPage.searchAlarm(alarm, name); alarmPage.setUsers(); - assertThat(alarmPage.getUsers()).hasSize(1).contains(name); + //assertThat(alarmPage.getUsers()).hasSize(1).contains(name); alarmPage.assignUsers().forEach(u -> assertThat(u.isDisplayed()).isTrue()); } @@ -95,7 +88,7 @@ public class AssignDetailsTab extends AbstractAssignTest { devicePage.openDeviceAlarms(deviceName); alarmPage.alarmDetailsBtn(alarm).click(); alarmDetailsView.assignAlarmTo(Const.TENANT_EMAIL); - alarmDetailsView.closeViewBtn().click(); + alarmDetailsView.closeAlarmDetailsViewBtn().click(); Assert.assertTrue(alarmPage.assignedUser(Const.TENANT_EMAIL).isDisplayed()); } @@ -106,7 +99,7 @@ public class AssignDetailsTab extends AbstractAssignTest { devicePage.openDeviceAlarms(deviceName); alarmPage.alarmDetailsBtn(alarm).click(); alarmDetailsView.assignAlarmTo(userEmail); - alarmDetailsView.closeViewBtn().click(); + alarmDetailsView.closeAlarmDetailsViewBtn().click(); Assert.assertTrue(alarmPage.assignedUser(userEmail).isDisplayed()); } @@ -117,7 +110,7 @@ public class AssignDetailsTab extends AbstractAssignTest { devicePage.openDeviceAlarms(deviceName); alarmPage.alarmDetailsBtn(assignedAlarm).click(); alarmDetailsView.unassignedAlarm(); - alarmDetailsView.closeViewBtn().click(); + alarmDetailsView.closeAlarmDetailsViewBtn().click(); Assert.assertTrue(alarmPage.unassigned(assignedAlarm).isDisplayed()); } @@ -128,7 +121,7 @@ public class AssignDetailsTab extends AbstractAssignTest { devicePage.openDeviceAlarms(deviceName); alarmPage.alarmDetailsBtn(assignedAlarm).click(); alarmDetailsView.assignAlarmTo(Const.TENANT_EMAIL); - alarmDetailsView.closeViewBtn().click(); + alarmDetailsView.closeAlarmDetailsViewBtn().click(); Assert.assertTrue(alarmPage.assignedUser(Const.TENANT_EMAIL).isDisplayed()); } @@ -180,30 +173,63 @@ public class AssignDetailsTab extends AbstractAssignTest { @Test public void checkTheDisplayOfNamesEmailsFromCustomer() { sideBarMenuView.goToDevicesPage(); - devicePage.openDeviceAlarms(deviceName); - alarmPage.assignAlarmTo(alarm, Const.TENANT_EMAIL); + devicePage.openDeviceAlarms(tenantDeviceName); + alarmPage.assignAlarmTo(tenantAlarm, Const.TENANT_EMAIL); + devicePage.closeDeviceDetailsViewBtn().click(); + devicePage.assignToCustomerBtn(tenantDeviceName).click(); + devicePage.assignToCustomer(customerTitle); loginByUser(userEmail); sideBarMenuView.goToDevicesPage(); - devicePage.openDeviceAlarms(deviceName); - alarmPage.assignBtn(alarm).click(); - try { - alarmPage.assertUsersForAssignIsNotPresent(); - } finally { - clearStorage(); - } + devicePage.openDeviceAlarms(tenantDeviceName); + + clearStorage(); + Assert.assertTrue(alarmPage.assignedUser(Const.TENANT_EMAIL).isDisplayed()); + } + + @Test + public void reassignTenantForOldAlarm() { + sideBarMenuView.goToDevicesPage(); + devicePage.openDeviceAlarms(tenantDeviceName); + alarmPage.assignAlarmTo(tenantAlarm, Const.TENANT_EMAIL); + devicePage.closeDeviceDetailsViewBtn().click(); + devicePage.assignToCustomerBtn(tenantDeviceName).click(); + devicePage.assignToCustomer(customerTitle); + loginByUser(userEmail); + sideBarMenuView.goToDevicesPage(); + devicePage.openDeviceAlarms(tenantDeviceName); + alarmPage.assignAlarmTo(tenantAlarm, userEmail); + + clearStorage(); + Assert.assertTrue(alarmPage.accessForbiddenDialogView().isDisplayed()); + } + + @Test + public void assignCustomerAlarmToYourself() { + sideBarMenuView.customerBtn().click(); + customerPage.openCustomerAlarms(customerTitle); + alarmPage.assignAlarmTo(customerAlarm, userEmail); + + Assert.assertTrue(alarmPage.assignedUser(userEmail).isDisplayed()); } - public WebStorage getWebStorage() { - if (driver instanceof WebStorage) { - return (WebStorage) driver; - } else { - throw new IllegalArgumentException("This test expects the driver to implement WebStorage"); - } + @Test + public void assignAssetAlarmToYourself() { + AssetPageElements assetPageElements = new AssetPageElements(driver); + sideBarMenuView.goToAssetsPage(); + assetPageElements.openAssetAlarms(customerTitle); + alarmPage.assignAlarmTo(assetAlarm, userEmail); + + Assert.assertTrue(alarmPage.assignedUser(userEmail).isDisplayed()); } - public void clearStorage() { - getWebStorage().getLocalStorage().clear(); - getWebStorage().getSessionStorage().clear(); + @Test + public void assignEntityViewsAlarmToYourself() { + AssetPageElements assetPageElements = new AssetPageElements(driver); + sideBarMenuView.goToEntityViewsPage(); + assetPageElements.openAssetAlarms(entityViewName); + alarmPage.assignAlarmTo(entityViewAlarm, userEmail); + + Assert.assertTrue(alarmPage.assignedUser(userEmail).isDisplayed()); } } 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 504980a001..15452506ed 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 @@ -23,9 +23,11 @@ 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.EntityView; import org.thingsboard.server.common.data.User; import org.thingsboard.server.common.data.alarm.Alarm; import org.thingsboard.server.common.data.alarm.AlarmSeverity; +import org.thingsboard.server.common.data.asset.Asset; import org.thingsboard.server.common.data.asset.AssetProfile; import org.thingsboard.server.common.data.device.profile.DefaultDeviceProfileConfiguration; import org.thingsboard.server.common.data.device.profile.DefaultDeviceProfileTransportConfiguration; @@ -177,4 +179,20 @@ public class EntityPrototypes { device.setType("DEFAULT"); return device; } + + public static Asset defaultAssetPrototype(String name, CustomerId id){ + Asset asset = new Asset(); + asset.setName(name + RandomStringUtils.randomAlphanumeric(7)); + asset.setCustomerId(id); + asset.setType("DEFAULT"); + return asset; + } + + public static EntityView defaultEntityViewPrototype(String name, String type, String entityType){ + EntityView entityView = new EntityView(); + entityView.setName(name + RandomStringUtils.randomAlphanumeric(7)); + entityView.setType(type + RandomStringUtils.randomAlphanumeric(7)); + entityView.setAdditionalInfo(JacksonUtil.newObjectNode().put("entityType", entityType)); + return entityView; + } } From c33407bb193ae21a5055b0590ea625ade6e7d92e Mon Sep 17 00:00:00 2001 From: Seraphym-Tuhai Date: Fri, 14 Apr 2023 17:37:39 +0300 Subject: [PATCH 5/8] add AbstractAssignTest class, add assertIsDisplayed(), add assignee.xml suite --- .../server/msa/TestRestClient.java | 27 +- .../msa/ui/base/AbstractDriverBaseTest.java | 5 + .../ui/pages/AlarmDetailsViewElements.java | 3 +- .../msa/ui/pages/AssetPageElements.java | 44 ++++ .../server/msa/ui/pages/EntityViewPage.java | 45 ++++ .../AbstractAssignByCustomerTest.java | 21 -- .../ui/tests/assignee/AbstractAssignTest.java | 99 ++------ .../tests/assignee/AssignByCustomerTest.java | 19 -- .../ui/tests/assignee/AssignDetailsTab.java | 235 ------------------ .../assignee/AssignDetailsTabAssignTest.java | 229 +++++++++++++++++ ...ssignDetailsTabFromCustomerAssignTest.java | 129 ++++++++++ .../src/test/resources/assignee.xml | 36 +++ 12 files changed, 523 insertions(+), 369 deletions(-) create mode 100644 msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/AssetPageElements.java create mode 100644 msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/EntityViewPage.java delete mode 100644 msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/assignee/AbstractAssignByCustomerTest.java delete mode 100644 msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/assignee/AssignByCustomerTest.java delete mode 100644 msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/assignee/AssignDetailsTab.java create mode 100644 msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/assignee/AssignDetailsTabAssignTest.java create mode 100644 msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/assignee/AssignDetailsTabFromCustomerAssignTest.java create mode 100644 msa/black-box-tests/src/test/resources/assignee.xml diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/TestRestClient.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/TestRestClient.java index c34d14e48f..de7f92cfb3 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/TestRestClient.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/TestRestClient.java @@ -430,6 +430,7 @@ public class TestRestClient { .then() .statusCode(HTTP_OK); } + public String getToken() { return token; } @@ -438,18 +439,6 @@ public class TestRestClient { return refreshToken; } - public PageData getTenants(PageLink pageLink) { - Map params = new HashMap<>(); - addPageLinkToParam(params, pageLink); - return given().spec(requestSpec).queryParams(params) - .get("/api/tenants") - .then() - .statusCode(HTTP_OK) - .extract() - .as(new TypeRef>() { - }); - } - public Asset postAsset(Asset asset) { return given().spec(requestSpec) .body(asset) @@ -469,6 +458,13 @@ public class TestRestClient { .as(Asset.class); } + public void deleteAsset(AssetId assetId) { + given().spec(requestSpec) + .delete("/api/asset/{assetId}", assetId.getId()) + .then() + .statusCode(HTTP_OK); + } + public EntityView postEntityView(EntityView entityView) { return given().spec(requestSpec) .body(entityView) @@ -487,4 +483,11 @@ public class TestRestClient { .extract() .as(EntityView.class); } + + public void deleteEntityView(EntityViewId entityViewId) { + given().spec(requestSpec) + .delete("/api/entityView/{entityViewId}", entityViewId.getId()) + .then() + .statusCode(HTTP_OK); + } } 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 aecdc61c03..3073ce506d 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 @@ -50,6 +50,7 @@ import java.net.URL; import java.time.Duration; import java.util.stream.Collectors; +import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.fail; import static org.thingsboard.server.msa.TestProperties.getBaseUiUrl; import static org.thingsboard.server.msa.ui.utils.Const.TENANT_EMAIL; @@ -193,4 +194,8 @@ abstract public class AbstractDriverBaseTest extends AbstractContainerTest { getWebStorage().getLocalStorage().clear(); getWebStorage().getSessionStorage().clear(); } + + public void assertIsDisplayed(WebElement element) { + assertThat(element.isDisplayed()).as(element + " is displayed").isTrue(); + } } diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/AlarmDetailsViewElements.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/AlarmDetailsViewElements.java index 7d88a1ed4f..6e1e38a226 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/AlarmDetailsViewElements.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/AlarmDetailsViewElements.java @@ -24,7 +24,8 @@ public class AlarmDetailsViewElements extends AbstractBasePage { super(driver); } - private static final String ASSIGN_FIELD = "//tb-alarm-assignee//mat-icon[contains(text(),'keyboard_arrow_down')]/parent::button"; + //private static final String ASSIGN_FIELD = "//tb-alarm-assignee//mat-icon[contains(text(),'keyboard_arrow_down')]/parent::button"; + private static final String ASSIGN_FIELD = "//mat-label[text()='Assignee']/parent::label/parent::div//input"; private static final String USER_FROM_DROP_DOWN = "//div[@class='user-display-name']/span[text() = '%s']"; private static final String CLOSE_ALARM_DETAILS_VIEW_BTN = "//mat-dialog-container//mat-icon[contains(text(),'close')]/parent::button"; private static final String UNASSIGNED_BTN = "//div[@role='listbox']//mat-icon[text() = 'account_circle']/following-sibling::span"; diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/AssetPageElements.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/AssetPageElements.java new file mode 100644 index 0000000000..f4424894dd --- /dev/null +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/AssetPageElements.java @@ -0,0 +1,44 @@ +/** + * Copyright © 2016-2023 The Thingsboard Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.server.msa.ui.pages; + +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; + +public class AssetPageElements extends OtherPageElements{ + public AssetPageElements(WebDriver driver) { + super(driver); + } + + private static final String CUSTOMER_DETAILS_VIEW = "//tb-details-panel"; + private static final String CUSTOMER_DETAILS_ALARMS = CUSTOMER_DETAILS_VIEW + "//span[text()='Alarms']"; + + public WebElement customerDetailsView() { + return waitUntilPresenceOfElementLocated(CUSTOMER_DETAILS_VIEW); + } + + public WebElement customerDetailsAlarmsBtn() { + return waitUntilElementToBeClickable(CUSTOMER_DETAILS_ALARMS); + } + + public void openAssetAlarms(String assetName) { + if (!customerDetailsView().isDisplayed()) { + entity(assetName).click(); + } + customerDetailsAlarmsBtn().click(); + } + +} diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/EntityViewPage.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/EntityViewPage.java new file mode 100644 index 0000000000..b62c13d8a7 --- /dev/null +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/EntityViewPage.java @@ -0,0 +1,45 @@ +/** + * Copyright © 2016-2023 The Thingsboard Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.server.msa.ui.pages; + +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; + +public class EntityViewPage extends OtherPageElementsHelper{ + public EntityViewPage(WebDriver driver) { + super(driver); + } + + private static final String CUSTOMER_DETAILS_VIEW = "//tb-details-panel"; + private static final String CUSTOMER_DETAILS_ALARMS = CUSTOMER_DETAILS_VIEW + "//span[text()='Alarms']"; + + public WebElement customerDetailsView() { + return waitUntilPresenceOfElementLocated(CUSTOMER_DETAILS_VIEW); + } + + public WebElement customerDetailsAlarmsBtn() { + return waitUntilElementToBeClickable(CUSTOMER_DETAILS_ALARMS); + } + + + public void openEntityViewAlarms(String customerName) { + if (!customerDetailsView().isDisplayed()) { + entity(customerName).click(); + } + customerDetailsAlarmsBtn().click(); + } + +} diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/assignee/AbstractAssignByCustomerTest.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/assignee/AbstractAssignByCustomerTest.java deleted file mode 100644 index 516abf8ab7..0000000000 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/assignee/AbstractAssignByCustomerTest.java +++ /dev/null @@ -1,21 +0,0 @@ -/** - * Copyright © 2016-2023 The Thingsboard Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.thingsboard.server.msa.ui.tests.assignee; - -import org.thingsboard.server.msa.ui.base.AbstractDriverBaseTest; - -abstract public class AbstractAssignByCustomerTest extends AbstractDriverBaseTest { -} diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/assignee/AbstractAssignTest.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/assignee/AbstractAssignTest.java index 1dfe2b139d..182bf04fb4 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/assignee/AbstractAssignTest.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/assignee/AbstractAssignTest.java @@ -19,12 +19,9 @@ import org.testng.annotations.AfterClass; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeClass; import org.testng.annotations.BeforeMethod; -import org.testng.annotations.DataProvider; import org.thingsboard.server.common.data.id.AlarmId; -import org.thingsboard.server.common.data.id.AssetId; import org.thingsboard.server.common.data.id.CustomerId; import org.thingsboard.server.common.data.id.DeviceId; -import org.thingsboard.server.common.data.id.EntityViewId; import org.thingsboard.server.common.data.id.UserId; import org.thingsboard.server.msa.ui.base.AbstractDriverBaseTest; import org.thingsboard.server.msa.ui.pages.AlarmDetailsViewHelper; @@ -41,117 +38,57 @@ abstract public class AbstractAssignTest extends AbstractDriverBaseTest { protected AlarmId alarmId; protected AlarmId assignedAlarmId; - protected AlarmId propageteAlarmId; - protected AlarmId propageteAssigneAlarmId; - protected AlarmId tenantAlarmId; - protected AlarmId onCustomerAlarmId; - protected AlarmId assetAlarmId; - protected AlarmId entityViewAlarmId; protected DeviceId deviceId; - protected DeviceId tenantDeviceId; + protected UserId userId; protected UserId userWithNameId; protected CustomerId customerId; protected String deviceName; - protected String assetName; - protected String entityViewName; - protected String tenantDeviceName; + protected SideBarMenuViewHelper sideBarMenuView; protected AlarmHelper alarmPage; protected DevicePageHelper devicePage; + protected CustomerPageHelper customerPage; protected AlarmDetailsViewHelper alarmDetailsView; - CustomerPageHelper customerPage; - protected String name = "User"; - protected String customerTitle = "Customer" + random(); + protected String userName = "User " + random(); + protected String customerTitle = "Customer " + random(); protected String userEmail = random() + "@thingsboard.org"; protected String userWithNameEmail = random() + "@thingsboard.org"; - protected String alarm = "Test alarm 1"; - protected String assignedAlarm = "Test alarm 2"; - protected String propagateAlarm = "Test propagated alarm 1"; - protected String propagateAssignedAlarm = "Test propagated alarm 2"; - protected String tenantAlarm = "Test tenant alarm"; - protected String customerAlarm = "Test customer alarm"; - protected String assetAlarm = "Test asset alarm"; - protected String entityViewAlarm = "Test entity view alarm"; - protected AssetId assetId; - protected EntityViewId entityViewId; + protected String alarm = "Test alarm " + random(); + protected String assignedAlarm = "Test assigned alarm " + random(); @BeforeClass - public void generateTestEntities() { + public void generateTestEntity() { new LoginPageHelper(driver).authorizationTenant(); sideBarMenuView = new SideBarMenuViewHelper(driver); alarmPage = new AlarmHelper(driver); devicePage = new DevicePageHelper(driver); - alarmDetailsView = new AlarmDetailsViewHelper(driver); customerPage = new CustomerPageHelper(driver); + alarmDetailsView = new AlarmDetailsViewHelper(driver); customerId = testRestClient.postCustomer(EntityPrototypes.defaultCustomerPrototype(customerTitle)).getId(); userId = testRestClient.postUser(EntityPrototypes.defaultUser(userEmail, getCustomerByName(customerTitle).getId())).getId(); - userWithNameId = testRestClient.postUser(EntityPrototypes.defaultUser(userWithNameEmail, getCustomerByName(customerTitle).getId(), name)).getId(); + userWithNameId = testRestClient.postUser(EntityPrototypes.defaultUser(userWithNameEmail, getCustomerByName(customerTitle).getId(), userName)).getId(); deviceName = testRestClient.postDevice("", EntityPrototypes.defaultDevicePrototype("", customerId)).getName(); - tenantDeviceName = testRestClient.postDevice("", EntityPrototypes.defaultDevicePrototype("")).getName(); deviceId = testRestClient.getDeviceByName(deviceName).getId(); - tenantDeviceId = testRestClient.getDeviceByName(tenantDeviceName).getId(); - onCustomerAlarmId = testRestClient.postAlarm(EntityPrototypes.defaultAlarm(customerId, customerAlarm)).getId(); - assetId = testRestClient.postAsset(EntityPrototypes.defaultAssetPrototype("", customerId)).getId(); - assetName = testRestClient.getAssetById(assetId).getName(); - assetAlarmId = testRestClient.postAlarm(EntityPrototypes.defaultAlarm(assetId, assetAlarm)).getId(); - entityViewId = testRestClient.postEntityView(EntityPrototypes.defaultEntityViewPrototype("", "", "DEVICE")).getId(); - entityViewName = testRestClient.getEntityViewById(entityViewId).getName(); - entityViewAlarmId = testRestClient.postAlarm(EntityPrototypes.defaultAlarm(entityViewId, entityViewAlarm)).getId(); + } + + @AfterClass + public void deleteEntities() { + testRestClient.deleteCustomer(customerId); + testRestClient.deleteDevice(deviceId); } @BeforeMethod - public void generateTestAlarms() { - if (getJwtTokenFromLocalStorage() == null) { - new LoginPageHelper(driver).authorizationTenant(); - } + public void createTestAlarms() { alarmId = testRestClient.postAlarm(EntityPrototypes.defaultAlarm(deviceId, alarm)).getId(); assignedAlarmId = testRestClient.postAlarm(EntityPrototypes.defaultAlarm(deviceId, assignedAlarm, userId)).getId(); - propageteAlarmId = testRestClient.postAlarm(EntityPrototypes.defaultAlarm(deviceId, propagateAlarm, true)).getId(); - propageteAssigneAlarmId = testRestClient.postAlarm(EntityPrototypes.defaultAlarm(deviceId, propagateAssignedAlarm, userId, true)).getId(); - - tenantAlarmId = testRestClient.postAlarm(EntityPrototypes.defaultAlarm(tenantDeviceId, tenantAlarm)).getId(); - - } - - @AfterClass - public void deleteTestEntities() { - testRestClient.deleteDevice(deviceId); - testRestClient.deleteDevice(tenantDeviceId); - testRestClient.deleteCustomer(customerId); - testRestClient.deleteAlarm(onCustomerAlarmId); - testRestClient.deleteAlarm(assetAlarmId); - testRestClient.deleteAlarm(entityViewAlarmId); } @AfterMethod - public void deleteTestAlarms() { + public void deleteCreatedAlarms() { testRestClient.deleteAlarm(alarmId); testRestClient.deleteAlarm(assignedAlarmId); - testRestClient.deleteAlarm(propageteAlarmId); - testRestClient.deleteAlarm(propageteAssigneAlarmId); - testRestClient.deleteAlarm(tenantAlarmId); - } - - public void loginByUser(String userEmail) { - sideBarMenuView.customerBtn().click(); - customerPage.manageCustomersUserBtn(customerTitle).click(); - customerPage.getUserLoginBtnByEmail(userEmail).click(); - } - - @DataProvider - public Object[][] alarms() { - return new Object[][]{ - {alarm}, - {propagateAlarm}}; - } - - @DataProvider - public Object[][] assignedAlarms() { - return new Object[][]{ - {assignedAlarm}, - {propagateAssignedAlarm}}; } } diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/assignee/AssignByCustomerTest.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/assignee/AssignByCustomerTest.java deleted file mode 100644 index e02f0ce45b..0000000000 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/assignee/AssignByCustomerTest.java +++ /dev/null @@ -1,19 +0,0 @@ -/** - * Copyright © 2016-2023 The Thingsboard Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.thingsboard.server.msa.ui.tests.assignee; - -public class AssignByCustomerTest extends AbstractAssignByCustomerTest{ -} diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/assignee/AssignDetailsTab.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/assignee/AssignDetailsTab.java deleted file mode 100644 index 9781ef6417..0000000000 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/assignee/AssignDetailsTab.java +++ /dev/null @@ -1,235 +0,0 @@ -/** - * Copyright © 2016-2023 The Thingsboard Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.thingsboard.server.msa.ui.tests.assignee; - -import org.testng.Assert; -import org.testng.annotations.Test; -import org.thingsboard.server.msa.ui.pages.AssetPageElements; -import org.thingsboard.server.msa.ui.utils.Const; - -import static org.assertj.core.api.Assertions.assertThat; - -public class AssignDetailsTab extends AbstractAssignTest { - - @Test(dataProvider = "alarms") - public void assignAlarmToYourself(String alarm) { - sideBarMenuView.goToDevicesPage(); - devicePage.openDeviceAlarms(deviceName); - alarmPage.assignAlarmTo(alarm, Const.TENANT_EMAIL); - - Assert.assertTrue(alarmPage.assignedUser(Const.TENANT_EMAIL).isDisplayed()); - } - - @Test(dataProvider = "alarms") - public void assignAlarmToAnotherUser(String alarm) { - sideBarMenuView.goToDevicesPage(); - devicePage.openDeviceAlarms(deviceName); - alarmPage.assignAlarmTo(alarm, userEmail); - - Assert.assertTrue(alarmPage.assignedUser(userEmail).isDisplayed()); - } - - @Test(dataProvider = "assignedAlarms") - public void unassignedAlarm(String assignedAlarm) { - sideBarMenuView.goToDevicesPage(); - devicePage.openDeviceAlarms(deviceName); - alarmPage.unassignedAlarm(assignedAlarm); - - Assert.assertTrue(alarmPage.unassigned(assignedAlarm).isDisplayed()); - } - - @Test(dataProvider = "assignedAlarms") - public void reassignAlarm(String assignedAlarm) { - sideBarMenuView.goToDevicesPage(); - devicePage.openDeviceAlarms(deviceName); - alarmPage.assignAlarmTo(assignedAlarm, Const.TENANT_EMAIL); - - Assert.assertTrue(alarmPage.assignedUser(Const.TENANT_EMAIL).isDisplayed()); - } - - @Test - public void searchByEmail() { - sideBarMenuView.goToDevicesPage(); - devicePage.openDeviceAlarms(deviceName); - alarmPage.searchAlarm(alarm, Const.TENANT_EMAIL); - alarmPage.setUsers(); - - assertThat(alarmPage.getUsers()).hasSize(1).contains(Const.TENANT_EMAIL); - alarmPage.assignUsers().forEach(u -> assertThat(u.isDisplayed()).isTrue()); - } - - @Test - public void searchByName() { - sideBarMenuView.goToDevicesPage(); - devicePage.openDeviceAlarms(deviceName); - alarmPage.searchAlarm(alarm, name); - alarmPage.setUsers(); - - //assertThat(alarmPage.getUsers()).hasSize(1).contains(name); - alarmPage.assignUsers().forEach(u -> assertThat(u.isDisplayed()).isTrue()); - } - - @Test - public void assignAlarmToYourselfFromDetails() { - sideBarMenuView.goToDevicesPage(); - devicePage.openDeviceAlarms(deviceName); - alarmPage.alarmDetailsBtn(alarm).click(); - alarmDetailsView.assignAlarmTo(Const.TENANT_EMAIL); - alarmDetailsView.closeAlarmDetailsViewBtn().click(); - - Assert.assertTrue(alarmPage.assignedUser(Const.TENANT_EMAIL).isDisplayed()); - } - - @Test - public void assignAlarmToAnotherUserFromDetails() { - sideBarMenuView.goToDevicesPage(); - devicePage.openDeviceAlarms(deviceName); - alarmPage.alarmDetailsBtn(alarm).click(); - alarmDetailsView.assignAlarmTo(userEmail); - alarmDetailsView.closeAlarmDetailsViewBtn().click(); - - Assert.assertTrue(alarmPage.assignedUser(userEmail).isDisplayed()); - } - - @Test - public void unassignedAlarmFromDetails() { - sideBarMenuView.goToDevicesPage(); - devicePage.openDeviceAlarms(deviceName); - alarmPage.alarmDetailsBtn(assignedAlarm).click(); - alarmDetailsView.unassignedAlarm(); - alarmDetailsView.closeAlarmDetailsViewBtn().click(); - - Assert.assertTrue(alarmPage.unassigned(assignedAlarm).isDisplayed()); - } - - @Test - public void reassignAlarmFromDetails() { - sideBarMenuView.goToDevicesPage(); - devicePage.openDeviceAlarms(deviceName); - alarmPage.alarmDetailsBtn(assignedAlarm).click(); - alarmDetailsView.assignAlarmTo(Const.TENANT_EMAIL); - alarmDetailsView.closeAlarmDetailsViewBtn().click(); - - Assert.assertTrue(alarmPage.assignedUser(Const.TENANT_EMAIL).isDisplayed()); - } - - @Test - public void assignAlarmToYourselfCustomer() { - loginByUser(userEmail); - sideBarMenuView.goToDevicesPage(); - devicePage.openDeviceAlarms(deviceName); - alarmPage.assignAlarmTo(alarm, userEmail); - clearStorage(); - - Assert.assertTrue(alarmPage.assignedUser(userEmail).isDisplayed()); - } - - @Test - public void reassignAlarmByCustomerFromAnotherCustomerUser() { - loginByUser(userWithNameEmail); - sideBarMenuView.goToDevicesPage(); - devicePage.openDeviceAlarms(deviceName); - alarmPage.assignAlarmTo(assignedAlarm, name); - clearStorage(); - - Assert.assertTrue(alarmPage.assignedUser(name).isDisplayed()); - } - - @Test - public void unassignedAlarmFromCustomer() { - loginByUser(userWithNameEmail); - sideBarMenuView.goToDevicesPage(); - devicePage.openDeviceAlarms(deviceName); - alarmPage.unassignedAlarm(assignedAlarm); - clearStorage(); - - Assert.assertTrue(alarmPage.unassigned(assignedAlarm).isDisplayed()); - } - - @Test - public void unassignedAlarmFromAnotherUserFromCustomer() { - loginByUser(userEmail); - sideBarMenuView.goToDevicesPage(); - devicePage.openDeviceAlarms(deviceName); - alarmPage.unassignedAlarm(assignedAlarm); - clearStorage(); - - Assert.assertTrue(alarmPage.unassigned(assignedAlarm).isDisplayed()); - } - - @Test - public void checkTheDisplayOfNamesEmailsFromCustomer() { - sideBarMenuView.goToDevicesPage(); - devicePage.openDeviceAlarms(tenantDeviceName); - alarmPage.assignAlarmTo(tenantAlarm, Const.TENANT_EMAIL); - devicePage.closeDeviceDetailsViewBtn().click(); - devicePage.assignToCustomerBtn(tenantDeviceName).click(); - devicePage.assignToCustomer(customerTitle); - loginByUser(userEmail); - sideBarMenuView.goToDevicesPage(); - devicePage.openDeviceAlarms(tenantDeviceName); - - clearStorage(); - Assert.assertTrue(alarmPage.assignedUser(Const.TENANT_EMAIL).isDisplayed()); - } - - @Test - public void reassignTenantForOldAlarm() { - sideBarMenuView.goToDevicesPage(); - devicePage.openDeviceAlarms(tenantDeviceName); - alarmPage.assignAlarmTo(tenantAlarm, Const.TENANT_EMAIL); - devicePage.closeDeviceDetailsViewBtn().click(); - devicePage.assignToCustomerBtn(tenantDeviceName).click(); - devicePage.assignToCustomer(customerTitle); - loginByUser(userEmail); - sideBarMenuView.goToDevicesPage(); - devicePage.openDeviceAlarms(tenantDeviceName); - alarmPage.assignAlarmTo(tenantAlarm, userEmail); - - clearStorage(); - Assert.assertTrue(alarmPage.accessForbiddenDialogView().isDisplayed()); - } - - @Test - public void assignCustomerAlarmToYourself() { - sideBarMenuView.customerBtn().click(); - customerPage.openCustomerAlarms(customerTitle); - alarmPage.assignAlarmTo(customerAlarm, userEmail); - - Assert.assertTrue(alarmPage.assignedUser(userEmail).isDisplayed()); - } - - @Test - public void assignAssetAlarmToYourself() { - AssetPageElements assetPageElements = new AssetPageElements(driver); - sideBarMenuView.goToAssetsPage(); - assetPageElements.openAssetAlarms(customerTitle); - alarmPage.assignAlarmTo(assetAlarm, userEmail); - - Assert.assertTrue(alarmPage.assignedUser(userEmail).isDisplayed()); - } - - @Test - public void assignEntityViewsAlarmToYourself() { - AssetPageElements assetPageElements = new AssetPageElements(driver); - sideBarMenuView.goToEntityViewsPage(); - assetPageElements.openAssetAlarms(entityViewName); - alarmPage.assignAlarmTo(entityViewAlarm, userEmail); - - Assert.assertTrue(alarmPage.assignedUser(userEmail).isDisplayed()); - } - -} diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/assignee/AssignDetailsTabAssignTest.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/assignee/AssignDetailsTabAssignTest.java new file mode 100644 index 0000000000..5f65c94810 --- /dev/null +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/assignee/AssignDetailsTabAssignTest.java @@ -0,0 +1,229 @@ +/** + * Copyright © 2016-2023 The Thingsboard Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.server.msa.ui.tests.assignee; + +import org.testng.annotations.AfterClass; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.DataProvider; +import org.testng.annotations.Test; +import org.thingsboard.server.common.data.id.AlarmId; +import org.thingsboard.server.common.data.id.AssetId; +import org.thingsboard.server.common.data.id.EntityViewId; +import org.thingsboard.server.msa.ui.pages.AssetPageElements; +import org.thingsboard.server.msa.ui.pages.EntityViewPage; +import org.thingsboard.server.msa.ui.utils.Const; +import org.thingsboard.server.msa.ui.utils.EntityPrototypes; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.thingsboard.server.msa.ui.base.AbstractBasePage.random; + +public class AssignDetailsTabAssignTest extends AbstractAssignTest { + + private AlarmId propageteAlarmId; + private AlarmId propageteAssigneAlarmId; + private AlarmId customerAlarmId; + private AlarmId assetAlarmId; + private AlarmId entityViewAlarmId; + private String assetName; + private String entityViewName; + private final String propagateAlarm = "Test propagated alarm 1 " + random(); + private final String propagateAssignedAlarm = "Test propagated alarm 2 " + random(); + private final String customerAlarm = "Test customer alarm" + random(); + private final String assetAlarm = "Test asset alarm" + random(); + private final String entityViewAlarm = "Test entity view alarm" + random(); + private AssetId assetId; + private EntityViewId entityViewId; + + @BeforeClass + public void generateTestEntities() { + customerAlarmId = testRestClient.postAlarm(EntityPrototypes.defaultAlarm(customerId, customerAlarm)).getId(); + assetId = testRestClient.postAsset(EntityPrototypes.defaultAssetPrototype("", customerId)).getId(); + assetName = testRestClient.getAssetById(assetId).getName(); + assetAlarmId = testRestClient.postAlarm(EntityPrototypes.defaultAlarm(assetId, assetAlarm)).getId(); + entityViewId = testRestClient.postEntityView(EntityPrototypes.defaultEntityViewPrototype("", "", "DEVICE")).getId(); + entityViewName = testRestClient.getEntityViewById(entityViewId).getName(); + entityViewAlarmId = testRestClient.postAlarm(EntityPrototypes.defaultAlarm(entityViewId, entityViewAlarm)).getId(); + } + + @BeforeMethod + public void generateTestAlarms() { + propageteAlarmId = testRestClient.postAlarm(EntityPrototypes.defaultAlarm(deviceId, propagateAlarm, true)).getId(); + propageteAssigneAlarmId = testRestClient.postAlarm(EntityPrototypes.defaultAlarm(deviceId, propagateAssignedAlarm, userId, true)).getId(); + } + + @AfterClass + public void deleteTestEntities() { + testRestClient.deleteAlarm(customerAlarmId); + testRestClient.deleteAlarm(assetAlarmId); + testRestClient.deleteAlarm(entityViewAlarmId); + testRestClient.deleteAsset(assetId); + testRestClient.deleteEntityView(entityViewId); + } + + @AfterMethod + public void deleteTestAlarms() { + testRestClient.deleteAlarm(propageteAlarmId); + testRestClient.deleteAlarm(propageteAssigneAlarmId); + } + + @DataProvider + public Object[][] alarms() { + return new Object[][]{ + {alarm}, + {propagateAlarm}}; + } + + @DataProvider + public Object[][] assignedAlarms() { + return new Object[][]{ + {assignedAlarm}, + {propagateAssignedAlarm}}; + } + + @Test(dataProvider = "alarms") + public void assignAlarmToYourself(String alarm) { + sideBarMenuView.goToDevicesPage(); + devicePage.openDeviceAlarms(deviceName); + alarmPage.assignAlarmTo(alarm, Const.TENANT_EMAIL); + + assertIsDisplayed(alarmPage.assignedUser(Const.TENANT_EMAIL)); + } + + @Test(dataProvider = "alarms") + public void assignAlarmToAnotherUser(String alarm) { + sideBarMenuView.goToDevicesPage(); + devicePage.openDeviceAlarms(deviceName); + alarmPage.assignAlarmTo(alarm, userEmail); + + assertIsDisplayed(alarmPage.assignedUser(userEmail)); + } + + @Test(dataProvider = "assignedAlarms") + public void unassignedAlarm(String assignedAlarm) { + sideBarMenuView.goToDevicesPage(); + devicePage.openDeviceAlarms(deviceName); + alarmPage.unassignedAlarm(assignedAlarm); + + assertIsDisplayed(alarmPage.unassigned(assignedAlarm)); + } + + @Test(dataProvider = "assignedAlarms") + public void reassignAlarm(String assignedAlarm) { + sideBarMenuView.goToDevicesPage(); + devicePage.openDeviceAlarms(deviceName); + alarmPage.assignAlarmTo(assignedAlarm, Const.TENANT_EMAIL); + + assertIsDisplayed(alarmPage.assignedUser(Const.TENANT_EMAIL)); + } + + @Test + public void searchByEmail() { + sideBarMenuView.goToDevicesPage(); + devicePage.openDeviceAlarms(deviceName); + alarmPage.searchAlarm(alarm, Const.TENANT_EMAIL); + alarmPage.setUsers(); + + assertThat(alarmPage.getUsers()).hasSize(1).as("Search result contains search input").contains(Const.TENANT_EMAIL); + alarmPage.assignUsers().forEach(this::assertIsDisplayed); + } + + @Test(groups = "broken") + public void searchByName() { + sideBarMenuView.goToDevicesPage(); + devicePage.openDeviceAlarms(deviceName); + alarmPage.searchAlarm(alarm, userName); + alarmPage.setUsers(); + + assertThat(alarmPage.getUsers()).hasSize(1).as("Search result contains search input").contains(userName); + alarmPage.assignUsers().forEach(this::assertIsDisplayed); + } + + @Test + public void assignAlarmToYourselfFromDetails() { + sideBarMenuView.goToDevicesPage(); + devicePage.openDeviceAlarms(deviceName); + alarmPage.alarmDetailsBtn(alarm).click(); + alarmDetailsView.assignAlarmTo(Const.TENANT_EMAIL); + alarmDetailsView.closeAlarmDetailsViewBtn().click(); + + assertIsDisplayed(alarmPage.assignedUser(Const.TENANT_EMAIL)); + } + + @Test + public void assignAlarmToAnotherUserFromDetails() { + sideBarMenuView.goToDevicesPage(); + devicePage.openDeviceAlarms(deviceName); + alarmPage.alarmDetailsBtn(alarm).click(); + alarmDetailsView.assignAlarmTo(userEmail); + alarmDetailsView.closeAlarmDetailsViewBtn().click(); + + assertIsDisplayed(alarmPage.assignedUser(userEmail)); + } + + @Test + public void unassignedAlarmFromDetails() { + sideBarMenuView.goToDevicesPage(); + devicePage.openDeviceAlarms(deviceName); + alarmPage.alarmDetailsBtn(assignedAlarm).click(); + alarmDetailsView.unassignedAlarm(); + alarmDetailsView.closeAlarmDetailsViewBtn().click(); + + assertIsDisplayed(alarmPage.unassigned(assignedAlarm)); + } + + @Test + public void reassignAlarmFromDetails() { + sideBarMenuView.goToDevicesPage(); + devicePage.openDeviceAlarms(deviceName); + alarmPage.alarmDetailsBtn(assignedAlarm).click(); + alarmDetailsView.assignAlarmTo(Const.TENANT_EMAIL); + alarmDetailsView.closeAlarmDetailsViewBtn().click(); + + assertIsDisplayed(alarmPage.assignedUser(Const.TENANT_EMAIL)); + } + + @Test + public void assignCustomerAlarmToYourself() { + sideBarMenuView.customerBtn().click(); + customerPage.openCustomerAlarms(customerTitle); + alarmPage.assignAlarmTo(customerAlarm, Const.TENANT_EMAIL); + + assertIsDisplayed(alarmPage.assignedUser(Const.TENANT_EMAIL)); + } + + @Test + public void assignAssetAlarmToYourself() { + AssetPageElements assetPageElements = new AssetPageElements(driver); + sideBarMenuView.goToAssetsPage(); + assetPageElements.openAssetAlarms(assetName); + alarmPage.assignAlarmTo(assetAlarm, Const.TENANT_EMAIL); + + assertIsDisplayed(alarmPage.assignedUser(Const.TENANT_EMAIL)); + } + + @Test + public void assignEntityViewsAlarmToYourself() { + EntityViewPage entityViewPage = new EntityViewPage(driver); + sideBarMenuView.goToEntityViewsPage(); + entityViewPage.openEntityViewAlarms(entityViewName); + alarmPage.assignAlarmTo(entityViewAlarm, Const.TENANT_EMAIL); + + assertIsDisplayed(alarmPage.assignedUser(Const.TENANT_EMAIL)); + } + +} diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/assignee/AssignDetailsTabFromCustomerAssignTest.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/assignee/AssignDetailsTabFromCustomerAssignTest.java new file mode 100644 index 0000000000..7696b4cbe8 --- /dev/null +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/assignee/AssignDetailsTabFromCustomerAssignTest.java @@ -0,0 +1,129 @@ +/** + * Copyright © 2016-2023 The Thingsboard Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.server.msa.ui.tests.assignee; + +import org.testng.annotations.AfterMethod; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.Test; +import org.thingsboard.server.common.data.id.AlarmId; +import org.thingsboard.server.common.data.id.DeviceId; +import org.thingsboard.server.msa.ui.pages.LoginPageHelper; +import org.thingsboard.server.msa.ui.utils.Const; +import org.thingsboard.server.msa.ui.utils.EntityPrototypes; + +import static org.thingsboard.server.msa.ui.base.AbstractBasePage.random; + +public class AssignDetailsTabFromCustomerAssignTest extends AbstractAssignTest { + + AlarmId tenantAlarmId; + DeviceId tenantDeviceId; + String tenantDeviceName; + String tenantAlarm = "Test tenant alarm " + random(); + + public void loginByUser(String userEmail) { + sideBarMenuView.customerBtn().click(); + customerPage.manageCustomersUserBtn(customerTitle).click(); + customerPage.getUserLoginBtnByEmail(userEmail).click(); + } + + @BeforeMethod + public void generateTenantEntity() { + if (getJwtTokenFromLocalStorage() == null) { + new LoginPageHelper(driver).authorizationTenant(); + } + tenantDeviceName = testRestClient.postDevice("", EntityPrototypes.defaultDevicePrototype("")).getName(); + tenantDeviceId = testRestClient.getDeviceByName(tenantDeviceName).getId(); + tenantAlarmId = testRestClient.postAlarm(EntityPrototypes.defaultAlarm(tenantDeviceId, tenantAlarm)).getId(); + } + + @AfterMethod + public void clear() { + testRestClient.deleteAlarm(tenantAlarmId); + testRestClient.deleteDevice(tenantDeviceId); + clearStorage(); + } + + @Test + public void assignAlarmToYourselfCustomer() { + loginByUser(userEmail); + sideBarMenuView.goToDevicesPage(); + devicePage.openDeviceAlarms(deviceName); + alarmPage.assignAlarmTo(alarm, userEmail); + + assertIsDisplayed(alarmPage.assignedUser(userEmail)); + } + + @Test + public void reassignAlarmByCustomerFromAnotherCustomerUser() { + loginByUser(userWithNameEmail); + sideBarMenuView.goToDevicesPage(); + devicePage.openDeviceAlarms(deviceName); + alarmPage.assignAlarmTo(assignedAlarm, userName); + + assertIsDisplayed(alarmPage.assignedUser(userName)); + } + + @Test + public void unassignedAlarmFromCustomer() { + loginByUser(userWithNameEmail); + sideBarMenuView.goToDevicesPage(); + devicePage.openDeviceAlarms(deviceName); + alarmPage.unassignedAlarm(assignedAlarm); + + assertIsDisplayed(alarmPage.unassigned(assignedAlarm)); + } + + @Test + public void unassignedAlarmFromAnotherUserFromCustomer() { + loginByUser(userEmail); + sideBarMenuView.goToDevicesPage(); + devicePage.openDeviceAlarms(deviceName); + alarmPage.unassignedAlarm(assignedAlarm); + + assertIsDisplayed(alarmPage.unassigned(assignedAlarm)); + } + + @Test + public void checkTheDisplayOfNamesEmailsFromCustomer() { + sideBarMenuView.goToDevicesPage(); + devicePage.openDeviceAlarms(tenantDeviceName); + alarmPage.assignAlarmTo(tenantAlarm, Const.TENANT_EMAIL); + devicePage.closeDeviceDetailsViewBtn().click(); + devicePage.assignToCustomerBtn(tenantDeviceName).click(); + devicePage.assignToCustomer(customerTitle); + loginByUser(userEmail); + sideBarMenuView.goToDevicesPage(); + devicePage.openDeviceAlarms(tenantDeviceName); + + assertIsDisplayed(alarmPage.assignedUser(Const.TENANT_EMAIL)); + } + + @Test + public void reassignTenantForOldAlarm() { + sideBarMenuView.goToDevicesPage(); + devicePage.openDeviceAlarms(tenantDeviceName); + alarmPage.assignAlarmTo(tenantAlarm, Const.TENANT_EMAIL); + devicePage.closeDeviceDetailsViewBtn().click(); + devicePage.assignToCustomerBtn(tenantDeviceName).click(); + devicePage.assignToCustomer(customerTitle); + loginByUser(userEmail); + sideBarMenuView.goToDevicesPage(); + devicePage.openDeviceAlarms(tenantDeviceName); + alarmPage.assignBtn(tenantAlarm).click(); + + assertIsDisplayed(alarmPage.accessForbiddenDialogView()); + } +} diff --git a/msa/black-box-tests/src/test/resources/assignee.xml b/msa/black-box-tests/src/test/resources/assignee.xml new file mode 100644 index 0000000000..52499824cd --- /dev/null +++ b/msa/black-box-tests/src/test/resources/assignee.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From 2eecf7f066f02901ca8536afd899d4c6ff73edb1 Mon Sep 17 00:00:00 2001 From: Seraphym-Tuhai Date: Tue, 18 Apr 2023 13:52:49 +0300 Subject: [PATCH 6/8] refactoring --- .../msa/ui/base/AbstractDriverBaseTest.java | 40 +++++----- ...ava => AlarmDetailsEntityTabElements.java} | 9 ++- ....java => AlarmDetailsEntityTabHelper.java} | 9 +-- .../ui/pages/AlarmDetailsViewElements.java | 1 - .../msa/ui/pages/AlarmDetailsViewHelper.java | 2 +- .../msa/ui/pages/AssetPageElements.java | 21 ++--- .../server/msa/ui/pages/AssetPageHelper.java | 32 ++++++++ .../msa/ui/pages/DevicePageElements.java | 3 +- .../msa/ui/pages/EntityViewPageElements.java | 37 +++++++++ ...iewPage.java => EntityViewPageHelper.java} | 21 +---- .../server/msa/ui/pages/LoginPageHelper.java | 16 +--- .../ui/tests/assignee/AbstractAssignTest.java | 48 +++++++----- .../assignee/AssignDetailsTabAssignTest.java | 77 +++++++++++-------- ...ssignDetailsTabFromCustomerAssignTest.java | 39 +++++----- .../msa/ui/utils/DataProviderCredential.java | 1 - .../src/test/resources/assignee.xml | 4 +- 16 files changed, 212 insertions(+), 148 deletions(-) rename msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/{AlarmElements.java => AlarmDetailsEntityTabElements.java} (90%) rename msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/{AlarmHelper.java => AlarmDetailsEntityTabHelper.java} (88%) create mode 100644 msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/AssetPageHelper.java create mode 100644 msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/EntityViewPageElements.java rename msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/{EntityViewPage.java => EntityViewPageHelper.java} (55%) 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 3073ce506d..195d3367b8 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 @@ -48,6 +48,7 @@ import java.io.ByteArrayInputStream; import java.net.MalformedURLException; import java.net.URL; import java.time.Duration; +import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; import static org.assertj.core.api.Assertions.assertThat; @@ -64,9 +65,12 @@ abstract public class AbstractDriverBaseTest extends AbstractContainerTest { private static final int WIDTH = 1680; private static final int HEIGHT = 1050; private static final String REMOTE_WEBDRIVER_HOST = "http://localhost:4444"; - protected static final PageLink pageLink = new PageLink(10); - private static final ContainerTestSuite instance = ContainerTestSuite.getInstance(); + protected final PageLink pageLink = new PageLink(10); + private final ContainerTestSuite instance = ContainerTestSuite.getInstance(); private JavascriptExecutor js; + public static final long WAIT_TIMEOUT = TimeUnit.SECONDS.toMillis(10); + private final Duration duration = Duration.ofMillis(WAIT_TIMEOUT); + private WebStorage webStorage; @BeforeClass public void startUp() throws MalformedURLException { @@ -104,8 +108,7 @@ abstract public class AbstractDriverBaseTest extends AbstractContainerTest { } public String getJwtTokenFromLocalStorage() { - js = (JavascriptExecutor) driver; - return (String) js.executeScript("return window.localStorage.getItem('jwt_token');"); + return (String) getJs().executeScript("return window.localStorage.getItem('jwt_token');"); } public void openBaseUiUrl() { @@ -121,7 +124,7 @@ abstract public class AbstractDriverBaseTest extends AbstractContainerTest { } protected boolean urlContains(String urlPath) { - WebDriverWait wait = new WebDriverWait(driver, Duration.ofMillis(5000)); + WebDriverWait wait = new WebDriverWait(driver, duration); try { wait.until(ExpectedConditions.urlContains(urlPath)); } catch (WebDriverException e) { @@ -131,11 +134,10 @@ abstract public class AbstractDriverBaseTest extends AbstractContainerTest { } public void jsClick(WebElement element) { - js = (JavascriptExecutor) driver; - js.executeScript("arguments[0].click();", element); + getJs().executeScript("arguments[0].click();", element); } - public static RuleChain getRuleChainByName(String name) { + public RuleChain getRuleChainByName(String name) { try { return testRestClient.getRuleChains(pageLink).getData().stream() .filter(s -> s.getName().equals(name)).collect(Collectors.toList()).get(0); @@ -145,7 +147,7 @@ abstract public class AbstractDriverBaseTest extends AbstractContainerTest { } } - public static Customer getCustomerByName(String name) { + public Customer getCustomerByName(String name) { try { return testRestClient.getCustomers(pageLink).getData().stream() .filter(x -> x.getName().equals(name)).collect(Collectors.toList()).get(0); @@ -155,7 +157,7 @@ abstract public class AbstractDriverBaseTest extends AbstractContainerTest { } } - public static DeviceProfile getDeviceProfileByName(String name) { + public DeviceProfile getDeviceProfileByName(String name) { try { return testRestClient.getDeviceProfiles(pageLink).getData().stream() .filter(x -> x.getName().equals(name)).collect(Collectors.toList()).get(0); @@ -165,7 +167,7 @@ abstract public class AbstractDriverBaseTest extends AbstractContainerTest { } } - public static AssetProfile getAssetProfileByName(String name) { + public AssetProfile getAssetProfileByName(String name) { try { return testRestClient.getAssetProfiles(pageLink).getData().stream() .filter(x -> x.getName().equals(name)).collect(Collectors.toList()).get(0); @@ -182,14 +184,6 @@ abstract public class AbstractDriverBaseTest extends AbstractContainerTest { } } - public WebStorage getWebStorage() { - if (driver instanceof WebStorage) { - return (WebStorage) driver; - } else { - throw new IllegalArgumentException("This test expects the driver to implement WebStorage"); - } - } - public void clearStorage() { getWebStorage().getLocalStorage().clear(); getWebStorage().getSessionStorage().clear(); @@ -198,4 +192,12 @@ abstract public class AbstractDriverBaseTest extends AbstractContainerTest { public void assertIsDisplayed(WebElement element) { assertThat(element.isDisplayed()).as(element + " is displayed").isTrue(); } + + public JavascriptExecutor getJs() { + return js = (JavascriptExecutor) driver; + } + + public WebStorage getWebStorage() { + return webStorage = (WebStorage) driver; + } } diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/AlarmElements.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/AlarmDetailsEntityTabElements.java similarity index 90% rename from msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/AlarmElements.java rename to msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/AlarmDetailsEntityTabElements.java index 87baef8594..318b59965b 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/AlarmElements.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/AlarmDetailsEntityTabElements.java @@ -20,8 +20,8 @@ import org.openqa.selenium.WebElement; import java.util.List; -public class AlarmElements extends OtherPageElements{ - public AlarmElements(WebDriver driver) { +public class AlarmDetailsEntityTabElements extends OtherPageElements { + public AlarmDetailsEntityTabElements(WebDriver driver) { super(driver); } @@ -34,6 +34,7 @@ public class AlarmElements extends OtherPageElements{ private static final String UNASSIGNED = "//span[text() = '%s']/ancestor::mat-row//span[@class='assignee-cell']/mat-icon[text() = 'account_circle']/following-sibling::span"; private static final String ALARM_DETAILS_BTN = "//span[text() = '%s']/ancestor::mat-row//mat-icon[contains(text(),'more_horiz')]/parent::button"; private static final String ACCESS_FORBIDDEN_DIALOG_VIEW = "//h2[text() = 'Access Forbidden']/parent::tb-confirm-dialog"; + private static final String ALARM_ASSIGNEE_DROPDOWN = "//tb-alarm-assignee-panel"; public WebElement assignBtn(String type) { return waitUntilElementToBeClickable(String.format(ASSIGN_BTN, type)); @@ -70,4 +71,8 @@ public class AlarmElements extends OtherPageElements{ public WebElement accessForbiddenDialogView() { return waitUntilVisibilityOfElementLocated(ACCESS_FORBIDDEN_DIALOG_VIEW); } + + public WebElement alarmAssigneeDropdown() { + return waitUntilVisibilityOfElementLocated(ALARM_ASSIGNEE_DROPDOWN); + } } diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/AlarmHelper.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/AlarmDetailsEntityTabHelper.java similarity index 88% rename from msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/AlarmHelper.java rename to msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/AlarmDetailsEntityTabHelper.java index 7abb0006db..eac0ab889e 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/AlarmHelper.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/AlarmDetailsEntityTabHelper.java @@ -17,13 +17,12 @@ package org.thingsboard.server.msa.ui.pages; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; -import org.thingsboard.server.msa.ui.utils.Const; import java.util.List; import java.util.stream.Collectors; -public class AlarmHelper extends AlarmElements { - public AlarmHelper(WebDriver driver) { +public class AlarmDetailsEntityTabHelper extends AlarmDetailsEntityTabElements { + public AlarmDetailsEntityTabHelper(WebDriver driver) { super(driver); } @@ -33,12 +32,12 @@ public class AlarmHelper extends AlarmElements { } public void unassignedAlarm(String alarmType) { - assignBtn(alarmType).click(); + jsClick(assignBtn(alarmType)); unassignedBtn().click(); } public void searchAlarm(String alarmType, String emailOrName) { - assignBtn(alarmType).click(); + jsClick(assignBtn(alarmType)); searchUserField().sendKeys(emailOrName); } diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/AlarmDetailsViewElements.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/AlarmDetailsViewElements.java index 6e1e38a226..ced7ef43fc 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/AlarmDetailsViewElements.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/AlarmDetailsViewElements.java @@ -24,7 +24,6 @@ public class AlarmDetailsViewElements extends AbstractBasePage { super(driver); } - //private static final String ASSIGN_FIELD = "//tb-alarm-assignee//mat-icon[contains(text(),'keyboard_arrow_down')]/parent::button"; private static final String ASSIGN_FIELD = "//mat-label[text()='Assignee']/parent::label/parent::div//input"; private static final String USER_FROM_DROP_DOWN = "//div[@class='user-display-name']/span[text() = '%s']"; private static final String CLOSE_ALARM_DETAILS_VIEW_BTN = "//mat-dialog-container//mat-icon[contains(text(),'close')]/parent::button"; diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/AlarmDetailsViewHelper.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/AlarmDetailsViewHelper.java index 89d572cf3c..63266804c1 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/AlarmDetailsViewHelper.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/AlarmDetailsViewHelper.java @@ -17,7 +17,7 @@ package org.thingsboard.server.msa.ui.pages; import org.openqa.selenium.WebDriver; -public class AlarmDetailsViewHelper extends AlarmDetailsViewElements{ +public class AlarmDetailsViewHelper extends AlarmDetailsViewElements { public AlarmDetailsViewHelper(WebDriver driver) { super(driver); } diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/AssetPageElements.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/AssetPageElements.java index f4424894dd..2c54cd4682 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/AssetPageElements.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/AssetPageElements.java @@ -18,27 +18,20 @@ package org.thingsboard.server.msa.ui.pages; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; -public class AssetPageElements extends OtherPageElements{ +public class AssetPageElements extends OtherPageElements { public AssetPageElements(WebDriver driver) { super(driver); } - private static final String CUSTOMER_DETAILS_VIEW = "//tb-details-panel"; - private static final String CUSTOMER_DETAILS_ALARMS = CUSTOMER_DETAILS_VIEW + "//span[text()='Alarms']"; + private static final String ASSET_DETAILS_VIEW = "//tb-details-panel"; + private static final String ASSET_DETAILS_ALARMS = ASSET_DETAILS_VIEW + "//span[text()='Alarms']"; - public WebElement customerDetailsView() { - return waitUntilPresenceOfElementLocated(CUSTOMER_DETAILS_VIEW); + public WebElement assetDetailsView() { + return waitUntilPresenceOfElementLocated(ASSET_DETAILS_VIEW); } - public WebElement customerDetailsAlarmsBtn() { - return waitUntilElementToBeClickable(CUSTOMER_DETAILS_ALARMS); - } - - public void openAssetAlarms(String assetName) { - if (!customerDetailsView().isDisplayed()) { - entity(assetName).click(); - } - customerDetailsAlarmsBtn().click(); + public WebElement assetDetailsAlarmsBtn() { + return waitUntilElementToBeClickable(ASSET_DETAILS_ALARMS); } } diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/AssetPageHelper.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/AssetPageHelper.java new file mode 100644 index 0000000000..4e7a8c04e7 --- /dev/null +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/AssetPageHelper.java @@ -0,0 +1,32 @@ +/** + * Copyright © 2016-2023 The Thingsboard Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.server.msa.ui.pages; + +import org.openqa.selenium.WebDriver; + +public class AssetPageHelper extends AssetPageElements { + public AssetPageHelper(WebDriver driver) { + super(driver); + } + + public void openAssetAlarms(String assetName) { + if (!assetDetailsView().isDisplayed()) { + entity(assetName).click(); + } + assetDetailsAlarmsBtn().click(); + } + +} diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/DevicePageElements.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/DevicePageElements.java index f5e6c2800a..b8fbda5135 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/DevicePageElements.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/DevicePageElements.java @@ -18,7 +18,7 @@ package org.thingsboard.server.msa.ui.pages; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; -public class DevicePageElements extends OtherPageElements{ +public class DevicePageElements extends OtherPageElements { public DevicePageElements(WebDriver driver) { super(driver); } @@ -32,6 +32,7 @@ public class DevicePageElements extends OtherPageElements{ private static final String CUSTOMER_FROM_ASSIGN_DROPDOWN = "//div[@role = 'listbox']//span[text() = '%s']"; private static final String CLOSE_DEVICE_DETAILS_VIEW = "//header//mat-icon[contains(text(),'close')]/parent::button"; private static final String SUBMIT_ASSIGN_TO_CUSTOMER_BTN = "//button[@type='submit']"; + public WebElement device(String deviceName) { return waitUntilElementToBeClickable(String.format(DEVICE, deviceName)); } diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/EntityViewPageElements.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/EntityViewPageElements.java new file mode 100644 index 0000000000..0de6773bd1 --- /dev/null +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/EntityViewPageElements.java @@ -0,0 +1,37 @@ +/** + * Copyright © 2016-2023 The Thingsboard Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.server.msa.ui.pages; + +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; + +public class EntityViewPageElements extends OtherPageElementsHelper { + public EntityViewPageElements(WebDriver driver) { + super(driver); + } + + private static final String ENTITY_VIEW_DETAILS_VIEW = "//tb-details-panel"; + private static final String ENTITY_VIEW_DETAILS_ALARMS = ENTITY_VIEW_DETAILS_VIEW + "//span[text()='Alarms']"; + + public WebElement entityViewDetailsView() { + return waitUntilPresenceOfElementLocated(ENTITY_VIEW_DETAILS_VIEW); + } + + public WebElement entityViewDetailsAlarmsBtn() { + return waitUntilElementToBeClickable(ENTITY_VIEW_DETAILS_ALARMS); + } + +} diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/EntityViewPage.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/EntityViewPageHelper.java similarity index 55% rename from msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/EntityViewPage.java rename to msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/EntityViewPageHelper.java index b62c13d8a7..d5a17e8c1f 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/EntityViewPage.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/EntityViewPageHelper.java @@ -16,30 +16,17 @@ package org.thingsboard.server.msa.ui.pages; import org.openqa.selenium.WebDriver; -import org.openqa.selenium.WebElement; -public class EntityViewPage extends OtherPageElementsHelper{ - public EntityViewPage(WebDriver driver) { +public class EntityViewPageHelper extends EntityViewPageElements { + public EntityViewPageHelper(WebDriver driver) { super(driver); } - private static final String CUSTOMER_DETAILS_VIEW = "//tb-details-panel"; - private static final String CUSTOMER_DETAILS_ALARMS = CUSTOMER_DETAILS_VIEW + "//span[text()='Alarms']"; - - public WebElement customerDetailsView() { - return waitUntilPresenceOfElementLocated(CUSTOMER_DETAILS_VIEW); - } - - public WebElement customerDetailsAlarmsBtn() { - return waitUntilElementToBeClickable(CUSTOMER_DETAILS_ALARMS); - } - - public void openEntityViewAlarms(String customerName) { - if (!customerDetailsView().isDisplayed()) { + if (!entityViewDetailsView().isDisplayed()) { entity(customerName).click(); } - customerDetailsAlarmsBtn().click(); + entityViewDetailsAlarmsBtn().click(); } } diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/LoginPageHelper.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/LoginPageHelper.java index 5044ee1a65..83666006c2 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/LoginPageHelper.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/LoginPageHelper.java @@ -16,8 +16,6 @@ package org.thingsboard.server.msa.ui.pages; import org.openqa.selenium.WebDriver; -import org.openqa.selenium.support.ui.ExpectedCondition; -import org.openqa.selenium.support.ui.ExpectedConditions; import org.thingsboard.server.msa.ui.utils.Const; public class LoginPageHelper extends LoginPageElements { @@ -25,18 +23,10 @@ public class LoginPageHelper extends LoginPageElements { super(driver); } - public void login(String username, String password) { - emailField().sendKeys(username); - passwordField().sendKeys(password); + public void authorizationTenant() { + emailField().sendKeys(Const.TENANT_EMAIL); + passwordField().sendKeys(Const.TENANT_PASSWORD); submitBtn().click(); waitUntilUrlContainsText("/home"); } - - public void authorizationTenant() { - login(Const.TENANT_EMAIL, Const.TENANT_PASSWORD); - } - - public void authorizationCustomer() { - login("customer@thingsboard.org", "customer"); - } } diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/assignee/AbstractAssignTest.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/assignee/AbstractAssignTest.java index 182bf04fb4..5f45959d5d 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/assignee/AbstractAssignTest.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/assignee/AbstractAssignTest.java @@ -24,8 +24,8 @@ import org.thingsboard.server.common.data.id.CustomerId; import org.thingsboard.server.common.data.id.DeviceId; import org.thingsboard.server.common.data.id.UserId; import org.thingsboard.server.msa.ui.base.AbstractDriverBaseTest; +import org.thingsboard.server.msa.ui.pages.AlarmDetailsEntityTabHelper; import org.thingsboard.server.msa.ui.pages.AlarmDetailsViewHelper; -import org.thingsboard.server.msa.ui.pages.AlarmHelper; import org.thingsboard.server.msa.ui.pages.CustomerPageHelper; import org.thingsboard.server.msa.ui.pages.DevicePageHelper; import org.thingsboard.server.msa.ui.pages.LoginPageHelper; @@ -39,56 +39,68 @@ abstract public class AbstractAssignTest extends AbstractDriverBaseTest { protected AlarmId alarmId; protected AlarmId assignedAlarmId; protected DeviceId deviceId; - protected UserId userId; protected UserId userWithNameId; protected CustomerId customerId; + protected String deviceName; + protected String userName; + protected String customerTitle; + protected String userEmail; + protected String userWithNameEmail; + protected String alarmType; + protected String assignedAlarmType; protected SideBarMenuViewHelper sideBarMenuView; - protected AlarmHelper alarmPage; + protected AlarmDetailsEntityTabHelper alarmPage; protected DevicePageHelper devicePage; protected CustomerPageHelper customerPage; protected AlarmDetailsViewHelper alarmDetailsView; - protected String userName = "User " + random(); - protected String customerTitle = "Customer " + random(); - protected String userEmail = random() + "@thingsboard.org"; - protected String userWithNameEmail = random() + "@thingsboard.org"; - protected String alarm = "Test alarm " + random(); - protected String assignedAlarm = "Test assigned alarm " + random(); - @BeforeClass - public void generateTestEntity() { + public void generateCommonTestEntity() { new LoginPageHelper(driver).authorizationTenant(); sideBarMenuView = new SideBarMenuViewHelper(driver); - alarmPage = new AlarmHelper(driver); + alarmPage = new AlarmDetailsEntityTabHelper(driver); devicePage = new DevicePageHelper(driver); customerPage = new CustomerPageHelper(driver); alarmDetailsView = new AlarmDetailsViewHelper(driver); + userName = "User " + random(); + customerTitle = "Customer " + random(); + userEmail = random() + "@thingsboard.org"; + userWithNameEmail = random() + "@thingsboard.org"; + alarmType = "Test alarm " + random(); + assignedAlarmType = "Test assigned alarm " + random(); + customerId = testRestClient.postCustomer(EntityPrototypes.defaultCustomerPrototype(customerTitle)).getId(); userId = testRestClient.postUser(EntityPrototypes.defaultUser(userEmail, getCustomerByName(customerTitle).getId())).getId(); userWithNameId = testRestClient.postUser(EntityPrototypes.defaultUser(userWithNameEmail, getCustomerByName(customerTitle).getId(), userName)).getId(); - deviceName = testRestClient.postDevice("", EntityPrototypes.defaultDevicePrototype("", customerId)).getName(); + deviceName = testRestClient.postDevice("", EntityPrototypes.defaultDevicePrototype("Device ", customerId)).getName(); deviceId = testRestClient.getDeviceByName(deviceName).getId(); } @AfterClass - public void deleteEntities() { + public void deleteCommonEntities() { testRestClient.deleteCustomer(customerId); testRestClient.deleteDevice(deviceId); } @BeforeMethod - public void createTestAlarms() { - alarmId = testRestClient.postAlarm(EntityPrototypes.defaultAlarm(deviceId, alarm)).getId(); - assignedAlarmId = testRestClient.postAlarm(EntityPrototypes.defaultAlarm(deviceId, assignedAlarm, userId)).getId(); + public void createCommonTestAlarms() { + alarmId = testRestClient.postAlarm(EntityPrototypes.defaultAlarm(deviceId, alarmType)).getId(); + assignedAlarmId = testRestClient.postAlarm(EntityPrototypes.defaultAlarm(deviceId, assignedAlarmType, userId)).getId(); } @AfterMethod - public void deleteCreatedAlarms() { + public void deleteCommonCreatedAlarms() { testRestClient.deleteAlarm(alarmId); testRestClient.deleteAlarm(assignedAlarmId); } + + public void loginByUser(String userEmail) { + sideBarMenuView.customerBtn().click(); + customerPage.manageCustomersUserBtn(customerTitle).click(); + customerPage.getUserLoginBtnByEmail(userEmail).click(); + } } diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/assignee/AssignDetailsTabAssignTest.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/assignee/AssignDetailsTabAssignTest.java index 5f65c94810..44d664af7a 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/assignee/AssignDetailsTabAssignTest.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/assignee/AssignDetailsTabAssignTest.java @@ -24,8 +24,8 @@ import org.testng.annotations.Test; import org.thingsboard.server.common.data.id.AlarmId; import org.thingsboard.server.common.data.id.AssetId; import org.thingsboard.server.common.data.id.EntityViewId; -import org.thingsboard.server.msa.ui.pages.AssetPageElements; -import org.thingsboard.server.msa.ui.pages.EntityViewPage; +import org.thingsboard.server.msa.ui.pages.AssetPageHelper; +import org.thingsboard.server.msa.ui.pages.EntityViewPageHelper; import org.thingsboard.server.msa.ui.utils.Const; import org.thingsboard.server.msa.ui.utils.EntityPrototypes; @@ -34,36 +34,49 @@ import static org.thingsboard.server.msa.ui.base.AbstractBasePage.random; public class AssignDetailsTabAssignTest extends AbstractAssignTest { + private AssetId assetId; private AlarmId propageteAlarmId; private AlarmId propageteAssigneAlarmId; private AlarmId customerAlarmId; private AlarmId assetAlarmId; private AlarmId entityViewAlarmId; + private EntityViewId entityViewId; + private String assetName; private String entityViewName; - private final String propagateAlarm = "Test propagated alarm 1 " + random(); - private final String propagateAssignedAlarm = "Test propagated alarm 2 " + random(); - private final String customerAlarm = "Test customer alarm" + random(); - private final String assetAlarm = "Test asset alarm" + random(); - private final String entityViewAlarm = "Test entity view alarm" + random(); - private AssetId assetId; - private EntityViewId entityViewId; + private String propagateAlarmType; + private String propagateAssignedAlarmType; + private String customerAlarmType; + private String assetAlarmType; + private String entityViewAlarmType; + + private AssetPageHelper assetPage; + private EntityViewPageHelper entityViewPage; @BeforeClass public void generateTestEntities() { - customerAlarmId = testRestClient.postAlarm(EntityPrototypes.defaultAlarm(customerId, customerAlarm)).getId(); - assetId = testRestClient.postAsset(EntityPrototypes.defaultAssetPrototype("", customerId)).getId(); + assetPage = new AssetPageHelper(driver); + entityViewPage = new EntityViewPageHelper(driver); + + customerAlarmType = "Test customer alarm" + random(); + assetAlarmType = "Test asset alarm" + random(); + entityViewAlarmType = "Test entity view alarm" + random(); + propagateAlarmType = "Test propagated alarm " + random(); + propagateAssignedAlarmType = "Test propagated alarm " + random(); + + customerAlarmId = testRestClient.postAlarm(EntityPrototypes.defaultAlarm(customerId, customerAlarmType)).getId(); + assetId = testRestClient.postAsset(EntityPrototypes.defaultAssetPrototype("Asset", customerId)).getId(); assetName = testRestClient.getAssetById(assetId).getName(); - assetAlarmId = testRestClient.postAlarm(EntityPrototypes.defaultAlarm(assetId, assetAlarm)).getId(); - entityViewId = testRestClient.postEntityView(EntityPrototypes.defaultEntityViewPrototype("", "", "DEVICE")).getId(); + assetAlarmId = testRestClient.postAlarm(EntityPrototypes.defaultAlarm(assetId, assetAlarmType)).getId(); + entityViewId = testRestClient.postEntityView(EntityPrototypes.defaultEntityViewPrototype("Entity view", "", "DEVICE")).getId(); entityViewName = testRestClient.getEntityViewById(entityViewId).getName(); - entityViewAlarmId = testRestClient.postAlarm(EntityPrototypes.defaultAlarm(entityViewId, entityViewAlarm)).getId(); + entityViewAlarmId = testRestClient.postAlarm(EntityPrototypes.defaultAlarm(entityViewId, entityViewAlarmType)).getId(); } @BeforeMethod public void generateTestAlarms() { - propageteAlarmId = testRestClient.postAlarm(EntityPrototypes.defaultAlarm(deviceId, propagateAlarm, true)).getId(); - propageteAssigneAlarmId = testRestClient.postAlarm(EntityPrototypes.defaultAlarm(deviceId, propagateAssignedAlarm, userId, true)).getId(); + propageteAlarmId = testRestClient.postAlarm(EntityPrototypes.defaultAlarm(deviceId, propagateAlarmType, true)).getId(); + propageteAssigneAlarmId = testRestClient.postAlarm(EntityPrototypes.defaultAlarm(deviceId, propagateAssignedAlarmType, userId, true)).getId(); } @AfterClass @@ -84,15 +97,15 @@ public class AssignDetailsTabAssignTest extends AbstractAssignTest { @DataProvider public Object[][] alarms() { return new Object[][]{ - {alarm}, - {propagateAlarm}}; + {alarmType}, + {propagateAlarmType}}; } @DataProvider public Object[][] assignedAlarms() { return new Object[][]{ - {assignedAlarm}, - {propagateAssignedAlarm}}; + {assignedAlarmType}, + {propagateAssignedAlarmType}}; } @Test(dataProvider = "alarms") @@ -135,7 +148,7 @@ public class AssignDetailsTabAssignTest extends AbstractAssignTest { public void searchByEmail() { sideBarMenuView.goToDevicesPage(); devicePage.openDeviceAlarms(deviceName); - alarmPage.searchAlarm(alarm, Const.TENANT_EMAIL); + alarmPage.searchAlarm(alarmType, Const.TENANT_EMAIL); alarmPage.setUsers(); assertThat(alarmPage.getUsers()).hasSize(1).as("Search result contains search input").contains(Const.TENANT_EMAIL); @@ -146,7 +159,7 @@ public class AssignDetailsTabAssignTest extends AbstractAssignTest { public void searchByName() { sideBarMenuView.goToDevicesPage(); devicePage.openDeviceAlarms(deviceName); - alarmPage.searchAlarm(alarm, userName); + alarmPage.searchAlarm(alarmType, userName); alarmPage.setUsers(); assertThat(alarmPage.getUsers()).hasSize(1).as("Search result contains search input").contains(userName); @@ -157,7 +170,7 @@ public class AssignDetailsTabAssignTest extends AbstractAssignTest { public void assignAlarmToYourselfFromDetails() { sideBarMenuView.goToDevicesPage(); devicePage.openDeviceAlarms(deviceName); - alarmPage.alarmDetailsBtn(alarm).click(); + alarmPage.alarmDetailsBtn(alarmType).click(); alarmDetailsView.assignAlarmTo(Const.TENANT_EMAIL); alarmDetailsView.closeAlarmDetailsViewBtn().click(); @@ -168,7 +181,7 @@ public class AssignDetailsTabAssignTest extends AbstractAssignTest { public void assignAlarmToAnotherUserFromDetails() { sideBarMenuView.goToDevicesPage(); devicePage.openDeviceAlarms(deviceName); - alarmPage.alarmDetailsBtn(alarm).click(); + alarmPage.alarmDetailsBtn(alarmType).click(); alarmDetailsView.assignAlarmTo(userEmail); alarmDetailsView.closeAlarmDetailsViewBtn().click(); @@ -179,18 +192,18 @@ public class AssignDetailsTabAssignTest extends AbstractAssignTest { public void unassignedAlarmFromDetails() { sideBarMenuView.goToDevicesPage(); devicePage.openDeviceAlarms(deviceName); - alarmPage.alarmDetailsBtn(assignedAlarm).click(); + alarmPage.alarmDetailsBtn(assignedAlarmType).click(); alarmDetailsView.unassignedAlarm(); alarmDetailsView.closeAlarmDetailsViewBtn().click(); - assertIsDisplayed(alarmPage.unassigned(assignedAlarm)); + assertIsDisplayed(alarmPage.unassigned(assignedAlarmType)); } @Test public void reassignAlarmFromDetails() { sideBarMenuView.goToDevicesPage(); devicePage.openDeviceAlarms(deviceName); - alarmPage.alarmDetailsBtn(assignedAlarm).click(); + alarmPage.alarmDetailsBtn(assignedAlarmType).click(); alarmDetailsView.assignAlarmTo(Const.TENANT_EMAIL); alarmDetailsView.closeAlarmDetailsViewBtn().click(); @@ -201,27 +214,25 @@ public class AssignDetailsTabAssignTest extends AbstractAssignTest { public void assignCustomerAlarmToYourself() { sideBarMenuView.customerBtn().click(); customerPage.openCustomerAlarms(customerTitle); - alarmPage.assignAlarmTo(customerAlarm, Const.TENANT_EMAIL); + alarmPage.assignAlarmTo(customerAlarmType, Const.TENANT_EMAIL); assertIsDisplayed(alarmPage.assignedUser(Const.TENANT_EMAIL)); } @Test public void assignAssetAlarmToYourself() { - AssetPageElements assetPageElements = new AssetPageElements(driver); sideBarMenuView.goToAssetsPage(); - assetPageElements.openAssetAlarms(assetName); - alarmPage.assignAlarmTo(assetAlarm, Const.TENANT_EMAIL); + assetPage.openAssetAlarms(assetName); + alarmPage.assignAlarmTo(assetAlarmType, Const.TENANT_EMAIL); assertIsDisplayed(alarmPage.assignedUser(Const.TENANT_EMAIL)); } @Test public void assignEntityViewsAlarmToYourself() { - EntityViewPage entityViewPage = new EntityViewPage(driver); sideBarMenuView.goToEntityViewsPage(); entityViewPage.openEntityViewAlarms(entityViewName); - alarmPage.assignAlarmTo(entityViewAlarm, Const.TENANT_EMAIL); + alarmPage.assignAlarmTo(entityViewAlarmType, Const.TENANT_EMAIL); assertIsDisplayed(alarmPage.assignedUser(Const.TENANT_EMAIL)); } diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/assignee/AssignDetailsTabFromCustomerAssignTest.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/assignee/AssignDetailsTabFromCustomerAssignTest.java index 7696b4cbe8..eb4918876b 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/assignee/AssignDetailsTabFromCustomerAssignTest.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/assignee/AssignDetailsTabFromCustomerAssignTest.java @@ -28,29 +28,26 @@ import static org.thingsboard.server.msa.ui.base.AbstractBasePage.random; public class AssignDetailsTabFromCustomerAssignTest extends AbstractAssignTest { - AlarmId tenantAlarmId; - DeviceId tenantDeviceId; - String tenantDeviceName; - String tenantAlarm = "Test tenant alarm " + random(); - - public void loginByUser(String userEmail) { - sideBarMenuView.customerBtn().click(); - customerPage.manageCustomersUserBtn(customerTitle).click(); - customerPage.getUserLoginBtnByEmail(userEmail).click(); - } + private AlarmId tenantAlarmId; + private DeviceId tenantDeviceId; + private String tenantDeviceName; + + private String tenantAlarmType; @BeforeMethod public void generateTenantEntity() { if (getJwtTokenFromLocalStorage() == null) { new LoginPageHelper(driver).authorizationTenant(); } + tenantAlarmType = "Test tenant alarm " + random(); + tenantDeviceName = testRestClient.postDevice("", EntityPrototypes.defaultDevicePrototype("")).getName(); tenantDeviceId = testRestClient.getDeviceByName(tenantDeviceName).getId(); - tenantAlarmId = testRestClient.postAlarm(EntityPrototypes.defaultAlarm(tenantDeviceId, tenantAlarm)).getId(); + tenantAlarmId = testRestClient.postAlarm(EntityPrototypes.defaultAlarm(tenantDeviceId, tenantAlarmType)).getId(); } @AfterMethod - public void clear() { + public void deleteTenantEntity() { testRestClient.deleteAlarm(tenantAlarmId); testRestClient.deleteDevice(tenantDeviceId); clearStorage(); @@ -61,7 +58,7 @@ public class AssignDetailsTabFromCustomerAssignTest extends AbstractAssignTest { loginByUser(userEmail); sideBarMenuView.goToDevicesPage(); devicePage.openDeviceAlarms(deviceName); - alarmPage.assignAlarmTo(alarm, userEmail); + alarmPage.assignAlarmTo(alarmType, userEmail); assertIsDisplayed(alarmPage.assignedUser(userEmail)); } @@ -71,7 +68,7 @@ public class AssignDetailsTabFromCustomerAssignTest extends AbstractAssignTest { loginByUser(userWithNameEmail); sideBarMenuView.goToDevicesPage(); devicePage.openDeviceAlarms(deviceName); - alarmPage.assignAlarmTo(assignedAlarm, userName); + alarmPage.assignAlarmTo(assignedAlarmType, userName); assertIsDisplayed(alarmPage.assignedUser(userName)); } @@ -81,9 +78,9 @@ public class AssignDetailsTabFromCustomerAssignTest extends AbstractAssignTest { loginByUser(userWithNameEmail); sideBarMenuView.goToDevicesPage(); devicePage.openDeviceAlarms(deviceName); - alarmPage.unassignedAlarm(assignedAlarm); + alarmPage.unassignedAlarm(assignedAlarmType); - assertIsDisplayed(alarmPage.unassigned(assignedAlarm)); + assertIsDisplayed(alarmPage.unassigned(assignedAlarmType)); } @Test @@ -91,16 +88,16 @@ public class AssignDetailsTabFromCustomerAssignTest extends AbstractAssignTest { loginByUser(userEmail); sideBarMenuView.goToDevicesPage(); devicePage.openDeviceAlarms(deviceName); - alarmPage.unassignedAlarm(assignedAlarm); + alarmPage.unassignedAlarm(assignedAlarmType); - assertIsDisplayed(alarmPage.unassigned(assignedAlarm)); + assertIsDisplayed(alarmPage.unassigned(assignedAlarmType)); } @Test public void checkTheDisplayOfNamesEmailsFromCustomer() { sideBarMenuView.goToDevicesPage(); devicePage.openDeviceAlarms(tenantDeviceName); - alarmPage.assignAlarmTo(tenantAlarm, Const.TENANT_EMAIL); + alarmPage.assignAlarmTo(tenantAlarmType, Const.TENANT_EMAIL); devicePage.closeDeviceDetailsViewBtn().click(); devicePage.assignToCustomerBtn(tenantDeviceName).click(); devicePage.assignToCustomer(customerTitle); @@ -115,14 +112,14 @@ public class AssignDetailsTabFromCustomerAssignTest extends AbstractAssignTest { public void reassignTenantForOldAlarm() { sideBarMenuView.goToDevicesPage(); devicePage.openDeviceAlarms(tenantDeviceName); - alarmPage.assignAlarmTo(tenantAlarm, Const.TENANT_EMAIL); + alarmPage.assignAlarmTo(tenantAlarmType, Const.TENANT_EMAIL); devicePage.closeDeviceDetailsViewBtn().click(); devicePage.assignToCustomerBtn(tenantDeviceName).click(); devicePage.assignToCustomer(customerTitle); loginByUser(userEmail); sideBarMenuView.goToDevicesPage(); devicePage.openDeviceAlarms(tenantDeviceName); - alarmPage.assignBtn(tenantAlarm).click(); + jsClick(alarmPage.assignBtn(tenantAlarmType)); assertIsDisplayed(alarmPage.accessForbiddenDialogView()); } 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 bce6e071f4..73783544a1 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 @@ -149,5 +149,4 @@ public class DataProviderCredential { {description, newDescription, description + newDescription}, {description, Keys.CONTROL + "A" + Keys.BACK_SPACE, ""}}; } - } diff --git a/msa/black-box-tests/src/test/resources/assignee.xml b/msa/black-box-tests/src/test/resources/assignee.xml index 52499824cd..e0615ffefc 100644 --- a/msa/black-box-tests/src/test/resources/assignee.xml +++ b/msa/black-box-tests/src/test/resources/assignee.xml @@ -18,11 +18,11 @@ --> - + - + From 957c5b74d7132dd63b595b14aa510ebd03e52ab4 Mon Sep 17 00:00:00 2001 From: Seraphym-Tuhai Date: Thu, 27 Apr 2023 12:03:19 +0300 Subject: [PATCH 7/8] add new cases; add Epic, Feature, Description; add delete entity methods, refactoring --- .../server/msa/TestRestClient.java | 1 - .../msa/ui/base/AbstractDriverBaseTest.java | 41 ++++++++++++++ .../pages/AlarmDetailsEntityTabElements.java | 2 +- .../ui/tests/assignee/AbstractAssignTest.java | 11 ++-- .../assignee/AssignDetailsTabAssignTest.java | 31 ++++++++--- ...ssignDetailsTabFromCustomerAssignTest.java | 55 +++++++++++++++++-- .../server/msa/ui/utils/EntityPrototypes.java | 11 ++-- .../src/test/resources/assignee.xml | 9 ++- 8 files changed, 127 insertions(+), 34 deletions(-) diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/TestRestClient.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/TestRestClient.java index de7f92cfb3..d7e5c807d5 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/TestRestClient.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/TestRestClient.java @@ -30,7 +30,6 @@ import org.thingsboard.server.common.data.Customer; import org.thingsboard.server.common.data.Device; import org.thingsboard.server.common.data.DeviceProfile; import org.thingsboard.server.common.data.EntityView; -import org.thingsboard.server.common.data.Tenant; import org.thingsboard.server.common.data.User; import org.thingsboard.server.common.data.alarm.Alarm; import org.thingsboard.server.common.data.asset.Asset; 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 82b251c288..27e5e6b978 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 @@ -39,6 +39,11 @@ import org.testng.annotations.BeforeMethod; import org.thingsboard.server.common.data.Customer; import org.thingsboard.server.common.data.DeviceProfile; import org.thingsboard.server.common.data.asset.AssetProfile; +import org.thingsboard.server.common.data.id.AlarmId; +import org.thingsboard.server.common.data.id.AssetId; +import org.thingsboard.server.common.data.id.CustomerId; +import org.thingsboard.server.common.data.id.DeviceId; +import org.thingsboard.server.common.data.id.EntityViewId; import org.thingsboard.server.common.data.page.PageLink; import org.thingsboard.server.common.data.rule.RuleChain; import org.thingsboard.server.msa.AbstractContainerTest; @@ -221,4 +226,40 @@ abstract public class AbstractDriverBaseTest extends AbstractContainerTest { getWebStorage().getLocalStorage().clear(); getWebStorage().getSessionStorage().clear(); } + + public void deleteAlarmById(AlarmId alarmId) { + if (alarmId != null) { + testRestClient.deleteAlarm(alarmId); + } + } + + public void deleteAlarmsByIds(AlarmId... alarmIds) { + for (AlarmId alarmId : alarmIds) { + deleteAlarmById(alarmId); + } + } + + public void deleteCustomerById(CustomerId customerId) { + if (customerId != null) { + testRestClient.deleteCustomer(customerId); + } + } + + public void deleteDeviceById(DeviceId deviceId) { + if (deviceId != null) { + testRestClient.deleteDevice(deviceId); + } + } + + public void deleteAssetById(AssetId assetId) { + if (assetId != null) { + testRestClient.deleteAsset(assetId); + } + } + + public void deleteEntityView(EntityViewId entityViewId) { + if (entityViewId != null) { + testRestClient.deleteEntityView(entityViewId); + } + } } diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/AlarmDetailsEntityTabElements.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/AlarmDetailsEntityTabElements.java index 318b59965b..65a8aeb1f1 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/AlarmDetailsEntityTabElements.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/pages/AlarmDetailsEntityTabElements.java @@ -31,7 +31,7 @@ public class AlarmDetailsEntityTabElements extends OtherPageElements { private static final String ASSIGN_USER_DISPLAY_NAME = "//span[@class='user-display-name'][contains(text(),'%s')]"; private static final String SEARCH_FIELD = "//input[@placeholder='Search users']"; private static final String UNASSIGNED_BTN = "//div[@role='listbox']//mat-icon[text() = 'account_circle']/following-sibling::span"; - private static final String UNASSIGNED = "//span[text() = '%s']/ancestor::mat-row//span[@class='assignee-cell']/mat-icon[text() = 'account_circle']/following-sibling::span"; + private static final String UNASSIGNED = "//span[text() = '%s']/ancestor::mat-row//span[@class='assignee-cell']//mat-icon[text() = 'account_circle']/following-sibling::span"; private static final String ALARM_DETAILS_BTN = "//span[text() = '%s']/ancestor::mat-row//mat-icon[contains(text(),'more_horiz')]/parent::button"; private static final String ACCESS_FORBIDDEN_DIALOG_VIEW = "//h2[text() = 'Access Forbidden']/parent::tb-confirm-dialog"; private static final String ALARM_ASSIGNEE_DROPDOWN = "//tb-alarm-assignee-panel"; diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/assignee/AbstractAssignTest.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/assignee/AbstractAssignTest.java index 5f45959d5d..1d13d16f4b 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/assignee/AbstractAssignTest.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/assignee/AbstractAssignTest.java @@ -15,6 +15,7 @@ */ package org.thingsboard.server.msa.ui.tests.assignee; +import io.qameta.allure.Epic; import org.testng.annotations.AfterClass; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeClass; @@ -34,6 +35,7 @@ import org.thingsboard.server.msa.ui.utils.EntityPrototypes; import static org.thingsboard.server.msa.ui.base.AbstractBasePage.random; +@Epic("Alarm assign") abstract public class AbstractAssignTest extends AbstractDriverBaseTest { protected AlarmId alarmId; @@ -42,7 +44,6 @@ abstract public class AbstractAssignTest extends AbstractDriverBaseTest { protected UserId userId; protected UserId userWithNameId; protected CustomerId customerId; - protected String deviceName; protected String userName; protected String customerTitle; @@ -50,7 +51,6 @@ abstract public class AbstractAssignTest extends AbstractDriverBaseTest { protected String userWithNameEmail; protected String alarmType; protected String assignedAlarmType; - protected SideBarMenuViewHelper sideBarMenuView; protected AlarmDetailsEntityTabHelper alarmPage; protected DevicePageHelper devicePage; @@ -82,8 +82,8 @@ abstract public class AbstractAssignTest extends AbstractDriverBaseTest { @AfterClass public void deleteCommonEntities() { - testRestClient.deleteCustomer(customerId); - testRestClient.deleteDevice(deviceId); + deleteCustomerById(customerId); + deleteDeviceById(deviceId); } @BeforeMethod @@ -94,8 +94,7 @@ abstract public class AbstractAssignTest extends AbstractDriverBaseTest { @AfterMethod public void deleteCommonCreatedAlarms() { - testRestClient.deleteAlarm(alarmId); - testRestClient.deleteAlarm(assignedAlarmId); + deleteAlarmsByIds(alarmId, assignedAlarmId); } public void loginByUser(String userEmail) { diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/assignee/AssignDetailsTabAssignTest.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/assignee/AssignDetailsTabAssignTest.java index 44d664af7a..9f90dddc90 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/assignee/AssignDetailsTabAssignTest.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/assignee/AssignDetailsTabAssignTest.java @@ -15,6 +15,8 @@ */ package org.thingsboard.server.msa.ui.tests.assignee; +import io.qameta.allure.Description; +import io.qameta.allure.Feature; import org.testng.annotations.AfterClass; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeClass; @@ -32,6 +34,7 @@ import org.thingsboard.server.msa.ui.utils.EntityPrototypes; import static org.assertj.core.api.Assertions.assertThat; import static org.thingsboard.server.msa.ui.base.AbstractBasePage.random; +@Feature("Assign from details tab of entity (by tenant)") public class AssignDetailsTabAssignTest extends AbstractAssignTest { private AssetId assetId; @@ -41,7 +44,6 @@ public class AssignDetailsTabAssignTest extends AbstractAssignTest { private AlarmId assetAlarmId; private AlarmId entityViewAlarmId; private EntityViewId entityViewId; - private String assetName; private String entityViewName; private String propagateAlarmType; @@ -49,7 +51,6 @@ public class AssignDetailsTabAssignTest extends AbstractAssignTest { private String customerAlarmType; private String assetAlarmType; private String entityViewAlarmType; - private AssetPageHelper assetPage; private EntityViewPageHelper entityViewPage; @@ -81,17 +82,16 @@ public class AssignDetailsTabAssignTest extends AbstractAssignTest { @AfterClass public void deleteTestEntities() { - testRestClient.deleteAlarm(customerAlarmId); - testRestClient.deleteAlarm(assetAlarmId); - testRestClient.deleteAlarm(entityViewAlarmId); - testRestClient.deleteAsset(assetId); - testRestClient.deleteEntityView(entityViewId); + deleteAlarmById(customerAlarmId); + deleteAlarmById(assetAlarmId); + deleteAlarmById(entityViewAlarmId); + deleteAssetById(assetId); + deleteEntityView(entityViewId); } @AfterMethod public void deleteTestAlarms() { - testRestClient.deleteAlarm(propageteAlarmId); - testRestClient.deleteAlarm(propageteAssigneAlarmId); + deleteAlarmsByIds(propageteAlarmId, propageteAssigneAlarmId); } @DataProvider @@ -108,6 +108,7 @@ public class AssignDetailsTabAssignTest extends AbstractAssignTest { {propagateAssignedAlarmType}}; } + @Description("Can assign alarm to yourself/Can assign propagate alarm to yourself") @Test(dataProvider = "alarms") public void assignAlarmToYourself(String alarm) { sideBarMenuView.goToDevicesPage(); @@ -117,6 +118,7 @@ public class AssignDetailsTabAssignTest extends AbstractAssignTest { assertIsDisplayed(alarmPage.assignedUser(Const.TENANT_EMAIL)); } + @Description("Can assign alarm to another user/Can assign propagate alarm to another user") @Test(dataProvider = "alarms") public void assignAlarmToAnotherUser(String alarm) { sideBarMenuView.goToDevicesPage(); @@ -126,6 +128,7 @@ public class AssignDetailsTabAssignTest extends AbstractAssignTest { assertIsDisplayed(alarmPage.assignedUser(userEmail)); } + @Description("Can unassign alarm/Can unassign propagate alarm") @Test(dataProvider = "assignedAlarms") public void unassignedAlarm(String assignedAlarm) { sideBarMenuView.goToDevicesPage(); @@ -135,6 +138,7 @@ public class AssignDetailsTabAssignTest extends AbstractAssignTest { assertIsDisplayed(alarmPage.unassigned(assignedAlarm)); } + @Description("Can reassign alarm to another user/Can reassign propagate alarm to another user") @Test(dataProvider = "assignedAlarms") public void reassignAlarm(String assignedAlarm) { sideBarMenuView.goToDevicesPage(); @@ -144,6 +148,7 @@ public class AssignDetailsTabAssignTest extends AbstractAssignTest { assertIsDisplayed(alarmPage.assignedUser(Const.TENANT_EMAIL)); } + @Description("Search by email") @Test public void searchByEmail() { sideBarMenuView.goToDevicesPage(); @@ -155,6 +160,7 @@ public class AssignDetailsTabAssignTest extends AbstractAssignTest { alarmPage.assignUsers().forEach(this::assertIsDisplayed); } + @Description("Search by name") @Test(groups = "broken") public void searchByName() { sideBarMenuView.goToDevicesPage(); @@ -166,6 +172,7 @@ public class AssignDetailsTabAssignTest extends AbstractAssignTest { alarmPage.assignUsers().forEach(this::assertIsDisplayed); } + @Description("Assign alarm to yourself from details of alarm") @Test public void assignAlarmToYourselfFromDetails() { sideBarMenuView.goToDevicesPage(); @@ -177,6 +184,7 @@ public class AssignDetailsTabAssignTest extends AbstractAssignTest { assertIsDisplayed(alarmPage.assignedUser(Const.TENANT_EMAIL)); } + @Description("Assign alarm to another user from details of alarm") @Test public void assignAlarmToAnotherUserFromDetails() { sideBarMenuView.goToDevicesPage(); @@ -188,6 +196,7 @@ public class AssignDetailsTabAssignTest extends AbstractAssignTest { assertIsDisplayed(alarmPage.assignedUser(userEmail)); } + @Description("Unassign alarm from details of alarm") @Test public void unassignedAlarmFromDetails() { sideBarMenuView.goToDevicesPage(); @@ -199,6 +208,7 @@ public class AssignDetailsTabAssignTest extends AbstractAssignTest { assertIsDisplayed(alarmPage.unassigned(assignedAlarmType)); } + @Description("Reassign alarm to another user from details of alarm") @Test public void reassignAlarmFromDetails() { sideBarMenuView.goToDevicesPage(); @@ -210,6 +220,7 @@ public class AssignDetailsTabAssignTest extends AbstractAssignTest { assertIsDisplayed(alarmPage.assignedUser(Const.TENANT_EMAIL)); } + @Description("Assign alarm to yourself for Customer entity details") @Test public void assignCustomerAlarmToYourself() { sideBarMenuView.customerBtn().click(); @@ -219,6 +230,7 @@ public class AssignDetailsTabAssignTest extends AbstractAssignTest { assertIsDisplayed(alarmPage.assignedUser(Const.TENANT_EMAIL)); } + @Description("Assign alarm to yourself for Asset details") @Test public void assignAssetAlarmToYourself() { sideBarMenuView.goToAssetsPage(); @@ -228,6 +240,7 @@ public class AssignDetailsTabAssignTest extends AbstractAssignTest { assertIsDisplayed(alarmPage.assignedUser(Const.TENANT_EMAIL)); } + @Description("Assign alarm to yourself for Entity view details") @Test public void assignEntityViewsAlarmToYourself() { sideBarMenuView.goToEntityViewsPage(); diff --git a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/assignee/AssignDetailsTabFromCustomerAssignTest.java b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/assignee/AssignDetailsTabFromCustomerAssignTest.java index eb4918876b..301a61fdf4 100644 --- a/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/assignee/AssignDetailsTabFromCustomerAssignTest.java +++ b/msa/black-box-tests/src/test/java/org/thingsboard/server/msa/ui/tests/assignee/AssignDetailsTabFromCustomerAssignTest.java @@ -15,6 +15,8 @@ */ package org.thingsboard.server.msa.ui.tests.assignee; +import io.qameta.allure.Description; +import io.qameta.allure.Feature; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; @@ -26,13 +28,14 @@ import org.thingsboard.server.msa.ui.utils.EntityPrototypes; import static org.thingsboard.server.msa.ui.base.AbstractBasePage.random; +@Feature("Assign from details tab of entity (by customer)") public class AssignDetailsTabFromCustomerAssignTest extends AbstractAssignTest { private AlarmId tenantAlarmId; private DeviceId tenantDeviceId; private String tenantDeviceName; - private String tenantAlarmType; + private AlarmId assignedTenantAlarmId; @BeforeMethod public void generateTenantEntity() { @@ -48,11 +51,12 @@ public class AssignDetailsTabFromCustomerAssignTest extends AbstractAssignTest { @AfterMethod public void deleteTenantEntity() { - testRestClient.deleteAlarm(tenantAlarmId); - testRestClient.deleteDevice(tenantDeviceId); + deleteAlarmsByIds(tenantAlarmId, assignedTenantAlarmId); + deleteDeviceById(tenantDeviceId); clearStorage(); } + @Description("Can assign alarm to yourself") @Test public void assignAlarmToYourselfCustomer() { loginByUser(userEmail); @@ -63,6 +67,7 @@ public class AssignDetailsTabFromCustomerAssignTest extends AbstractAssignTest { assertIsDisplayed(alarmPage.assignedUser(userEmail)); } + @Description("Can reassign alarm from himself to another customer user") @Test public void reassignAlarmByCustomerFromAnotherCustomerUser() { loginByUser(userWithNameEmail); @@ -73,9 +78,10 @@ public class AssignDetailsTabFromCustomerAssignTest extends AbstractAssignTest { assertIsDisplayed(alarmPage.assignedUser(userName)); } + @Description("Can unassign alarm from himself") @Test public void unassignedAlarmFromCustomer() { - loginByUser(userWithNameEmail); + loginByUser(userEmail); sideBarMenuView.goToDevicesPage(); devicePage.openDeviceAlarms(deviceName); alarmPage.unassignedAlarm(assignedAlarmType); @@ -83,9 +89,10 @@ public class AssignDetailsTabFromCustomerAssignTest extends AbstractAssignTest { assertIsDisplayed(alarmPage.unassigned(assignedAlarmType)); } + @Description("Unassign alarm from any other customer user") @Test public void unassignedAlarmFromAnotherUserFromCustomer() { - loginByUser(userEmail); + loginByUser(userWithNameEmail); sideBarMenuView.goToDevicesPage(); devicePage.openDeviceAlarms(deviceName); alarmPage.unassignedAlarm(assignedAlarmType); @@ -93,6 +100,25 @@ public class AssignDetailsTabFromCustomerAssignTest extends AbstractAssignTest { assertIsDisplayed(alarmPage.unassigned(assignedAlarmType)); } + @Description("Unassign alarm from any tenant user") + @Test + public void unassignedAlarmFromTenant() { + String assignedTenantAlarmType = "Test tenant assigned alarm " + random(); + assignedTenantAlarmId = testRestClient.postAlarm(EntityPrototypes.defaultAlarm(deviceId, assignedTenantAlarmType)).getId(); + + sideBarMenuView.goToDevicesPage(); + devicePage.openDeviceAlarms(deviceName); + alarmPage.assignAlarmTo(assignedTenantAlarmType, Const.TENANT_EMAIL); + devicePage.closeDeviceDetailsViewBtn().click(); + loginByUser(userWithNameEmail); + sideBarMenuView.goToDevicesPage(); + devicePage.openDeviceAlarms(deviceName); + alarmPage.unassignedAlarm(assignedTenantAlarmType); + + assertIsDisplayed(alarmPage.unassigned(assignedTenantAlarmType)); + } + + @Description("Check the display of names (emails)") @Test public void checkTheDisplayOfNamesEmailsFromCustomer() { sideBarMenuView.goToDevicesPage(); @@ -108,6 +134,7 @@ public class AssignDetailsTabFromCustomerAssignTest extends AbstractAssignTest { assertIsDisplayed(alarmPage.assignedUser(Const.TENANT_EMAIL)); } + @Description("Check the reassign tenant for old alarm on device") @Test public void reassignTenantForOldAlarm() { sideBarMenuView.goToDevicesPage(); @@ -121,6 +148,24 @@ public class AssignDetailsTabFromCustomerAssignTest extends AbstractAssignTest { devicePage.openDeviceAlarms(tenantDeviceName); jsClick(alarmPage.assignBtn(tenantAlarmType)); + assertIsDisplayed(alarmPage.accessForbiddenDialogView()); + } + + @Description("Check the reassign tenant for old alarm on device") + @Test + public void reassignTenantForOldAlarmFromDetails() { + sideBarMenuView.goToDevicesPage(); + devicePage.openDeviceAlarms(tenantDeviceName); + alarmPage.assignAlarmTo(tenantAlarmType, Const.TENANT_EMAIL); + devicePage.closeDeviceDetailsViewBtn().click(); + devicePage.assignToCustomerBtn(tenantDeviceName).click(); + devicePage.assignToCustomer(customerTitle); + loginByUser(userEmail); + sideBarMenuView.goToDevicesPage(); + devicePage.openDeviceAlarms(tenantDeviceName); + alarmPage.alarmDetailsBtn(tenantAlarmType).click(); + + assertIsDisplayed(alarmPage.accessForbiddenDialogView()); } } 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 0312817163..99f05e6f1d 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 @@ -36,11 +36,8 @@ import org.thingsboard.server.common.data.device.profile.DisabledDeviceProfilePr import org.thingsboard.server.common.data.id.CustomerId; import org.thingsboard.server.common.data.id.EntityId; import org.thingsboard.server.common.data.id.UserId; -import org.thingsboard.server.common.data.notification.targets.platform.CustomerUsersFilter; import org.thingsboard.server.common.data.rule.RuleChain; import org.thingsboard.server.common.data.security.Authority; -import org.thingsboard.server.common.data.security.UserCredentials; -import org.thingsboard.server.common.data.settings.UserSettings; public class EntityPrototypes { @@ -179,14 +176,14 @@ public class EntityPrototypes { return user; } - public static Device defaultDevicePrototype(String name){ + public static Device defaultDevicePrototype(String name) { Device device = new Device(); device.setName(name + RandomStringUtils.randomAlphanumeric(7)); device.setType("DEFAULT"); return device; } - public static Device defaultDevicePrototype(String name, CustomerId id){ + public static Device defaultDevicePrototype(String name, CustomerId id) { Device device = new Device(); device.setName(name + RandomStringUtils.randomAlphanumeric(7)); device.setCustomerId(id); @@ -194,7 +191,7 @@ public class EntityPrototypes { return device; } - public static Asset defaultAssetPrototype(String name, CustomerId id){ + public static Asset defaultAssetPrototype(String name, CustomerId id) { Asset asset = new Asset(); asset.setName(name + RandomStringUtils.randomAlphanumeric(7)); asset.setCustomerId(id); @@ -202,7 +199,7 @@ public class EntityPrototypes { return asset; } - public static EntityView defaultEntityViewPrototype(String name, String type, String entityType){ + public static EntityView defaultEntityViewPrototype(String name, String type, String entityType) { EntityView entityView = new EntityView(); entityView.setName(name + RandomStringUtils.randomAlphanumeric(7)); entityView.setType(type + RandomStringUtils.randomAlphanumeric(7)); diff --git a/msa/black-box-tests/src/test/resources/assignee.xml b/msa/black-box-tests/src/test/resources/assignee.xml index e0615ffefc..d53c6c1725 100644 --- a/msa/black-box-tests/src/test/resources/assignee.xml +++ b/msa/black-box-tests/src/test/resources/assignee.xml @@ -1,7 +1,7 @@