assign, reassign tests

This commit is contained in:
Seraphym-Tuhai 2023-04-03 17:23:08 +03:00
parent 75e9e45321
commit 1ff1b7c1dd
10 changed files with 261 additions and 2 deletions

View File

@ -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;
@ -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;
}

View File

@ -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));
}
}

View File

@ -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();
}
}

View File

@ -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);
}
}

View File

@ -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();
}
}

View File

@ -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);
}
}

View File

@ -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");
}
}

View File

@ -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());
}
}

View File

@ -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"}};
}
}

View File

@ -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;
}
}