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,18 +78,9 @@ public class AssignDetailsTabFromCustomerAssignTest extends AbstractAssignTest { assertIsDisplayed(alarmPage.assignedUser(userName)); } + @Description("Can unassign alarm from himself") @Test public void unassignedAlarmFromCustomer() { - loginByUser(userWithNameEmail); - sideBarMenuView.goToDevicesPage(); - devicePage.openDeviceAlarms(deviceName); - alarmPage.unassignedAlarm(assignedAlarmType); - - assertIsDisplayed(alarmPage.unassigned(assignedAlarmType)); - } - - @Test - public void unassignedAlarmFromAnotherUserFromCustomer() { loginByUser(userEmail); sideBarMenuView.goToDevicesPage(); devicePage.openDeviceAlarms(deviceName); @@ -93,6 +89,36 @@ public class AssignDetailsTabFromCustomerAssignTest extends AbstractAssignTest { assertIsDisplayed(alarmPage.unassigned(assignedAlarmType)); } + @Description("Unassign alarm from any other customer user") + @Test + public void unassignedAlarmFromAnotherUserFromCustomer() { + loginByUser(userWithNameEmail); + sideBarMenuView.goToDevicesPage(); + devicePage.openDeviceAlarms(deviceName); + alarmPage.unassignedAlarm(assignedAlarmType); + + 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 @@