assign, reassign tests
This commit is contained in:
parent
75e9e45321
commit
1ff1b7c1dd
@ -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;
|
||||
}
|
||||
|
||||
@ -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));
|
||||
}
|
||||
}
|
||||
@ -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();
|
||||
}
|
||||
}
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
@ -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();
|
||||
}
|
||||
}
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
@ -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");
|
||||
}
|
||||
}
|
||||
@ -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());
|
||||
}
|
||||
}
|
||||
@ -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"}};
|
||||
}
|
||||
}
|
||||
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user