Refactoring, added tests
This commit is contained in:
parent
1283217b4b
commit
01996334e2
@ -448,7 +448,7 @@ public class UserController extends BaseController {
|
||||
@RequestMapping(value = "/users/assign/{alarmId}", params = {"pageSize", "page"}, method = RequestMethod.GET)
|
||||
@ResponseBody
|
||||
public PageData<UserEmailInfo> getUsersForAssign(
|
||||
@ApiParam(value = ALARM_ID_PARAM_DESCRIPTION)
|
||||
@ApiParam(value = ALARM_ID_PARAM_DESCRIPTION, required = true)
|
||||
@PathVariable("alarmId") String strAlarmId,
|
||||
@ApiParam(value = PAGE_SIZE_DESCRIPTION, required = true)
|
||||
@RequestParam int pageSize,
|
||||
@ -469,7 +469,11 @@ public class UserController extends BaseController {
|
||||
PageLink pageLink = createPageLink(pageSize, page, textSearch, sortProperty, sortOrder);
|
||||
PageData<User> pageData;
|
||||
if (Authority.TENANT_ADMIN.equals(currentUser.getAuthority())) {
|
||||
pageData = userService.findUsersForAssignForTenant(tenantId, alarm.getCustomerId(), pageLink);
|
||||
if (alarm.getCustomerId() == null) {
|
||||
pageData = userService.findTenantAdmins(tenantId, pageLink);
|
||||
} else {
|
||||
pageData = userService.findTenantAndCustomerUsers(tenantId, alarm.getCustomerId(), pageLink);
|
||||
}
|
||||
} else {
|
||||
pageData = userService.findCustomerUsers(tenantId, alarm.getCustomerId(), pageLink);
|
||||
}
|
||||
|
||||
@ -798,6 +798,15 @@ public abstract class AbstractWebTest extends AbstractInMemoryStorageTest {
|
||||
|
||||
}
|
||||
|
||||
public class EntityIdComparator<D extends EntityId> implements Comparator<D> {
|
||||
|
||||
@Override
|
||||
public int compare(D o1, D o2) {
|
||||
return o1.getId().compareTo(o2.getId());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
protected static <T> ResultMatcher statusReason(Matcher<T> matcher) {
|
||||
return jsonPath("$.message", matcher);
|
||||
}
|
||||
|
||||
@ -31,10 +31,13 @@ import org.springframework.http.HttpHeaders;
|
||||
import org.springframework.test.context.ContextConfiguration;
|
||||
import org.springframework.test.web.servlet.ResultActions;
|
||||
import org.thingsboard.server.common.data.Customer;
|
||||
import org.thingsboard.server.common.data.Device;
|
||||
import org.thingsboard.server.common.data.StringUtils;
|
||||
import org.thingsboard.server.common.data.Tenant;
|
||||
import org.thingsboard.server.common.data.User;
|
||||
import org.thingsboard.server.common.data.UserEmailInfo;
|
||||
import org.thingsboard.server.common.data.alarm.Alarm;
|
||||
import org.thingsboard.server.common.data.alarm.AlarmSeverity;
|
||||
import org.thingsboard.server.common.data.audit.ActionType;
|
||||
import org.thingsboard.server.common.data.id.CustomerId;
|
||||
import org.thingsboard.server.common.data.id.TenantId;
|
||||
@ -53,7 +56,6 @@ import java.util.stream.Collectors;
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.hamcrest.Matchers.containsString;
|
||||
import static org.hamcrest.Matchers.is;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.anyString;
|
||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.header;
|
||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
|
||||
@ -66,6 +68,8 @@ public abstract class BaseUserControllerTest extends AbstractControllerTest {
|
||||
private IdComparator<User> idComparator = new IdComparator<>();
|
||||
private IdComparator<UserEmailInfo> userDataIdComparator = new IdComparator<>();
|
||||
|
||||
private EntityIdComparator<UserId> userIdComparator = new EntityIdComparator<>();
|
||||
|
||||
private CustomerId customerNUULId = (CustomerId) createEntityId_NULL_UUID(new Customer());
|
||||
|
||||
@Autowired
|
||||
@ -647,6 +651,89 @@ public abstract class BaseUserControllerTest extends AbstractControllerTest {
|
||||
.andExpect(status().isOk());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetUsersForAssign() throws Exception {
|
||||
loginTenantAdmin();
|
||||
|
||||
String email = "testEmail1";
|
||||
List<UserId> expectedCustomerUserIds = new ArrayList<>();
|
||||
expectedCustomerUserIds.add(customerUserId);
|
||||
for (int i = 0; i < 45; i++) {
|
||||
User customerUser = createCustomerUser( customerId);
|
||||
customerUser.setEmail(email + StringUtils.randomAlphanumeric((int) (5 + Math.random() * 10)) + "@thingsboard.org");
|
||||
User user = doPost("/api/user", customerUser, User.class);
|
||||
expectedCustomerUserIds.add(user.getId());
|
||||
}
|
||||
List<UserId> expectedTenantUserIds = new ArrayList<>(List.copyOf(expectedCustomerUserIds));
|
||||
expectedTenantUserIds.add(tenantAdminUserId);
|
||||
|
||||
Device device = new Device();
|
||||
device.setName("testDevice");
|
||||
Device savedDevice = doPost("/api/device", device, Device.class);
|
||||
|
||||
Alarm alarm = createTestAlarm(savedDevice);
|
||||
|
||||
List<UserId> loadedTenantUserIds = new ArrayList<>();
|
||||
PageLink pageLink = new PageLink(33, 0);
|
||||
PageData<UserEmailInfo> pageData;
|
||||
do {
|
||||
pageData = doGetTypedWithPageLink("/api/users/assign/" + alarm.getId().getId().toString() + "?",
|
||||
new TypeReference<>() {}, pageLink);
|
||||
loadedTenantUserIds.addAll(pageData.getData().stream().map(UserEmailInfo::getId)
|
||||
.collect(Collectors.toList()));
|
||||
if (pageData.hasNext()) {
|
||||
pageLink = pageLink.nextPageLink();
|
||||
}
|
||||
} while (pageData.hasNext());
|
||||
|
||||
Assert.assertEquals(1, loadedTenantUserIds.size());
|
||||
Assert.assertEquals(tenantAdminUserId, loadedTenantUserIds.get(0));
|
||||
|
||||
doDelete("/api/alarm/" + alarm.getId().getId().toString());
|
||||
|
||||
savedDevice.setCustomerId(customerId);
|
||||
savedDevice = doPost("/api/customer/" + customerId.getId()
|
||||
+ "/device/" + savedDevice.getId().getId(), Device.class);
|
||||
|
||||
alarm = createTestAlarm(savedDevice);
|
||||
|
||||
List<UserId> loadedUserIds = new ArrayList<>();
|
||||
pageLink = new PageLink(16, 0);
|
||||
do {
|
||||
pageData = doGetTypedWithPageLink("/api/users/assign/" + alarm.getId().getId().toString() + "?",
|
||||
new TypeReference<>() {}, pageLink);
|
||||
loadedUserIds.addAll(pageData.getData().stream().map(UserEmailInfo::getId)
|
||||
.collect(Collectors.toList()));
|
||||
if (pageData.hasNext()) {
|
||||
pageLink = pageLink.nextPageLink();
|
||||
}
|
||||
} while (pageData.hasNext());
|
||||
|
||||
expectedTenantUserIds.sort(userIdComparator);
|
||||
loadedUserIds.sort(userIdComparator);
|
||||
|
||||
Assert.assertEquals(expectedTenantUserIds, loadedUserIds);
|
||||
|
||||
loginCustomerUser();
|
||||
|
||||
loadedUserIds = new ArrayList<>();
|
||||
pageLink = new PageLink(16, 0);
|
||||
do {
|
||||
pageData = doGetTypedWithPageLink("/api/users/assign/" + alarm.getId().getId().toString() + "?",
|
||||
new TypeReference<>() {}, pageLink);
|
||||
loadedUserIds.addAll(pageData.getData().stream().map(UserEmailInfo::getId)
|
||||
.collect(Collectors.toList()));
|
||||
if (pageData.hasNext()) {
|
||||
pageLink = pageLink.nextPageLink();
|
||||
}
|
||||
} while (pageData.hasNext());
|
||||
|
||||
expectedCustomerUserIds.sort(userIdComparator);
|
||||
loadedUserIds.sort(userIdComparator);
|
||||
|
||||
Assert.assertEquals(expectedCustomerUserIds, loadedUserIds);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDeleteUserWithDeleteRelationsOk() throws Exception {
|
||||
loginSysAdmin();
|
||||
@ -984,4 +1071,14 @@ public abstract class BaseUserControllerTest extends AbstractControllerTest {
|
||||
return loadedCustomerUsers;
|
||||
}
|
||||
|
||||
private Alarm createTestAlarm(Device device) {
|
||||
Alarm alarm = new Alarm();
|
||||
alarm.setOriginator(device.getId());
|
||||
alarm.setCustomerId(device.getCustomerId());
|
||||
alarm.setSeverity(AlarmSeverity.MAJOR);
|
||||
alarm.setType("testAlarm");
|
||||
alarm.setStartTs(System.currentTimeMillis());
|
||||
return doPost("/api/alarm", alarm, Alarm.class);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -77,7 +77,7 @@ public interface UserService extends EntityDaoService {
|
||||
|
||||
PageData<User> findCustomerUsers(TenantId tenantId, CustomerId customerId, PageLink pageLink);
|
||||
|
||||
PageData<User> findUsersForAssignForTenant(TenantId tenantId, CustomerId customerId, PageLink pageLink);
|
||||
PageData<User> findTenantAndCustomerUsers(TenantId tenantId, CustomerId customerId, PageLink pageLink);
|
||||
|
||||
void deleteCustomerUsers(TenantId tenantId, CustomerId customerId);
|
||||
|
||||
|
||||
@ -103,10 +103,10 @@ public class JpaUserDao extends JpaAbstractSearchTextDao<UserEntity, User> imple
|
||||
}
|
||||
|
||||
@Override
|
||||
public PageData<User> findUsersForAssignForTenant(UUID tenantId, UUID customerId, PageLink pageLink) {
|
||||
public PageData<User> findTenantAndCustomerUsers(UUID tenantId, UUID customerId, PageLink pageLink) {
|
||||
return DaoUtil.toPageData(
|
||||
userRepository
|
||||
.findUsersByCustomerIdAndNullCustomerId(
|
||||
.findTenantAndCustomerUsers(
|
||||
tenantId,
|
||||
customerId,
|
||||
Objects.toString(pageLink.getTextSearch(), ""),
|
||||
|
||||
@ -45,9 +45,9 @@ public interface UserRepository extends JpaRepository<UserEntity, UUID> {
|
||||
Pageable pageable);
|
||||
|
||||
@Query("SELECT u FROM UserEntity u WHERE u.tenantId = :tenantId " +
|
||||
"AND u.customerId IN (:customerId, :nullCustomerId) " +
|
||||
"AND (:customerId IS NULL OR u.customerId IN (:customerId, :nullCustomerId)) " +
|
||||
"AND LOWER(u.searchText) LIKE LOWER(CONCAT('%', :searchText, '%'))")
|
||||
Page<UserEntity> findUsersByCustomerIdAndNullCustomerId(@Param("tenantId") UUID tenantId,
|
||||
Page<UserEntity> findTenantAndCustomerUsers(@Param("tenantId") UUID tenantId,
|
||||
@Param("customerId") UUID customerId,
|
||||
@Param("searchText") String searchText,
|
||||
@Param("nullCustomerId") UUID nullCustomerId,
|
||||
|
||||
@ -90,7 +90,7 @@ public interface UserDao extends Dao<User>, TenantEntityDao {
|
||||
* @param pageLink the page link
|
||||
* @return the list of user entities
|
||||
*/
|
||||
PageData<User> findUsersForAssignForTenant(UUID tenantId, UUID customerId, PageLink pageLink);
|
||||
PageData<User> findTenantAndCustomerUsers(UUID tenantId, UUID customerId, PageLink pageLink);
|
||||
|
||||
PageData<User> findAll(PageLink pageLink);
|
||||
|
||||
|
||||
@ -294,12 +294,12 @@ public class UserServiceImpl extends AbstractEntityService implements UserServic
|
||||
}
|
||||
|
||||
@Override
|
||||
public PageData<User> findUsersForAssignForTenant(TenantId tenantId, CustomerId customerId, PageLink pageLink) {
|
||||
log.trace("Executing findUsersForAssignForTenant, tenantId [{}], customerId [{}], pageLink [{}]", tenantId, customerId, pageLink);
|
||||
public PageData<User> findTenantAndCustomerUsers(TenantId tenantId, CustomerId customerId, PageLink pageLink) {
|
||||
log.trace("Executing findTenantAndCustomerUsers, tenantId [{}], customerId [{}], pageLink [{}]", tenantId, customerId, pageLink);
|
||||
validateId(tenantId, INCORRECT_TENANT_ID + tenantId);
|
||||
validateId(customerId, "Incorrect customerId " + customerId);
|
||||
validatePageLink(pageLink);
|
||||
return userDao.findUsersForAssignForTenant(tenantId.getId(), customerId.getId(), pageLink);
|
||||
validateId(customerId, "Incorrect customerId " + customerId);
|
||||
return userDao.findTenantAndCustomerUsers(tenantId.getId(), customerId.getId(), pageLink);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user