refactoring: tests Dashboard
This commit is contained in:
parent
ecac67da1c
commit
f54201213c
@ -32,6 +32,7 @@ import org.thingsboard.server.common.data.plugin.ComponentLifecycleEvent;
|
||||
import org.thingsboard.server.common.msg.TbMsg;
|
||||
import org.thingsboard.server.dao.audit.AuditLogService;
|
||||
import org.thingsboard.server.dao.model.ModelConstants;
|
||||
import org.thingsboard.server.service.gateway_device.GatewayNotificationsService;
|
||||
|
||||
import java.util.Locale;
|
||||
import java.util.Objects;
|
||||
@ -49,6 +50,9 @@ public abstract class AbstractNotifyEntityTest extends AbstractWebTest {
|
||||
@SpyBean
|
||||
protected AuditLogService auditLogService;
|
||||
|
||||
@SpyBean
|
||||
protected GatewayNotificationsService gatewayNotificationsService;
|
||||
|
||||
protected void testNotifyEntityAllOneTime(HasName entity, EntityId entityId, EntityId originatorId,
|
||||
TenantId tenantId, CustomerId customerId, UserId userId, String userName,
|
||||
ActionType actionType, Object... additionalInfo) {
|
||||
@ -59,6 +63,16 @@ public abstract class AbstractNotifyEntityTest extends AbstractWebTest {
|
||||
Mockito.reset(tbClusterService, auditLogService);
|
||||
}
|
||||
|
||||
protected void testNotifyEntityAllOneTimeLogEntityActionEntityEqClass(HasName entity, EntityId entityId, EntityId originatorId,
|
||||
TenantId tenantId, CustomerId customerId, UserId userId, String userName,
|
||||
ActionType actionType, Object... additionalInfo) {
|
||||
int cntTime = 1;
|
||||
testSendNotificationMsgToEdgeServiceTime(entityId, tenantId, actionType, cntTime);
|
||||
testLogEntityActionEntityEqClass(entity, originatorId, tenantId, customerId, userId, userName, actionType, cntTime, additionalInfo);
|
||||
testPushMsgToRuleEngineTime(originatorId, tenantId, cntTime);
|
||||
Mockito.reset(tbClusterService, auditLogService);
|
||||
}
|
||||
|
||||
protected void testNotifyEntityNeverMsgToEdgeServiceOneTime(HasName entity, EntityId entityId, TenantId tenantId,
|
||||
ActionType actionType) {
|
||||
testSendNotificationMsgToEdgeServiceTime(entityId, tenantId, actionType, 1);
|
||||
@ -91,6 +105,33 @@ public abstract class AbstractNotifyEntityTest extends AbstractWebTest {
|
||||
Mockito.reset(tbClusterService, auditLogService);
|
||||
}
|
||||
|
||||
protected void testNotifyManyEntityManyTimeMsgToEdgeServiceEntityEqAny(HasName entity, HasName originator,
|
||||
TenantId tenantId, CustomerId customerId, UserId userId, String userName,
|
||||
ActionType actionType, ActionType actionTypeEdge, int cntTime, int cntTimeEdge, Object... additionalInfo) {
|
||||
EntityId originatorId = createEntityId_NULL_UUID(originator);
|
||||
testSendNotificationMsgToEdgeServiceTimeEntityEqAny(tenantId, actionTypeEdge, cntTime);
|
||||
ArgumentMatcher<HasName> matcherEntityClassEquals = argument -> argument.getClass().equals(entity.getClass());
|
||||
ArgumentMatcher<EntityId> matcherOriginatorId = argument -> argument.getClass().equals(originatorId.getClass());
|
||||
testLogEntityActionAdditionalInfo(matcherEntityClassEquals, matcherOriginatorId, tenantId, customerId, userId, userName, actionType, cntTime,
|
||||
additionalInfo);
|
||||
testPushMsgToRuleEngineTime(originatorId, tenantId, cntTimeEdge);
|
||||
Mockito.reset(tbClusterService, auditLogService);
|
||||
}
|
||||
|
||||
protected void testNotifyManyEntityManyTimeMsgToEdgeServiceNeverAdditionalInfoAny(HasName entity, HasName originator,
|
||||
TenantId tenantId, CustomerId customerId, UserId userId, String userName,
|
||||
ActionType actionType, int cntTime, int cntAdditionalInfo) {
|
||||
EntityId entityId = createEntityId_NULL_UUID(entity);
|
||||
EntityId originatorId = createEntityId_NULL_UUID(originator);
|
||||
testNotificationMsgToEdgeServiceNever(entityId);
|
||||
ArgumentMatcher<HasName> matcherEntityClassEquals = argument -> argument.getClass().equals(entity.getClass());
|
||||
ArgumentMatcher<EntityId> matcherOriginatorId = argument -> argument.getClass().equals(originatorId.getClass());
|
||||
testLogEntityActionAdditionalInfoAny(matcherEntityClassEquals, matcherOriginatorId, tenantId, customerId, userId, userName, actionType, cntTime,
|
||||
cntAdditionalInfo);
|
||||
testPushMsgToRuleEngineTime(originatorId, tenantId, cntTime);
|
||||
Mockito.reset(tbClusterService, auditLogService);
|
||||
}
|
||||
|
||||
protected void testNotifyEntityBroadcastEntityStateChangeEventOneTimeMsgToEdgeServiceNever(HasName entity, EntityId entityId, EntityId originatorId,
|
||||
TenantId tenantId, CustomerId customerId, UserId userId, String userName,
|
||||
ActionType actionType, Object... additionalInfo) {
|
||||
@ -167,6 +208,12 @@ public abstract class AbstractNotifyEntityTest extends AbstractWebTest {
|
||||
Mockito.eq(edgeTypeByActionType(actionType)));
|
||||
}
|
||||
|
||||
private void testSendNotificationMsgToEdgeServiceTimeEntityEqAny(TenantId tenantId, ActionType actionType, int cntTime) {
|
||||
Mockito.verify(tbClusterService, times(cntTime)).sendNotificationMsgToEdge(Mockito.eq(tenantId),
|
||||
Mockito.any(), Mockito.any(EntityId.class), Mockito.any(), Mockito.isNull(),
|
||||
Mockito.eq(edgeTypeByActionType(actionType)));
|
||||
}
|
||||
|
||||
private void testBroadcastEntityStateChangeEventTime(EntityId entityId, TenantId tenantId, int cntTime) {
|
||||
Mockito.verify(tbClusterService, times(cntTime)).broadcastEntityStateChangeEvent(Mockito.eq(tenantId),
|
||||
Mockito.any(entityId.getClass()), Mockito.any(ComponentLifecycleEvent.class));
|
||||
@ -181,6 +228,15 @@ public abstract class AbstractNotifyEntityTest extends AbstractWebTest {
|
||||
actionType, cntTime, additionalInfo);
|
||||
}
|
||||
|
||||
private void testLogEntityActionEntityEqClass(HasName entity, EntityId originatorId, TenantId tenantId,
|
||||
CustomerId customerId, UserId userId, String userName,
|
||||
ActionType actionType, int cntTime, Object... additionalInfo) {
|
||||
ArgumentMatcher<HasName> matcherEntityEquals = argument -> argument.getClass().equals(entity.getClass());
|
||||
ArgumentMatcher<EntityId> matcherOriginatorId = argument -> argument.equals(originatorId);
|
||||
testLogEntityActionAdditionalInfo(matcherEntityEquals, matcherOriginatorId, tenantId, customerId, userId, userName,
|
||||
actionType, cntTime, additionalInfo);
|
||||
}
|
||||
|
||||
private void testLogEntityActionAdditionalInfo(ArgumentMatcher<HasName> matcherEntity, ArgumentMatcher<EntityId> matcherOriginatorId,
|
||||
TenantId tenantId, CustomerId customerId, UserId userId, String userName,
|
||||
ActionType actionType, int cntTime, Object... additionalInfo) {
|
||||
@ -237,6 +293,62 @@ public abstract class AbstractNotifyEntityTest extends AbstractWebTest {
|
||||
}
|
||||
}
|
||||
|
||||
private void testLogEntityActionAdditionalInfoAny(ArgumentMatcher<HasName> matcherEntity, ArgumentMatcher<EntityId> matcherOriginatorId,
|
||||
TenantId tenantId, CustomerId customerId, UserId userId, String userName,
|
||||
ActionType actionType, int cntTime, int cntAdditionalInfo) {
|
||||
switch (cntAdditionalInfo) {
|
||||
case 1:
|
||||
Mockito.verify(auditLogService, times(cntTime))
|
||||
.logEntityAction(Mockito.eq(tenantId),
|
||||
Mockito.eq(customerId),
|
||||
Mockito.eq(userId),
|
||||
Mockito.eq(userName),
|
||||
Mockito.argThat(matcherOriginatorId),
|
||||
Mockito.argThat(matcherEntity),
|
||||
Mockito.eq(actionType),
|
||||
Mockito.isNull(),
|
||||
Mockito.anyString());
|
||||
break;
|
||||
case 2:
|
||||
Mockito.verify(auditLogService, times(cntTime))
|
||||
.logEntityAction(Mockito.eq(tenantId),
|
||||
Mockito.eq(customerId),
|
||||
Mockito.eq(userId),
|
||||
Mockito.eq(userName),
|
||||
Mockito.argThat(matcherOriginatorId),
|
||||
Mockito.argThat(matcherEntity),
|
||||
Mockito.eq(actionType),
|
||||
Mockito.isNull(),
|
||||
Mockito.anyString(),
|
||||
Mockito.anyString());
|
||||
break;
|
||||
case 3:
|
||||
Mockito.verify(auditLogService, times(cntTime))
|
||||
.logEntityAction(Mockito.eq(tenantId),
|
||||
Mockito.eq(customerId),
|
||||
Mockito.eq(userId),
|
||||
Mockito.eq(userName),
|
||||
Mockito.argThat(matcherOriginatorId),
|
||||
Mockito.argThat(matcherEntity),
|
||||
Mockito.eq(actionType),
|
||||
Mockito.isNull(),
|
||||
Mockito.anyString(),
|
||||
Mockito.anyString(),
|
||||
Mockito.anyString());
|
||||
break;
|
||||
default:
|
||||
Mockito.verify(auditLogService, times(cntTime))
|
||||
.logEntityAction(Mockito.eq(tenantId),
|
||||
Mockito.eq(customerId),
|
||||
Mockito.eq(userId),
|
||||
Mockito.eq(userName),
|
||||
Mockito.argThat(matcherOriginatorId),
|
||||
Mockito.argThat(matcherEntity),
|
||||
Mockito.eq(actionType),
|
||||
Mockito.isNull());
|
||||
}
|
||||
}
|
||||
|
||||
private void testLogEntityActionErrorAdditionalInfo(ArgumentMatcher<HasName> matcherEntity, EntityId originatorId, TenantId tenantId,
|
||||
CustomerId customerId, UserId userId, String userName, ActionType actionType,
|
||||
int cntTime, ArgumentMatcher<Exception> matcherError, Object... additionalInfo) {
|
||||
@ -265,7 +377,7 @@ public abstract class AbstractNotifyEntityTest extends AbstractWebTest {
|
||||
Mockito.argThat(matcherError),
|
||||
Mockito.eq(extractParameter(String.class, 0, additionalInfo)),
|
||||
Mockito.eq(extractParameter(String.class, 1, additionalInfo)));
|
||||
case 3:
|
||||
case 3:
|
||||
Mockito.verify(auditLogService, times(cntTime))
|
||||
.logEntityAction(Mockito.eq(tenantId),
|
||||
Mockito.eq(customerId),
|
||||
|
||||
@ -22,16 +22,19 @@ import org.junit.After;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.mockito.Mockito;
|
||||
import org.thingsboard.server.common.data.Customer;
|
||||
import org.thingsboard.server.common.data.Dashboard;
|
||||
import org.thingsboard.server.common.data.DashboardInfo;
|
||||
import org.thingsboard.server.common.data.Tenant;
|
||||
import org.thingsboard.server.common.data.User;
|
||||
import org.thingsboard.server.common.data.audit.ActionType;
|
||||
import org.thingsboard.server.common.data.edge.Edge;
|
||||
import org.thingsboard.server.common.data.id.CustomerId;
|
||||
import org.thingsboard.server.common.data.page.PageData;
|
||||
import org.thingsboard.server.common.data.page.PageLink;
|
||||
import org.thingsboard.server.common.data.security.Authority;
|
||||
import org.thingsboard.server.dao.exception.DataValidationException;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
@ -41,54 +44,66 @@ import static org.hamcrest.Matchers.containsString;
|
||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
|
||||
|
||||
public abstract class BaseDashboardControllerTest extends AbstractControllerTest {
|
||||
|
||||
|
||||
private IdComparator<DashboardInfo> idComparator = new IdComparator<>();
|
||||
|
||||
|
||||
private Tenant savedTenant;
|
||||
private User tenantAdmin;
|
||||
|
||||
|
||||
@Before
|
||||
public void beforeTest() throws Exception {
|
||||
loginSysAdmin();
|
||||
|
||||
|
||||
Tenant tenant = new Tenant();
|
||||
tenant.setTitle("My tenant");
|
||||
savedTenant = doPost("/api/tenant", tenant, Tenant.class);
|
||||
Assert.assertNotNull(savedTenant);
|
||||
|
||||
|
||||
tenantAdmin = new User();
|
||||
tenantAdmin.setAuthority(Authority.TENANT_ADMIN);
|
||||
tenantAdmin.setTenantId(savedTenant.getId());
|
||||
tenantAdmin.setEmail("tenant2@thingsboard.org");
|
||||
tenantAdmin.setFirstName("Joe");
|
||||
tenantAdmin.setLastName("Downs");
|
||||
|
||||
|
||||
tenantAdmin = createUserAndLogin(tenantAdmin, "testPassword1");
|
||||
}
|
||||
|
||||
|
||||
@After
|
||||
public void afterTest() throws Exception {
|
||||
loginSysAdmin();
|
||||
|
||||
doDelete("/api/tenant/"+savedTenant.getId().getId().toString())
|
||||
.andExpect(status().isOk());
|
||||
|
||||
doDelete("/api/tenant/" + savedTenant.getId().getId().toString())
|
||||
.andExpect(status().isOk());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testSaveDashboard() throws Exception {
|
||||
Dashboard dashboard = new Dashboard();
|
||||
dashboard.setTitle("My dashboard");
|
||||
|
||||
Mockito.reset(tbClusterService, auditLogService);
|
||||
|
||||
Dashboard savedDashboard = doPost("/api/dashboard", dashboard, Dashboard.class);
|
||||
|
||||
|
||||
testNotifyEntityOneTimeMsgToEdgeServiceNever(savedDashboard, savedDashboard.getId(), savedDashboard.getId(), savedTenant.getId(),
|
||||
tenantAdmin.getCustomerId(), tenantAdmin.getId(), tenantAdmin.getEmail(), ActionType.ADDED);
|
||||
|
||||
Assert.assertNotNull(savedDashboard);
|
||||
Assert.assertNotNull(savedDashboard.getId());
|
||||
Assert.assertTrue(savedDashboard.getCreatedTime() > 0);
|
||||
Assert.assertEquals(savedTenant.getId(), savedDashboard.getTenantId());
|
||||
Assert.assertEquals(dashboard.getTitle(), savedDashboard.getTitle());
|
||||
|
||||
|
||||
savedDashboard.setTitle("My new dashboard");
|
||||
|
||||
Mockito.reset(tbClusterService, auditLogService);
|
||||
|
||||
doPost("/api/dashboard", savedDashboard, Dashboard.class);
|
||||
|
||||
|
||||
testNotifyEntityAllOneTime(savedDashboard, savedDashboard.getId(), savedDashboard.getId(), savedTenant.getId(),
|
||||
tenantAdmin.getCustomerId(), tenantAdmin.getId(), tenantAdmin.getEmail(), ActionType.UPDATED);
|
||||
|
||||
Dashboard foundDashboard = doGet("/api/dashboard/" + savedDashboard.getId().getId().toString(), Dashboard.class);
|
||||
Assert.assertEquals(foundDashboard.getTitle(), savedDashboard.getTitle());
|
||||
}
|
||||
@ -97,7 +112,16 @@ public abstract class BaseDashboardControllerTest extends AbstractControllerTest
|
||||
public void testSaveDashboardInfoWithViolationOfValidation() throws Exception {
|
||||
Dashboard dashboard = new Dashboard();
|
||||
dashboard.setTitle(RandomStringUtils.randomAlphabetic(300));
|
||||
doPost("/api/dashboard", dashboard).andExpect(statusReason(containsString("length of title must be equal or less than 255")));
|
||||
String msgError = "length of title must be equal or less than 255";
|
||||
|
||||
Mockito.reset(tbClusterService, auditLogService);
|
||||
|
||||
doPost("/api/dashboard", dashboard).andExpect(statusReason(containsString(msgError)));
|
||||
|
||||
dashboard.setTenantId(savedTenant.getId());
|
||||
testNotifyEntityEqualsOneTimeError(dashboard, savedTenant.getId(),
|
||||
tenantAdmin.getId(), tenantAdmin.getEmail(), ActionType.ADDED, new DataValidationException(msgError));
|
||||
Mockito.reset(tbClusterService, auditLogService);
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -107,10 +131,16 @@ public abstract class BaseDashboardControllerTest extends AbstractControllerTest
|
||||
Dashboard savedDashboard = doPost("/api/dashboard", dashboard, Dashboard.class);
|
||||
|
||||
loginDifferentTenant();
|
||||
|
||||
Mockito.reset(tbClusterService, auditLogService);
|
||||
|
||||
doPost("/api/dashboard", savedDashboard, Dashboard.class, status().isForbidden());
|
||||
|
||||
testNotifyEntityNever(savedDashboard.getId(), savedDashboard);
|
||||
|
||||
deleteDifferentTenant();
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testFindDashboardById() throws Exception {
|
||||
Dashboard dashboard = new Dashboard();
|
||||
@ -120,48 +150,73 @@ public abstract class BaseDashboardControllerTest extends AbstractControllerTest
|
||||
Assert.assertNotNull(foundDashboard);
|
||||
Assert.assertEquals(savedDashboard, foundDashboard);
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testDeleteDashboard() throws Exception {
|
||||
Dashboard dashboard = new Dashboard();
|
||||
dashboard.setTitle("My dashboard");
|
||||
Dashboard savedDashboard = doPost("/api/dashboard", dashboard, Dashboard.class);
|
||||
|
||||
doDelete("/api/dashboard/"+savedDashboard.getId().getId().toString())
|
||||
.andExpect(status().isOk());
|
||||
|
||||
doGet("/api/dashboard/"+savedDashboard.getId().getId().toString())
|
||||
.andExpect(status().isNotFound());
|
||||
Mockito.reset(tbClusterService, auditLogService);
|
||||
|
||||
doDelete("/api/dashboard/" + savedDashboard.getId().getId().toString()).andExpect(status().isOk());
|
||||
|
||||
testNotifyEntityOneTimeMsgToEdgeServiceNever(savedDashboard, savedDashboard.getId(), savedDashboard.getId(),
|
||||
savedDashboard.getTenantId(), tenantAdmin.getCustomerId(), tenantAdmin.getId(), tenantAdmin.getEmail(), ActionType.DELETED,
|
||||
savedDashboard.getId().getId().toString());
|
||||
|
||||
|
||||
doGet("/api/dashboard/" + savedDashboard.getId().getId().toString())
|
||||
.andExpect(status().isNotFound());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testSaveDashboardWithEmptyTitle() throws Exception {
|
||||
Dashboard dashboard = new Dashboard();
|
||||
String msgError = "Dashboard title should be specified";
|
||||
|
||||
Mockito.reset(tbClusterService, auditLogService);
|
||||
|
||||
doPost("/api/dashboard", dashboard)
|
||||
.andExpect(status().isBadRequest())
|
||||
.andExpect(statusReason(containsString("Dashboard title should be specified")));
|
||||
.andExpect(status().isBadRequest())
|
||||
.andExpect(statusReason(containsString(msgError)));
|
||||
|
||||
testNotifyEntityEqualsOneTimeError(dashboard, savedTenant.getId(),
|
||||
tenantAdmin.getId(), tenantAdmin.getEmail(), ActionType.ADDED, new DataValidationException(msgError));
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testAssignUnassignDashboardToCustomer() throws Exception {
|
||||
Dashboard dashboard = new Dashboard();
|
||||
dashboard.setTitle("My dashboard");
|
||||
Dashboard savedDashboard = doPost("/api/dashboard", dashboard, Dashboard.class);
|
||||
|
||||
|
||||
Customer customer = new Customer();
|
||||
customer.setTitle("My customer");
|
||||
Customer savedCustomer = doPost("/api/customer", customer, Customer.class);
|
||||
|
||||
Dashboard assignedDashboard = doPost("/api/customer/" + savedCustomer.getId().getId().toString()
|
||||
|
||||
Mockito.reset(tbClusterService, auditLogService);
|
||||
|
||||
Dashboard assignedDashboard = doPost("/api/customer/" + savedCustomer.getId().getId().toString()
|
||||
+ "/dashboard/" + savedDashboard.getId().getId().toString(), Dashboard.class);
|
||||
|
||||
Assert.assertTrue(assignedDashboard.getAssignedCustomers().contains(savedCustomer.toShortCustomerInfo()));
|
||||
|
||||
testNotifyEntityAllOneTimeLogEntityActionEntityEqClass(assignedDashboard, assignedDashboard.getId(), assignedDashboard.getId(),
|
||||
savedTenant.getId(), savedCustomer.getId(), tenantAdmin.getId(), tenantAdmin.getEmail(), ActionType.ASSIGNED_TO_CUSTOMER,
|
||||
savedDashboard.getId().getId().toString(), savedCustomer.getId().getId().toString(), savedCustomer.getTitle());
|
||||
|
||||
Dashboard foundDashboard = doGet("/api/dashboard/" + savedDashboard.getId().getId().toString(), Dashboard.class);
|
||||
Assert.assertTrue(foundDashboard.getAssignedCustomers().contains(savedCustomer.toShortCustomerInfo()));
|
||||
|
||||
Dashboard unassignedDashboard =
|
||||
doDelete("/api/customer/"+savedCustomer.getId().getId().toString()+"/dashboard/" + savedDashboard.getId().getId().toString(), Dashboard.class);
|
||||
Mockito.reset(tbClusterService, auditLogService);
|
||||
|
||||
Dashboard unassignedDashboard =
|
||||
doDelete("/api/customer/" + savedCustomer.getId().getId().toString() + "/dashboard/" + savedDashboard.getId().getId().toString(), Dashboard.class);
|
||||
|
||||
testNotifyEntityAllOneTimeLogEntityActionEntityEqClass(assignedDashboard, assignedDashboard.getId(), assignedDashboard.getId(),
|
||||
savedTenant.getId(), savedCustomer.getId(), tenantAdmin.getId(), tenantAdmin.getEmail(), ActionType.UNASSIGNED_FROM_CUSTOMER,
|
||||
savedDashboard.getId().getId().toString(), savedCustomer.getId().getId().toString(), savedCustomer.getTitle());
|
||||
|
||||
Assert.assertTrue(unassignedDashboard.getAssignedCustomers() == null || unassignedDashboard.getAssignedCustomers().isEmpty());
|
||||
|
||||
@ -169,22 +224,25 @@ public abstract class BaseDashboardControllerTest extends AbstractControllerTest
|
||||
|
||||
Assert.assertTrue(foundDashboard.getAssignedCustomers() == null || foundDashboard.getAssignedCustomers().isEmpty());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testAssignDashboardToNonExistentCustomer() throws Exception {
|
||||
Dashboard dashboard = new Dashboard();
|
||||
dashboard.setTitle("My dashboard");
|
||||
Dashboard savedDashboard = doPost("/api/dashboard", dashboard, Dashboard.class);
|
||||
|
||||
|
||||
doPost("/api/customer/" + Uuids.timeBased().toString()
|
||||
+ "/dashboard/" + savedDashboard.getId().getId().toString())
|
||||
.andExpect(status().isNotFound());
|
||||
.andExpect(status().isNotFound());
|
||||
|
||||
Mockito.reset(tbClusterService, auditLogService);
|
||||
testNotifyEntityNever(savedDashboard.getId(), savedDashboard);
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testAssignDashboardToCustomerFromDifferentTenant() throws Exception {
|
||||
loginSysAdmin();
|
||||
|
||||
|
||||
Tenant tenant2 = new Tenant();
|
||||
tenant2.setTitle("Different tenant");
|
||||
Tenant savedTenant2 = doPost("/api/tenant", tenant2, Tenant.class);
|
||||
@ -196,100 +254,121 @@ public abstract class BaseDashboardControllerTest extends AbstractControllerTest
|
||||
tenantAdmin2.setEmail("tenant3@thingsboard.org");
|
||||
tenantAdmin2.setFirstName("Joe");
|
||||
tenantAdmin2.setLastName("Downs");
|
||||
|
||||
tenantAdmin2 = createUserAndLogin(tenantAdmin2, "testPassword1");
|
||||
|
||||
|
||||
createUserAndLogin(tenantAdmin2, "testPassword1");
|
||||
|
||||
Customer customer = new Customer();
|
||||
customer.setTitle("Different customer");
|
||||
Customer savedCustomer = doPost("/api/customer", customer, Customer.class);
|
||||
|
||||
login(tenantAdmin.getEmail(), "testPassword1");
|
||||
|
||||
|
||||
Dashboard dashboard = new Dashboard();
|
||||
dashboard.setTitle("My dashboard");
|
||||
Dashboard savedDashboard = doPost("/api/dashboard", dashboard, Dashboard.class);
|
||||
|
||||
|
||||
doPost("/api/customer/" + savedCustomer.getId().getId().toString()
|
||||
+ "/dashboard/" + savedDashboard.getId().getId().toString())
|
||||
.andExpect(status().isForbidden());
|
||||
|
||||
.andExpect(status().isForbidden());
|
||||
|
||||
Mockito.reset(tbClusterService, auditLogService);
|
||||
testNotifyEntityNever(savedDashboard.getId(), savedDashboard);
|
||||
|
||||
doDelete("/api/tenant/" + savedTenant2.getId().getId().toString())
|
||||
.andExpect(status().isForbidden());
|
||||
testNotifyEntityNever(savedDashboard.getId(), savedDashboard);
|
||||
|
||||
loginSysAdmin();
|
||||
|
||||
doDelete("/api/tenant/"+savedTenant2.getId().getId().toString())
|
||||
.andExpect(status().isOk());
|
||||
|
||||
doDelete("/api/tenant/" + savedTenant2.getId().getId().toString())
|
||||
.andExpect(status().isOk());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testFindTenantDashboards() throws Exception {
|
||||
List<DashboardInfo> dashboards = new ArrayList<>();
|
||||
for (int i=0;i<173;i++) {
|
||||
|
||||
Mockito.reset(tbClusterService, auditLogService);
|
||||
|
||||
int cntEntity = 173;
|
||||
for (int i = 0; i < cntEntity; i++) {
|
||||
Dashboard dashboard = new Dashboard();
|
||||
dashboard.setTitle("Dashboard"+i);
|
||||
dashboard.setTitle("Dashboard" + i);
|
||||
dashboards.add(new DashboardInfo(doPost("/api/dashboard", dashboard, Dashboard.class)));
|
||||
}
|
||||
|
||||
testNotifyManyEntityManyTimeMsgToEdgeServiceNever(new Dashboard(), new Dashboard(),
|
||||
savedTenant.getId(), tenantAdmin.getCustomerId(), tenantAdmin.getId(), tenantAdmin.getEmail(),
|
||||
ActionType.ADDED, cntEntity);
|
||||
|
||||
List<DashboardInfo> loadedDashboards = new ArrayList<>();
|
||||
PageLink pageLink = new PageLink(24);
|
||||
PageData<DashboardInfo> pageData = null;
|
||||
do {
|
||||
pageData = doGetTypedWithPageLink("/api/tenant/dashboards?",
|
||||
new TypeReference<PageData<DashboardInfo>>(){}, pageLink);
|
||||
pageData = doGetTypedWithPageLink("/api/tenant/dashboards?",
|
||||
new TypeReference<PageData<DashboardInfo>>() {
|
||||
}, pageLink);
|
||||
loadedDashboards.addAll(pageData.getData());
|
||||
if (pageData.hasNext()) {
|
||||
pageLink = pageLink.nextPageLink();
|
||||
}
|
||||
} while (pageData.hasNext());
|
||||
|
||||
|
||||
Collections.sort(dashboards, idComparator);
|
||||
Collections.sort(loadedDashboards, idComparator);
|
||||
|
||||
|
||||
Assert.assertEquals(dashboards, loadedDashboards);
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testFindTenantDashboardsByTitle() throws Exception {
|
||||
String title1 = "Dashboard title 1";
|
||||
List<DashboardInfo> dashboardsTitle1 = new ArrayList<>();
|
||||
for (int i=0;i<134;i++) {
|
||||
int cntEntity = 134;
|
||||
for (int i = 0; i < cntEntity; i++) {
|
||||
Dashboard dashboard = new Dashboard();
|
||||
String suffix = RandomStringUtils.randomAlphanumeric((int)(Math.random()*15));
|
||||
String title = title1+suffix;
|
||||
String suffix = RandomStringUtils.randomAlphanumeric((int) (Math.random() * 15));
|
||||
String title = title1 + suffix;
|
||||
title = i % 2 == 0 ? title.toLowerCase() : title.toUpperCase();
|
||||
dashboard.setTitle(title);
|
||||
dashboardsTitle1.add(new DashboardInfo(doPost("/api/dashboard", dashboard, Dashboard.class)));
|
||||
}
|
||||
String title2 = "Dashboard title 2";
|
||||
List<DashboardInfo> dashboardsTitle2 = new ArrayList<>();
|
||||
for (int i=0;i<112;i++) {
|
||||
|
||||
for (int i = 0; i < 112; i++) {
|
||||
Dashboard dashboard = new Dashboard();
|
||||
String suffix = RandomStringUtils.randomAlphanumeric((int)(Math.random()*15));
|
||||
String title = title2+suffix;
|
||||
String suffix = RandomStringUtils.randomAlphanumeric((int) (Math.random() * 15));
|
||||
String title = title2 + suffix;
|
||||
title = i % 2 == 0 ? title.toLowerCase() : title.toUpperCase();
|
||||
dashboard.setTitle(title);
|
||||
dashboardsTitle2.add(new DashboardInfo(doPost("/api/dashboard", dashboard, Dashboard.class)));
|
||||
}
|
||||
|
||||
|
||||
List<DashboardInfo> loadedDashboardsTitle1 = new ArrayList<>();
|
||||
PageLink pageLink = new PageLink(15, 0, title1);
|
||||
PageData<DashboardInfo> pageData = null;
|
||||
do {
|
||||
pageData = doGetTypedWithPageLink("/api/tenant/dashboards?",
|
||||
new TypeReference<PageData<DashboardInfo>>(){}, pageLink);
|
||||
pageData = doGetTypedWithPageLink("/api/tenant/dashboards?",
|
||||
new TypeReference<PageData<DashboardInfo>>() {
|
||||
}, pageLink);
|
||||
loadedDashboardsTitle1.addAll(pageData.getData());
|
||||
if (pageData.hasNext()) {
|
||||
pageLink = pageLink.nextPageLink();
|
||||
}
|
||||
} while (pageData.hasNext());
|
||||
|
||||
|
||||
Collections.sort(dashboardsTitle1, idComparator);
|
||||
Collections.sort(loadedDashboardsTitle1, idComparator);
|
||||
|
||||
|
||||
Assert.assertEquals(dashboardsTitle1, loadedDashboardsTitle1);
|
||||
|
||||
|
||||
List<DashboardInfo> loadedDashboardsTitle2 = new ArrayList<>();
|
||||
pageLink = new PageLink(4, 0, title2);
|
||||
do {
|
||||
pageData = doGetTypedWithPageLink("/api/tenant/dashboards?",
|
||||
new TypeReference<PageData<DashboardInfo>>(){}, pageLink);
|
||||
pageData = doGetTypedWithPageLink("/api/tenant/dashboards?",
|
||||
new TypeReference<PageData<DashboardInfo>>() {
|
||||
}, pageLink);
|
||||
loadedDashboardsTitle2.addAll(pageData.getData());
|
||||
if (pageData.hasNext()) {
|
||||
pageLink = pageLink.nextPageLink();
|
||||
@ -298,63 +377,79 @@ public abstract class BaseDashboardControllerTest extends AbstractControllerTest
|
||||
|
||||
Collections.sort(dashboardsTitle2, idComparator);
|
||||
Collections.sort(loadedDashboardsTitle2, idComparator);
|
||||
|
||||
|
||||
Assert.assertEquals(dashboardsTitle2, loadedDashboardsTitle2);
|
||||
|
||||
|
||||
Mockito.reset(tbClusterService, auditLogService);
|
||||
|
||||
for (DashboardInfo dashboard : loadedDashboardsTitle1) {
|
||||
doDelete("/api/dashboard/"+dashboard.getId().getId().toString())
|
||||
.andExpect(status().isOk());
|
||||
doDelete("/api/dashboard/" + dashboard.getId().getId().toString())
|
||||
.andExpect(status().isOk());
|
||||
}
|
||||
|
||||
|
||||
testNotifyManyEntityManyTimeMsgToEdgeServiceNeverAdditionalInfoAny(new Dashboard(), new Dashboard(),
|
||||
savedTenant.getId(), tenantAdmin.getCustomerId(), tenantAdmin.getId(), tenantAdmin.getEmail(),
|
||||
ActionType.DELETED, cntEntity, 1);
|
||||
|
||||
pageLink = new PageLink(4, 0, title1);
|
||||
pageData = doGetTypedWithPageLink("/api/tenant/dashboards?",
|
||||
new TypeReference<PageData<DashboardInfo>>(){}, pageLink);
|
||||
pageData = doGetTypedWithPageLink("/api/tenant/dashboards?",
|
||||
new TypeReference<PageData<DashboardInfo>>() {
|
||||
}, pageLink);
|
||||
Assert.assertFalse(pageData.hasNext());
|
||||
Assert.assertEquals(0, pageData.getData().size());
|
||||
|
||||
|
||||
for (DashboardInfo dashboard : loadedDashboardsTitle2) {
|
||||
doDelete("/api/dashboard/"+dashboard.getId().getId().toString())
|
||||
.andExpect(status().isOk());
|
||||
doDelete("/api/dashboard/" + dashboard.getId().getId().toString())
|
||||
.andExpect(status().isOk());
|
||||
}
|
||||
|
||||
|
||||
pageLink = new PageLink(4, 0, title2);
|
||||
pageData = doGetTypedWithPageLink("/api/tenant/dashboards?",
|
||||
new TypeReference<PageData<DashboardInfo>>(){}, pageLink);
|
||||
pageData = doGetTypedWithPageLink("/api/tenant/dashboards?",
|
||||
new TypeReference<PageData<DashboardInfo>>() {
|
||||
}, pageLink);
|
||||
Assert.assertFalse(pageData.hasNext());
|
||||
Assert.assertEquals(0, pageData.getData().size());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testFindCustomerDashboards() throws Exception {
|
||||
Customer customer = new Customer();
|
||||
customer.setTitle("Test customer");
|
||||
customer = doPost("/api/customer", customer, Customer.class);
|
||||
CustomerId customerId = customer.getId();
|
||||
|
||||
|
||||
Mockito.reset(tbClusterService, auditLogService);
|
||||
|
||||
int cntEntity = 173;
|
||||
List<DashboardInfo> dashboards = new ArrayList<>();
|
||||
for (int i=0;i<173;i++) {
|
||||
for (int i = 0; i < cntEntity; i++) {
|
||||
Dashboard dashboard = new Dashboard();
|
||||
dashboard.setTitle("Dashboard"+i);
|
||||
dashboard.setTitle("Dashboard" + i);
|
||||
dashboard = doPost("/api/dashboard", dashboard, Dashboard.class);
|
||||
dashboards.add(new DashboardInfo(doPost("/api/customer/" + customerId.getId().toString()
|
||||
+ "/dashboard/" + dashboard.getId().getId().toString(), Dashboard.class)));
|
||||
+ "/dashboard/" + dashboard.getId().getId().toString(), Dashboard.class)));
|
||||
}
|
||||
|
||||
|
||||
testNotifyManyEntityManyTimeMsgToEdgeServiceEntityEqAny(new Dashboard(), new Dashboard(),
|
||||
savedTenant.getId(), tenantAdmin.getCustomerId(), tenantAdmin.getId(), tenantAdmin.getEmail(),
|
||||
ActionType.ADDED, ActionType.ASSIGNED_TO_CUSTOMER, cntEntity, cntEntity*2);
|
||||
|
||||
List<DashboardInfo> loadedDashboards = new ArrayList<>();
|
||||
PageLink pageLink = new PageLink(21);
|
||||
PageData<DashboardInfo> pageData = null;
|
||||
do {
|
||||
pageData = doGetTypedWithPageLink("/api/customer/" + customerId.getId().toString() + "/dashboards?",
|
||||
new TypeReference<PageData<DashboardInfo>>(){}, pageLink);
|
||||
new TypeReference<PageData<DashboardInfo>>() {
|
||||
}, pageLink);
|
||||
loadedDashboards.addAll(pageData.getData());
|
||||
if (pageData.hasNext()) {
|
||||
pageLink = pageLink.nextPageLink();
|
||||
}
|
||||
} while (pageData.hasNext());
|
||||
|
||||
|
||||
Collections.sort(dashboards, idComparator);
|
||||
Collections.sort(loadedDashboards, idComparator);
|
||||
|
||||
|
||||
Assert.assertEquals(dashboards, loadedDashboards);
|
||||
}
|
||||
|
||||
@ -367,11 +462,18 @@ public abstract class BaseDashboardControllerTest extends AbstractControllerTest
|
||||
dashboard.setTitle("My dashboard");
|
||||
Dashboard savedDashboard = doPost("/api/dashboard", dashboard, Dashboard.class);
|
||||
|
||||
Mockito.reset(tbClusterService, auditLogService);
|
||||
|
||||
doPost("/api/edge/" + savedEdge.getId().getId().toString()
|
||||
+ "/dashboard/" + savedDashboard.getId().getId().toString(), Dashboard.class);
|
||||
|
||||
testNotifyEntityAllOneTime(savedDashboard, savedDashboard.getId(), savedDashboard.getId(), savedTenant.getId(),
|
||||
tenantAdmin.getCustomerId(), tenantAdmin.getId(), tenantAdmin.getEmail(), ActionType.ASSIGNED_TO_EDGE,
|
||||
savedDashboard.getId().getId().toString(), savedEdge.getId().getId().toString(), savedEdge.getName());
|
||||
|
||||
PageData<Dashboard> pageData = doGetTypedWithPageLink("/api/edge/" + savedEdge.getId().getId().toString() + "/dashboards?",
|
||||
new TypeReference<PageData<Dashboard>>() {}, new PageLink(100));
|
||||
new TypeReference<PageData<Dashboard>>() {
|
||||
}, new PageLink(100));
|
||||
|
||||
Assert.assertEquals(1, pageData.getData().size());
|
||||
|
||||
@ -379,7 +481,8 @@ public abstract class BaseDashboardControllerTest extends AbstractControllerTest
|
||||
+ "/dashboard/" + savedDashboard.getId().getId().toString(), Dashboard.class);
|
||||
|
||||
pageData = doGetTypedWithPageLink("/api/edge/" + savedEdge.getId().getId().toString() + "/dashboards?",
|
||||
new TypeReference<PageData<Dashboard>>() {}, new PageLink(100));
|
||||
new TypeReference<PageData<Dashboard>>() {
|
||||
}, new PageLink(100));
|
||||
|
||||
Assert.assertEquals(0, pageData.getData().size());
|
||||
}
|
||||
|
||||
@ -214,6 +214,8 @@ public abstract class BaseDeviceControllerTest extends AbstractControllerTest {
|
||||
doDelete("/api/device/" + savedDevice.getId().getId())
|
||||
.andExpect(status().isOk());
|
||||
|
||||
// gatewayNotificationsService.onDeviceDeleted(device);
|
||||
|
||||
doGet("/api/device/" + savedDevice.getId().getId())
|
||||
.andExpect(status().isNotFound());
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user