From d423738a4890f041d5f7aff00de3166918e16819 Mon Sep 17 00:00:00 2001 From: nickAS21 Date: Thu, 7 Jul 2022 15:15:27 +0300 Subject: [PATCH] refactoring: tests TbResource --- .../controller/AbstractNotifyEntityTest.java | 98 +++++++++++++------ .../BaseDashboardControllerTest.java | 1 + .../BaseTbResourceControllerTest.java | 72 ++++++++++++-- 3 files changed, 134 insertions(+), 37 deletions(-) diff --git a/application/src/test/java/org/thingsboard/server/controller/AbstractNotifyEntityTest.java b/application/src/test/java/org/thingsboard/server/controller/AbstractNotifyEntityTest.java index 1eff1a2513..a32ec3c427 100644 --- a/application/src/test/java/org/thingsboard/server/controller/AbstractNotifyEntityTest.java +++ b/application/src/test/java/org/thingsboard/server/controller/AbstractNotifyEntityTest.java @@ -86,11 +86,15 @@ public abstract class AbstractNotifyEntityTest extends AbstractWebTest { Mockito.eq(edgeTypeByActionType(actionType))); ArgumentMatcher matcherOriginatorId = argument -> argument.equals(relation.getTo()); ArgumentMatcher matcherEntityClassEquals = Objects::isNull; - testLogEntityActionAdditionalInfo(matcherEntityClassEquals, matcherOriginatorId, tenantId, customerId, userId, userName, actionType, cntTime, + ArgumentMatcher matcherCustomerId = customerId == null ? + argument -> argument.getClass().equals(CustomerId.class) : argument -> argument.equals(customerId); + ArgumentMatcher matcherUserId = userId == null ? + argument -> argument.getClass().equals(UserId.class) : argument -> argument.equals(userId); + testLogEntityActionAdditionalInfo(matcherEntityClassEquals, matcherOriginatorId, tenantId, matcherCustomerId, matcherUserId, userName, actionType, cntTime, extractMatcherAdditionalInfo(additionalInfo)); testPushMsgToRuleEngineNever(relation.getTo()); matcherOriginatorId = argument -> argument.equals(relation.getFrom()); - testLogEntityActionAdditionalInfo(matcherEntityClassEquals, matcherOriginatorId, tenantId, customerId, userId, userName, actionType, cntTime, + testLogEntityActionAdditionalInfo(matcherEntityClassEquals, matcherOriginatorId, tenantId, matcherCustomerId, matcherUserId, userName, actionType, cntTime, extractMatcherAdditionalInfo(additionalInfo)); testPushMsgToRuleEngineNever(relation.getFrom()); Mockito.reset(tbClusterService, auditLogService); @@ -104,7 +108,11 @@ public abstract class AbstractNotifyEntityTest extends AbstractWebTest { Mockito.eq(edgeTypeByActionType(actionType))); ArgumentMatcher matcherOriginatorId = argument -> argument.getClass().equals(relation.getFrom().getClass()); ArgumentMatcher matcherEntityClassEquals = Objects::isNull; - testLogEntityActionAdditionalInfoAny(matcherEntityClassEquals, matcherOriginatorId, tenantId, customerId, userId, + ArgumentMatcher matcherCustomerId = customerId == null ? + argument -> argument.getClass().equals(CustomerId.class) : argument -> argument.equals(customerId); + ArgumentMatcher matcherUserId = userId == null ? + argument -> argument.getClass().equals(UserId.class) : argument -> argument.equals(userId); + testLogEntityActionAdditionalInfoAny(matcherEntityClassEquals, matcherOriginatorId, tenantId, matcherCustomerId, matcherUserId, userName, actionType, cntTime * 2, 1); testPushMsgToRuleEngineTime(matcherOriginatorId, tenantId, cntTime); Mockito.reset(tbClusterService, auditLogService); @@ -152,7 +160,11 @@ public abstract class AbstractNotifyEntityTest extends AbstractWebTest { testNotificationMsgToEdgeServiceNeverWithActionType(entityId, actionType); ArgumentMatcher matcherEntityClassEquals = argument -> argument.getClass().equals(entity.getClass()); ArgumentMatcher matcherOriginatorId = argument -> argument.getClass().equals(originatorId.getClass()); - testLogEntityActionAdditionalInfo(matcherEntityClassEquals, matcherOriginatorId, tenantId, customerId, userId, userName, actionType, cntTime, + ArgumentMatcher matcherCustomerId = customerId == null ? + argument -> argument.getClass().equals(CustomerId.class) : argument -> argument.equals(customerId); + ArgumentMatcher matcherUserId = userId == null ? + argument -> argument.getClass().equals(UserId.class) : argument -> argument.equals(userId); + testLogEntityActionAdditionalInfo(matcherEntityClassEquals, matcherOriginatorId, tenantId, matcherCustomerId, matcherUserId, userName, actionType, cntTime, extractMatcherAdditionalInfo(additionalInfo)); testPushMsgToRuleEngineTime(matcherOriginatorId, tenantId, cntTime); Mockito.reset(tbClusterService, auditLogService); @@ -166,7 +178,11 @@ public abstract class AbstractNotifyEntityTest extends AbstractWebTest { testSendNotificationMsgToEdgeServiceTimeEntityEqAny(tenantId, actionTypeEdge, cntTimeEdge); ArgumentMatcher matcherEntityClassEquals = argument -> argument.getClass().equals(entity.getClass()); ArgumentMatcher matcherOriginatorId = argument -> argument.getClass().equals(originatorId.getClass()); - testLogEntityActionAdditionalInfo(matcherEntityClassEquals, matcherOriginatorId, tenantId, customerId, userId, userName, actionType, cntTime, + ArgumentMatcher matcherCustomerId = customerId == null ? + argument -> argument.getClass().equals(CustomerId.class) : argument -> argument.equals(customerId); + ArgumentMatcher matcherUserId = userId == null ? + argument -> argument.getClass().equals(UserId.class) : argument -> argument.equals(userId); + testLogEntityActionAdditionalInfo(matcherEntityClassEquals, matcherOriginatorId, tenantId, matcherCustomerId, matcherUserId, userName, actionType, cntTime, extractMatcherAdditionalInfoClass(additionalInfo)); testPushMsgToRuleEngineTime(matcherOriginatorId, tenantId, cntTimeRuleEngine); } @@ -178,7 +194,11 @@ public abstract class AbstractNotifyEntityTest extends AbstractWebTest { testSendNotificationMsgToEdgeServiceTimeEntityEqAny(tenantId, actionTypeEdge, cntTimeEdge); ArgumentMatcher matcherEntityClassEquals = argument -> argument.getClass().equals(entity.getClass()); ArgumentMatcher matcherOriginatorId = argument -> argument.getClass().equals(originatorId.getClass()); - testLogEntityActionAdditionalInfoAny(matcherEntityClassEquals, matcherOriginatorId, tenantId, customerId, userId, userName, actionType, cntTime, + ArgumentMatcher matcherCustomerId = customerId == null ? + argument -> argument.getClass().equals(CustomerId.class) : argument -> argument.equals(customerId); + ArgumentMatcher matcherUserId = userId == null ? + argument -> argument.getClass().equals(UserId.class) : argument -> argument.equals(userId); + testLogEntityActionAdditionalInfoAny(matcherEntityClassEquals, matcherOriginatorId, tenantId, matcherCustomerId, matcherUserId, userName, actionType, cntTime, cntAdditionalInfo); testPushMsgToRuleEngineTime(matcherOriginatorId, tenantId, cntTimeEdge); Mockito.reset(tbClusterService, auditLogService); @@ -192,7 +212,11 @@ public abstract class AbstractNotifyEntityTest extends AbstractWebTest { testNotificationMsgToEdgeServiceNeverWithActionType(entityId, actionType); ArgumentMatcher matcherEntityClassEquals = argument -> argument.getClass().equals(entity.getClass()); ArgumentMatcher matcherOriginatorId = argument -> argument.getClass().equals(originatorId.getClass()); - testLogEntityActionAdditionalInfoAny(matcherEntityClassEquals, matcherOriginatorId, tenantId, customerId, userId, userName, actionType, cntTime, + ArgumentMatcher matcherCustomerId = customerId == null ? + argument -> argument.getClass().equals(CustomerId.class) : argument -> argument.equals(customerId); + ArgumentMatcher matcherUserId = userId == null ? + argument -> argument.getClass().equals(UserId.class) : argument -> argument.equals(userId); + testLogEntityActionAdditionalInfoAny(matcherEntityClassEquals, matcherOriginatorId, tenantId, matcherCustomerId, matcherUserId, userName, actionType, cntTime, cntAdditionalInfo); testPushMsgToRuleEngineTime(matcherOriginatorId, tenantId, cntTime); Mockito.reset(tbClusterService, auditLogService); @@ -233,7 +257,11 @@ public abstract class AbstractNotifyEntityTest extends AbstractWebTest { testNotificationMsgToEdgeServiceTime(entityId, tenantId, actionTypeEdge, cntTimeEdge); ArgumentMatcher matcherEntityClassEquals = argument -> argument.getClass().equals(entity.getClass()); ArgumentMatcher matcherOriginatorId = argument -> argument.getClass().equals(originatorId.getClass()); - testLogEntityActionAdditionalInfoAny(matcherEntityClassEquals, matcherOriginatorId, tenantId, customerId, userId, userName, actionType, cntTime, + ArgumentMatcher matcherCustomerId = customerId == null ? + argument -> argument.getClass().equals(CustomerId.class) : argument -> argument.equals(customerId); + ArgumentMatcher matcherUserId = userId == null ? + argument -> argument.getClass().equals(UserId.class) : argument -> argument.equals(userId); + testLogEntityActionAdditionalInfoAny(matcherEntityClassEquals, matcherOriginatorId, tenantId, matcherCustomerId, matcherUserId, userName, actionType, cntTime, cntAdditionalInfo); testPushMsgToRuleEngineTime(matcherOriginatorId, tenantId, cntTimeRuleEngine); testBroadcastEntityStateChangeEventTime(entityId, tenantId, cntTime); @@ -364,9 +392,13 @@ public abstract class AbstractNotifyEntityTest extends AbstractWebTest { private void testLogEntityAction(HasName entity, EntityId originatorId, TenantId tenantId, CustomerId customerId, UserId userId, String userName, ActionType actionType, int cntTime, Object... additionalInfo) { - ArgumentMatcher matcherEntityEquals = entity == null ? Objects::isNull : argument -> argument.equals(entity); + ArgumentMatcher matcherEntityEquals = entity == null ? Objects::isNull : argument -> argument.toString().equals(entity.toString()); ArgumentMatcher matcherOriginatorId = argument -> argument.equals(originatorId); - testLogEntityActionAdditionalInfo(matcherEntityEquals, matcherOriginatorId, tenantId, customerId, userId, userName, + ArgumentMatcher matcherCustomerId = customerId == null ? + argument -> argument.getClass().equals(CustomerId.class) : argument -> argument.equals(customerId); + ArgumentMatcher matcherUserId = userId == null ? + argument -> argument.getClass().equals(UserId.class) : argument -> argument.equals(userId); + testLogEntityActionAdditionalInfo(matcherEntityEquals, matcherOriginatorId, tenantId, matcherCustomerId, matcherUserId, userName, actionType, cntTime, extractMatcherAdditionalInfo(additionalInfo)); } @@ -375,19 +407,24 @@ public abstract class AbstractNotifyEntityTest extends AbstractWebTest { ActionType actionType, int cntTime, Object... additionalInfo) { ArgumentMatcher matcherEntityEquals = argument -> argument.getClass().equals(entity.getClass()); ArgumentMatcher matcherOriginatorId = argument -> argument.equals(originatorId); - testLogEntityActionAdditionalInfo(matcherEntityEquals, matcherOriginatorId, tenantId, customerId, userId, userName, + ArgumentMatcher matcherCustomerId = customerId == null ? + argument -> argument.getClass().equals(CustomerId.class) : argument -> argument.equals(customerId); + ArgumentMatcher matcherUserId = userId == null ? + argument -> argument.getClass().equals(UserId.class) : argument -> argument.equals(userId); + testLogEntityActionAdditionalInfo(matcherEntityEquals, matcherOriginatorId, tenantId, matcherCustomerId, matcherUserId, userName, actionType, cntTime, extractMatcherAdditionalInfo(additionalInfo)); } private void testLogEntityActionAdditionalInfo(ArgumentMatcher matcherEntity, ArgumentMatcher matcherOriginatorId, - TenantId tenantId, CustomerId customerId, UserId userId, String userName, - ActionType actionType, int cntTime, List> matcherAdditionalInfos) { + TenantId tenantId, ArgumentMatcher matcherCustomerId, + ArgumentMatcher matcherUserId, String userName, ActionType actionType, + int cntTime, List> matcherAdditionalInfos) { switch (matcherAdditionalInfos.size()) { case 1: Mockito.verify(auditLogService, times(cntTime)) .logEntityAction(Mockito.eq(tenantId), - Mockito.eq(customerId), - Mockito.eq(userId), + Mockito.argThat(matcherCustomerId), + Mockito.argThat(matcherUserId), Mockito.eq(userName), Mockito.argThat(matcherOriginatorId), Mockito.argThat(matcherEntity), @@ -398,8 +435,8 @@ public abstract class AbstractNotifyEntityTest extends AbstractWebTest { case 2: Mockito.verify(auditLogService, times(cntTime)) .logEntityAction(Mockito.eq(tenantId), - Mockito.eq(customerId), - Mockito.eq(userId), + Mockito.argThat(matcherCustomerId), + Mockito.argThat(matcherUserId), Mockito.eq(userName), Mockito.argThat(matcherOriginatorId), Mockito.argThat(matcherEntity), @@ -411,8 +448,8 @@ public abstract class AbstractNotifyEntityTest extends AbstractWebTest { case 3: Mockito.verify(auditLogService, times(cntTime)) .logEntityAction(Mockito.eq(tenantId), - Mockito.eq(customerId), - Mockito.eq(userId), + Mockito.argThat(matcherCustomerId), + Mockito.argThat(matcherUserId), Mockito.eq(userName), Mockito.argThat(matcherOriginatorId), Mockito.argThat(matcherEntity), @@ -425,8 +462,8 @@ public abstract class AbstractNotifyEntityTest extends AbstractWebTest { default: Mockito.verify(auditLogService, times(cntTime)) .logEntityAction(Mockito.eq(tenantId), - Mockito.eq(customerId), - Mockito.eq(userId), + Mockito.argThat(matcherCustomerId), + Mockito.argThat(matcherUserId), Mockito.eq(userName), Mockito.argThat(matcherOriginatorId), Mockito.argThat(matcherEntity), @@ -436,14 +473,15 @@ public abstract class AbstractNotifyEntityTest extends AbstractWebTest { } private void testLogEntityActionAdditionalInfoAny(ArgumentMatcher matcherEntity, ArgumentMatcher matcherOriginatorId, - TenantId tenantId, CustomerId customerId, UserId userId, String userName, + TenantId tenantId, ArgumentMatcher matcherCustomerId, + ArgumentMatcher matcherUserId, 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.argThat(matcherCustomerId), + Mockito.argThat(matcherUserId), Mockito.eq(userName), Mockito.argThat(matcherOriginatorId), Mockito.argThat(matcherEntity), @@ -454,8 +492,8 @@ public abstract class AbstractNotifyEntityTest extends AbstractWebTest { case 2: Mockito.verify(auditLogService, times(cntTime)) .logEntityAction(Mockito.eq(tenantId), - Mockito.eq(customerId), - Mockito.eq(userId), + Mockito.argThat(matcherCustomerId), + Mockito.argThat(matcherUserId), Mockito.eq(userName), Mockito.argThat(matcherOriginatorId), Mockito.argThat(matcherEntity), @@ -467,8 +505,8 @@ public abstract class AbstractNotifyEntityTest extends AbstractWebTest { case 3: Mockito.verify(auditLogService, times(cntTime)) .logEntityAction(Mockito.eq(tenantId), - Mockito.eq(customerId), - Mockito.eq(userId), + Mockito.argThat(matcherCustomerId), + Mockito.argThat(matcherUserId), Mockito.eq(userName), Mockito.argThat(matcherOriginatorId), Mockito.argThat(matcherEntity), @@ -481,8 +519,8 @@ public abstract class AbstractNotifyEntityTest extends AbstractWebTest { default: Mockito.verify(auditLogService, times(cntTime)) .logEntityAction(Mockito.eq(tenantId), - Mockito.eq(customerId), - Mockito.eq(userId), + Mockito.argThat(matcherCustomerId), + Mockito.argThat(matcherUserId), Mockito.eq(userName), Mockito.argThat(matcherOriginatorId), Mockito.argThat(matcherEntity), diff --git a/application/src/test/java/org/thingsboard/server/controller/BaseDashboardControllerTest.java b/application/src/test/java/org/thingsboard/server/controller/BaseDashboardControllerTest.java index cfb9489f69..66fc1a5178 100644 --- a/application/src/test/java/org/thingsboard/server/controller/BaseDashboardControllerTest.java +++ b/application/src/test/java/org/thingsboard/server/controller/BaseDashboardControllerTest.java @@ -283,6 +283,7 @@ public abstract class BaseDashboardControllerTest extends AbstractControllerTest doDelete("/api/tenant/" + savedTenant2.getId().getId().toString()) .andExpect(status().isForbidden()) .andExpect(statusReason(containsString(msgErrorPermission))); + testNotifyEntityNever(savedDashboard.getId(), savedDashboard); loginSysAdmin(); diff --git a/application/src/test/java/org/thingsboard/server/controller/BaseTbResourceControllerTest.java b/application/src/test/java/org/thingsboard/server/controller/BaseTbResourceControllerTest.java index 4088e78563..36d8d56fbc 100644 --- a/application/src/test/java/org/thingsboard/server/controller/BaseTbResourceControllerTest.java +++ b/application/src/test/java/org/thingsboard/server/controller/BaseTbResourceControllerTest.java @@ -21,14 +21,17 @@ 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.ResourceType; import org.thingsboard.server.common.data.TbResource; import org.thingsboard.server.common.data.TbResourceInfo; 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.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; @@ -75,6 +78,9 @@ public abstract class BaseTbResourceControllerTest extends AbstractControllerTes @Test public void testSaveTbResource() throws Exception { + + Mockito.reset(tbClusterService, auditLogService); + TbResource resource = new TbResource(); resource.setResourceType(ResourceType.JKS); resource.setTitle("My first resource"); @@ -83,6 +89,10 @@ public abstract class BaseTbResourceControllerTest extends AbstractControllerTes TbResource savedResource = save(resource); + testNotifyEntityOneTimeMsgToEdgeServiceNever(savedResource, savedResource.getId(), savedResource.getId(), + savedTenant.getId(), tenantAdmin.getCustomerId(), tenantAdmin.getId(), tenantAdmin.getEmail(), + ActionType.ADDED); + Assert.assertNotNull(savedResource); Assert.assertNotNull(savedResource.getId()); Assert.assertTrue(savedResource.getCreatedTime() > 0); @@ -98,6 +108,10 @@ public abstract class BaseTbResourceControllerTest extends AbstractControllerTes TbResource foundResource = doGet("/api/resource/" + savedResource.getId().getId().toString(), TbResource.class); Assert.assertEquals(foundResource.getTitle(), savedResource.getTitle()); + + testNotifyEntityOneTimeMsgToEdgeServiceNever(foundResource, foundResource.getId(), foundResource.getId(), + savedTenant.getId(), tenantAdmin.getCustomerId(), tenantAdmin.getId(), tenantAdmin.getEmail(), + ActionType.UPDATED); } @Test @@ -107,7 +121,16 @@ public abstract class BaseTbResourceControllerTest extends AbstractControllerTes resource.setTitle(RandomStringUtils.randomAlphabetic(300)); resource.setFileName(DEFAULT_FILE_NAME); resource.setData("Test Data"); - doPost("/api/resource", resource).andExpect(statusReason(containsString("length of title must be equal or less than 255"))); + + Mockito.reset(tbClusterService, auditLogService); + + String msgError = msgErrorFieldLength("title"); + doPost("/api/resource", resource) + .andExpect(status().isBadRequest()) + .andExpect(statusReason(containsString(msgError))); + + testNotifyEntityEqualsOneTimeServiceNeverError(resource, savedTenant.getId(), + tenantAdmin.getId(), tenantAdmin.getEmail(), ActionType.ADDED, new DataValidationException(msgError)); } @Test @@ -118,10 +141,24 @@ public abstract class BaseTbResourceControllerTest extends AbstractControllerTes resource.setFileName(DEFAULT_FILE_NAME); resource.setData("Test Data"); - TbResource savedResource = save(resource); + TbResource savedResource = save(resource); loginDifferentTenant(); - doPostWithTypedResponse("/api/resource", savedResource, new TypeReference<>(){}, status().isForbidden()); + + Mockito.reset(tbClusterService, auditLogService); + + doPost("/api/resource", savedResource) + .andExpect(status().isForbidden()) + .andExpect(statusReason(containsString(msgErrorPermission))); + + testNotifyEntityNever(savedResource.getId(), savedResource); + + doDelete("/api/resource/" + savedResource.getId().getId().toString()) + .andExpect(status().isForbidden()) + .andExpect(statusReason(containsString(msgErrorPermission))); + + testNotifyEntityNever(savedResource.getId(), savedResource); + deleteDifferentTenant(); } @@ -150,17 +187,27 @@ public abstract class BaseTbResourceControllerTest extends AbstractControllerTes TbResource savedResource = save(resource); + Mockito.reset(tbClusterService, auditLogService); + doDelete("/api/resource/" + savedResource.getId().getId().toString()) .andExpect(status().isOk()); + testNotifyEntityOneTimeMsgToEdgeServiceNever(savedResource, savedResource.getId(), savedResource.getId(), + savedTenant.getId(), tenantAdmin.getCustomerId(), tenantAdmin.getId(), tenantAdmin.getEmail(), + ActionType.DELETED, savedResource.getId().getId().toString()); + doGet("/api/resource/" + savedResource.getId().getId().toString()) .andExpect(status().isNotFound()); } @Test public void testFindTenantTbResources() throws Exception { + + Mockito.reset(tbClusterService, auditLogService); + List resources = new ArrayList<>(); - for (int i = 0; i < 173; i++) { + int cntEntity = 173; + for (int i = 0; i < cntEntity; i++) { TbResource resource = new TbResource(); resource.setTitle("Resource" + i); resource.setResourceType(ResourceType.JKS); @@ -173,7 +220,7 @@ public abstract class BaseTbResourceControllerTest extends AbstractControllerTes PageData pageData; do { pageData = doGetTypedWithPageLink("/api/resource?", - new TypeReference>() { + new TypeReference<>() { }, pageLink); loadedResources.addAll(pageData.getData()); if (pageData.hasNext()) { @@ -181,6 +228,10 @@ public abstract class BaseTbResourceControllerTest extends AbstractControllerTes } } while (pageData.hasNext()); + testNotifyManyEntityManyTimeMsgToEdgeServiceNever(new TbResource(), new TbResource(), + savedTenant.getId(), tenantAdmin.getCustomerId(), tenantAdmin.getId(), tenantAdmin.getEmail(), + ActionType.ADDED, cntEntity); + Collections.sort(resources, idComparator); Collections.sort(loadedResources, idComparator); @@ -205,7 +256,7 @@ public abstract class BaseTbResourceControllerTest extends AbstractControllerTes PageData pageData; do { pageData = doGetTypedWithPageLink("/api/resource?", - new TypeReference>() { + new TypeReference<>() { }, pageLink); loadedResources.addAll(pageData.getData()); if (pageData.hasNext()) { @@ -218,16 +269,23 @@ public abstract class BaseTbResourceControllerTest extends AbstractControllerTes Assert.assertEquals(resources, loadedResources); + Mockito.reset(tbClusterService, auditLogService); + + int cntEntity = resources.size(); for (TbResourceInfo resource : resources) { doDelete("/api/resource/" + resource.getId().getId().toString()) .andExpect(status().isOk()); } + testNotifyManyEntityManyTimeMsgToEdgeServiceNeverAdditionalInfoAny(new TbResource(), new TbResource(), + resources.get(0).getTenantId(), null, null, SYS_ADMIN_EMAIL, + ActionType.DELETED, cntEntity, 1); + pageLink = new PageLink(27); loadedResources.clear(); do { pageData = doGetTypedWithPageLink("/api/resource?", - new TypeReference>() { + new TypeReference<>() { }, pageLink); loadedResources.addAll(pageData.getData()); if (pageData.hasNext()) {