chore: refactor workspace members api (#17891)
This commit is contained in:
parent
f91fe64dd8
commit
3ee6572f77
|
|
@ -4,7 +4,7 @@ import com.appsmith.server.constants.Url;
|
||||||
import com.appsmith.server.domains.Workspace;
|
import com.appsmith.server.domains.Workspace;
|
||||||
import com.appsmith.server.dtos.UpdatePermissionGroupDTO;
|
import com.appsmith.server.dtos.UpdatePermissionGroupDTO;
|
||||||
import com.appsmith.server.dtos.ResponseDTO;
|
import com.appsmith.server.dtos.ResponseDTO;
|
||||||
import com.appsmith.server.dtos.UserAndPermissionGroupDTO;
|
import com.appsmith.server.dtos.WorkspaceMemberInfoDTO;
|
||||||
import com.appsmith.server.dtos.PermissionGroupInfoDTO;
|
import com.appsmith.server.dtos.PermissionGroupInfoDTO;
|
||||||
import com.appsmith.server.services.WorkspaceService;
|
import com.appsmith.server.services.WorkspaceService;
|
||||||
import com.appsmith.server.services.UserWorkspaceService;
|
import com.appsmith.server.services.UserWorkspaceService;
|
||||||
|
|
@ -47,15 +47,15 @@ public class WorkspaceControllerCE extends BaseController<WorkspaceService, Work
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping("/{workspaceId}/members")
|
@GetMapping("/{workspaceId}/members")
|
||||||
public Mono<ResponseDTO<List<UserAndPermissionGroupDTO>>> getUserMembersOfWorkspace(@PathVariable String workspaceId) {
|
public Mono<ResponseDTO<List<WorkspaceMemberInfoDTO>>> getUserMembersOfWorkspace(@PathVariable String workspaceId) {
|
||||||
return userWorkspaceService.getWorkspaceMembers(workspaceId)
|
return userWorkspaceService.getWorkspaceMembers(workspaceId)
|
||||||
.map(users -> new ResponseDTO<>(HttpStatus.OK.value(), users, null));
|
.map(users -> new ResponseDTO<>(HttpStatus.OK.value(), users, null));
|
||||||
}
|
}
|
||||||
|
|
||||||
@PutMapping("/{workspaceId}/permissionGroup")
|
@PutMapping("/{workspaceId}/permissionGroup")
|
||||||
public Mono<ResponseDTO<UserAndPermissionGroupDTO>> updatePermissionGroupForMember(@RequestBody UpdatePermissionGroupDTO updatePermissionGroupDTO,
|
public Mono<ResponseDTO<WorkspaceMemberInfoDTO>> updatePermissionGroupForMember(@RequestBody UpdatePermissionGroupDTO updatePermissionGroupDTO,
|
||||||
@PathVariable String workspaceId,
|
@PathVariable String workspaceId,
|
||||||
@RequestHeader(name = "Origin", required = false) String originHeader) {
|
@RequestHeader(name = "Origin", required = false) String originHeader) {
|
||||||
return userWorkspaceService.updatePermissionGroupForMember(workspaceId, updatePermissionGroupDTO, originHeader)
|
return userWorkspaceService.updatePermissionGroupForMember(workspaceId, updatePermissionGroupDTO, originHeader)
|
||||||
.map(user -> new ResponseDTO<>(HttpStatus.OK.value(), user, null));
|
.map(user -> new ResponseDTO<>(HttpStatus.OK.value(), user, null));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -16,5 +16,5 @@ import java.util.List;
|
||||||
public class WorkspaceApplicationsDTO {
|
public class WorkspaceApplicationsDTO {
|
||||||
Workspace workspace;
|
Workspace workspace;
|
||||||
List<Application> applications;
|
List<Application> applications;
|
||||||
List<UserAndPermissionGroupDTO> users;
|
List<WorkspaceMemberInfoDTO> users;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,16 @@
|
||||||
|
package com.appsmith.server.dtos;
|
||||||
|
|
||||||
|
import com.appsmith.server.dtos.ce.WorkspaceMemberInfoCE_DTO;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.Setter;
|
||||||
|
|
||||||
|
@Setter
|
||||||
|
@Getter
|
||||||
|
public class WorkspaceMemberInfoDTO extends WorkspaceMemberInfoCE_DTO {
|
||||||
|
|
||||||
|
@Builder
|
||||||
|
public WorkspaceMemberInfoDTO(String userId, String username, String name, String permissionGroupName, String permissionGroupId) {
|
||||||
|
super(userId, username, name, permissionGroupName, permissionGroupId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,20 +1,14 @@
|
||||||
package com.appsmith.server.dtos;
|
package com.appsmith.server.dtos.ce;
|
||||||
|
|
||||||
import lombok.Builder;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
@Builder
|
@AllArgsConstructor
|
||||||
public class UserAndPermissionGroupDTO {
|
public class WorkspaceMemberInfoCE_DTO {
|
||||||
|
|
||||||
String userId;
|
String userId;
|
||||||
|
|
||||||
String username;
|
String username;
|
||||||
|
|
||||||
String name;
|
String name;
|
||||||
|
|
||||||
String permissionGroupName;
|
String permissionGroupName;
|
||||||
|
|
||||||
String permissionGroupId;
|
String permissionGroupId;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -2,7 +2,7 @@ package com.appsmith.server.events;
|
||||||
|
|
||||||
import com.appsmith.server.domains.Application;
|
import com.appsmith.server.domains.Application;
|
||||||
import com.appsmith.server.domains.Workspace;
|
import com.appsmith.server.domains.Workspace;
|
||||||
import com.appsmith.server.dtos.UserAndPermissionGroupDTO;
|
import com.appsmith.server.dtos.WorkspaceMemberInfoDTO;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
@ -11,7 +11,7 @@ import java.util.List;
|
||||||
public abstract class AbstractCommentEvent {
|
public abstract class AbstractCommentEvent {
|
||||||
private final String authorUserName;
|
private final String authorUserName;
|
||||||
private final Workspace workspace;
|
private final Workspace workspace;
|
||||||
private final List<UserAndPermissionGroupDTO> workspaceMembers;
|
private final List<WorkspaceMemberInfoDTO> workspaceMembers;
|
||||||
private final Application application;
|
private final Application application;
|
||||||
private final String originHeader;
|
private final String originHeader;
|
||||||
private final String pageName;
|
private final String pageName;
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ package com.appsmith.server.events;
|
||||||
import com.appsmith.server.domains.Application;
|
import com.appsmith.server.domains.Application;
|
||||||
import com.appsmith.server.domains.Comment;
|
import com.appsmith.server.domains.Comment;
|
||||||
import com.appsmith.server.domains.Workspace;
|
import com.appsmith.server.domains.Workspace;
|
||||||
import com.appsmith.server.dtos.UserAndPermissionGroupDTO;
|
import com.appsmith.server.dtos.WorkspaceMemberInfoDTO;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
@ -14,7 +14,7 @@ public class CommentAddedEvent extends AbstractCommentEvent {
|
||||||
private final Comment comment;
|
private final Comment comment;
|
||||||
private final Set<String> subscribers;
|
private final Set<String> subscribers;
|
||||||
|
|
||||||
public CommentAddedEvent(Workspace workspace, List<UserAndPermissionGroupDTO> workspaceMembers, Application application,
|
public CommentAddedEvent(Workspace workspace, List<WorkspaceMemberInfoDTO> workspaceMembers, Application application,
|
||||||
String originHeader, Comment comment, Set<String> subscribers, String pageName) {
|
String originHeader, Comment comment, Set<String> subscribers, String pageName) {
|
||||||
super(comment.getAuthorUsername(), workspace, workspaceMembers, application, originHeader, pageName);
|
super(comment.getAuthorUsername(), workspace, workspaceMembers, application, originHeader, pageName);
|
||||||
this.comment = comment;
|
this.comment = comment;
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ package com.appsmith.server.events;
|
||||||
import com.appsmith.server.domains.Application;
|
import com.appsmith.server.domains.Application;
|
||||||
import com.appsmith.server.domains.CommentThread;
|
import com.appsmith.server.domains.CommentThread;
|
||||||
import com.appsmith.server.domains.Workspace;
|
import com.appsmith.server.domains.Workspace;
|
||||||
import com.appsmith.server.dtos.UserAndPermissionGroupDTO;
|
import com.appsmith.server.dtos.WorkspaceMemberInfoDTO;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
@ -12,7 +12,7 @@ import java.util.List;
|
||||||
public class CommentThreadClosedEvent extends AbstractCommentEvent {
|
public class CommentThreadClosedEvent extends AbstractCommentEvent {
|
||||||
private final CommentThread commentThread;
|
private final CommentThread commentThread;
|
||||||
|
|
||||||
public CommentThreadClosedEvent(String authorUserName, Workspace workspace, List<UserAndPermissionGroupDTO> workspaceMembers,
|
public CommentThreadClosedEvent(String authorUserName, Workspace workspace, List<WorkspaceMemberInfoDTO> workspaceMembers,
|
||||||
Application application, String originHeader, CommentThread commentThread,
|
Application application, String originHeader, CommentThread commentThread,
|
||||||
String pagename) {
|
String pagename) {
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
package com.appsmith.server.services.ce;
|
package com.appsmith.server.services.ce;
|
||||||
|
|
||||||
import com.appsmith.server.dtos.UpdatePermissionGroupDTO;
|
import com.appsmith.server.dtos.UpdatePermissionGroupDTO;
|
||||||
import com.appsmith.server.dtos.UserAndPermissionGroupDTO;
|
import com.appsmith.server.dtos.WorkspaceMemberInfoDTO;
|
||||||
import com.appsmith.server.domains.User;
|
import com.appsmith.server.domains.User;
|
||||||
import reactor.core.publisher.Mono;
|
import reactor.core.publisher.Mono;
|
||||||
|
|
||||||
|
|
@ -13,9 +13,9 @@ public interface UserWorkspaceServiceCE {
|
||||||
|
|
||||||
Mono<User> leaveWorkspace(String workspaceId);
|
Mono<User> leaveWorkspace(String workspaceId);
|
||||||
|
|
||||||
Mono<UserAndPermissionGroupDTO> updatePermissionGroupForMember(String workspaceId, UpdatePermissionGroupDTO changeUserGroupDTO, String originHeader);
|
Mono<WorkspaceMemberInfoDTO> updatePermissionGroupForMember(String workspaceId, UpdatePermissionGroupDTO changeUserGroupDTO, String originHeader);
|
||||||
|
|
||||||
Mono<List<UserAndPermissionGroupDTO>> getWorkspaceMembers(String workspaceId);
|
Mono<List<WorkspaceMemberInfoDTO>> getWorkspaceMembers(String workspaceId);
|
||||||
|
|
||||||
Mono<Map<String, List<UserAndPermissionGroupDTO>>> getWorkspaceMembers(Set<String> workspaceIds);
|
Mono<Map<String, List<WorkspaceMemberInfoDTO>>> getWorkspaceMembers(Set<String> workspaceIds);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@ import com.appsmith.server.domains.PermissionGroup;
|
||||||
import com.appsmith.server.domains.User;
|
import com.appsmith.server.domains.User;
|
||||||
import com.appsmith.server.domains.Workspace;
|
import com.appsmith.server.domains.Workspace;
|
||||||
import com.appsmith.server.dtos.UpdatePermissionGroupDTO;
|
import com.appsmith.server.dtos.UpdatePermissionGroupDTO;
|
||||||
import com.appsmith.server.dtos.UserAndPermissionGroupDTO;
|
import com.appsmith.server.dtos.WorkspaceMemberInfoDTO;
|
||||||
import com.appsmith.server.exceptions.AppsmithError;
|
import com.appsmith.server.exceptions.AppsmithError;
|
||||||
import com.appsmith.server.exceptions.AppsmithException;
|
import com.appsmith.server.exceptions.AppsmithException;
|
||||||
import com.appsmith.server.helpers.PolicyUtils;
|
import com.appsmith.server.helpers.PolicyUtils;
|
||||||
|
|
@ -123,7 +123,7 @@ public class UserWorkspaceServiceCEImpl implements UserWorkspaceServiceCE {
|
||||||
*/
|
*/
|
||||||
@Transactional
|
@Transactional
|
||||||
@Override
|
@Override
|
||||||
public Mono<UserAndPermissionGroupDTO> updatePermissionGroupForMember(String workspaceId, UpdatePermissionGroupDTO changeUserGroupDTO, String originHeader) {
|
public Mono<WorkspaceMemberInfoDTO> updatePermissionGroupForMember(String workspaceId, UpdatePermissionGroupDTO changeUserGroupDTO, String originHeader) {
|
||||||
if (changeUserGroupDTO.getUsername() == null) {
|
if (changeUserGroupDTO.getUsername() == null) {
|
||||||
return Mono.error(new AppsmithException(AppsmithError.INVALID_PARAMETER, FieldName.USERNAME));
|
return Mono.error(new AppsmithException(AppsmithError.INVALID_PARAMETER, FieldName.USERNAME));
|
||||||
}
|
}
|
||||||
|
|
@ -162,7 +162,7 @@ public class UserWorkspaceServiceCEImpl implements UserWorkspaceServiceCE {
|
||||||
// If new permission group id is not present, just unassign old permission group and return PermissionAndGroupDTO
|
// If new permission group id is not present, just unassign old permission group and return PermissionAndGroupDTO
|
||||||
if (!StringUtils.hasText(changeUserGroupDTO.getNewPermissionGroupId())) {
|
if (!StringUtils.hasText(changeUserGroupDTO.getNewPermissionGroupId())) {
|
||||||
return permissionGroupUnassignedMono.then(userMono)
|
return permissionGroupUnassignedMono.then(userMono)
|
||||||
.map(user -> UserAndPermissionGroupDTO.builder().username(user.getUsername()).name(user.getName()).build());
|
.map(user -> WorkspaceMemberInfoDTO.builder().username(user.getUsername()).name(user.getName()).build());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get the new permission group
|
// Get the new permission group
|
||||||
|
|
@ -183,7 +183,7 @@ public class UserWorkspaceServiceCEImpl implements UserWorkspaceServiceCE {
|
||||||
.map(pair -> {
|
.map(pair -> {
|
||||||
User user = pair.getT2();
|
User user = pair.getT2();
|
||||||
PermissionGroup newPermissionGroup = pair.getT1();
|
PermissionGroup newPermissionGroup = pair.getT1();
|
||||||
return UserAndPermissionGroupDTO.builder()
|
return WorkspaceMemberInfoDTO.builder()
|
||||||
.username(user.getUsername())
|
.username(user.getUsername())
|
||||||
.name(user.getName())
|
.name(user.getName())
|
||||||
.permissionGroupName(newPermissionGroup.getName())
|
.permissionGroupName(newPermissionGroup.getName())
|
||||||
|
|
@ -193,18 +193,13 @@ public class UserWorkspaceServiceCEImpl implements UserWorkspaceServiceCE {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Mono<List<UserAndPermissionGroupDTO>> getWorkspaceMembers(String workspaceId) {
|
public Mono<List<WorkspaceMemberInfoDTO>> getWorkspaceMembers(String workspaceId) {
|
||||||
|
|
||||||
// Read the workspace
|
|
||||||
Mono<Workspace> workspaceMono = workspaceRepository.findById(workspaceId, AclPermission.READ_WORKSPACES)
|
|
||||||
.switchIfEmpty(Mono.error(new AppsmithException(AppsmithError.NO_RESOURCE_FOUND, FieldName.WORKSPACE, workspaceId)));
|
|
||||||
|
|
||||||
// Get default permission groups
|
// Get default permission groups
|
||||||
Flux<PermissionGroup> permissionGroupFlux = workspaceMono
|
Flux<PermissionGroup> permissionGroupFlux = this.getPermissionGroupsForWorkspace(workspaceId);
|
||||||
.flatMapMany(workspace -> permissionGroupService.getByDefaultWorkspace(workspace, AclPermission.READ_PERMISSION_GROUP_MEMBERS));
|
|
||||||
|
|
||||||
// Create a list of UserAndGroupDTO
|
// Create a list of UserAndGroupDTO
|
||||||
Mono<List<UserAndPermissionGroupDTO>> userAndPermissionGroupDTOsMono = permissionGroupFlux
|
Mono<List<WorkspaceMemberInfoDTO>> userAndPermissionGroupDTOsMono = permissionGroupFlux
|
||||||
.collectList()
|
.collectList()
|
||||||
.map(this::mapPermissionGroupListToUserAndPermissionGroupDTOList)
|
.map(this::mapPermissionGroupListToUserAndPermissionGroupDTOList)
|
||||||
.cache();
|
.cache();
|
||||||
|
|
@ -212,7 +207,7 @@ public class UserWorkspaceServiceCEImpl implements UserWorkspaceServiceCE {
|
||||||
// Create a map of User.userId to User
|
// Create a map of User.userId to User
|
||||||
Mono<Map<String, User>> userMapMono = userAndPermissionGroupDTOsMono
|
Mono<Map<String, User>> userMapMono = userAndPermissionGroupDTOsMono
|
||||||
.flatMapMany(Flux::fromIterable)
|
.flatMapMany(Flux::fromIterable)
|
||||||
.map(UserAndPermissionGroupDTO::getUserId)
|
.map(WorkspaceMemberInfoDTO::getUserId)
|
||||||
.collect(Collectors.toSet())
|
.collect(Collectors.toSet())
|
||||||
.flatMapMany(userIds -> userRepository.findAllById(userIds))
|
.flatMapMany(userIds -> userRepository.findAllById(userIds))
|
||||||
.collectMap(User::getId)
|
.collectMap(User::getId)
|
||||||
|
|
@ -222,46 +217,21 @@ public class UserWorkspaceServiceCEImpl implements UserWorkspaceServiceCE {
|
||||||
userAndPermissionGroupDTOsMono = userAndPermissionGroupDTOsMono
|
userAndPermissionGroupDTOsMono = userAndPermissionGroupDTOsMono
|
||||||
.zipWith(userMapMono)
|
.zipWith(userMapMono)
|
||||||
.map(tuple -> {
|
.map(tuple -> {
|
||||||
List<UserAndPermissionGroupDTO> userAndPermissionGroupDTOList = tuple.getT1();
|
List<WorkspaceMemberInfoDTO> workspaceMemberInfoDTOList = tuple.getT1();
|
||||||
Map<String, User> userMap = tuple.getT2();
|
Map<String, User> userMap = tuple.getT2();
|
||||||
userAndPermissionGroupDTOList.forEach(userAndPermissionGroupDTO -> {
|
workspaceMemberInfoDTOList.forEach(userAndPermissionGroupDTO -> {
|
||||||
User user = userMap.get(userAndPermissionGroupDTO.getUserId());
|
User user = userMap.get(userAndPermissionGroupDTO.getUserId());
|
||||||
userAndPermissionGroupDTO.setName(Optional.ofNullable(user.getName()).orElse(user.computeFirstName()));
|
userAndPermissionGroupDTO.setName(Optional.ofNullable(user.getName()).orElse(user.computeFirstName()));
|
||||||
userAndPermissionGroupDTO.setUsername(user.getUsername());
|
userAndPermissionGroupDTO.setUsername(user.getUsername());
|
||||||
});
|
});
|
||||||
return userAndPermissionGroupDTOList;
|
return workspaceMemberInfoDTOList;
|
||||||
});
|
});
|
||||||
|
|
||||||
// Sort the members by permission group
|
// Sort the members by permission group
|
||||||
//TODO get users sorted from DB and fill in three buckets - admin, developer and viewer
|
//TODO get users sorted from DB and fill in three buckets - admin, developer and viewer
|
||||||
Mono<List<UserAndPermissionGroupDTO>> sortedListMono = userAndPermissionGroupDTOsMono
|
Mono<List<WorkspaceMemberInfoDTO>> sortedListMono = userAndPermissionGroupDTOsMono
|
||||||
.map(userAndPermissionGroupDTOS -> {
|
.map(userAndPermissionGroupDTOS -> {
|
||||||
Collections.sort(userAndPermissionGroupDTOS, new Comparator<UserAndPermissionGroupDTO>() {
|
Collections.sort(userAndPermissionGroupDTOS, this.getWorkspaceMemberComparator());
|
||||||
@Override
|
|
||||||
public int compare(UserAndPermissionGroupDTO o1, UserAndPermissionGroupDTO o2) {
|
|
||||||
int order1 = getOrder(o1.getPermissionGroupName());
|
|
||||||
int order2 = getOrder(o2.getPermissionGroupName());
|
|
||||||
|
|
||||||
// Administrator > Developer > App viewer
|
|
||||||
int permissionGroupSortOrder = order1 - order2;
|
|
||||||
|
|
||||||
if (permissionGroupSortOrder != 0) {
|
|
||||||
return permissionGroupSortOrder;
|
|
||||||
}
|
|
||||||
|
|
||||||
return o1.getUsername().compareTo(o2.getUsername());
|
|
||||||
}
|
|
||||||
|
|
||||||
private int getOrder(String name) {
|
|
||||||
if (name.startsWith(FieldName.ADMINISTRATOR)) {
|
|
||||||
return 0;
|
|
||||||
} else if (name.startsWith(FieldName.DEVELOPER)) {
|
|
||||||
return 1;
|
|
||||||
} else {
|
|
||||||
return 2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
return userAndPermissionGroupDTOS;
|
return userAndPermissionGroupDTOS;
|
||||||
});
|
});
|
||||||
|
|
@ -270,7 +240,7 @@ public class UserWorkspaceServiceCEImpl implements UserWorkspaceServiceCE {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Mono<Map<String, List<UserAndPermissionGroupDTO>>> getWorkspaceMembers(Set<String> workspaceIds) {
|
public Mono<Map<String, List<WorkspaceMemberInfoDTO>>> getWorkspaceMembers(Set<String> workspaceIds) {
|
||||||
|
|
||||||
// Get default permission groups
|
// Get default permission groups
|
||||||
Flux<PermissionGroup> permissionGroupFlux = permissionGroupService.getByDefaultWorkspaces(workspaceIds, AclPermission.READ_PERMISSION_GROUP_MEMBERS)
|
Flux<PermissionGroup> permissionGroupFlux = permissionGroupService.getByDefaultWorkspaces(workspaceIds, AclPermission.READ_PERMISSION_GROUP_MEMBERS)
|
||||||
|
|
@ -296,7 +266,7 @@ public class UserWorkspaceServiceCEImpl implements UserWorkspaceServiceCE {
|
||||||
Flux<Map<String, Collection<PermissionGroup>>> permissionGroupsByWorkspaceFlux = permissionGroupsByWorkspacesMono
|
Flux<Map<String, Collection<PermissionGroup>>> permissionGroupsByWorkspaceFlux = permissionGroupsByWorkspacesMono
|
||||||
.repeat();
|
.repeat();
|
||||||
|
|
||||||
Mono<Map<String, List<UserAndPermissionGroupDTO>>> workspaceMembersMono = permissionGroupsByWorkspacesMono
|
Mono<Map<String, List<WorkspaceMemberInfoDTO>>> workspaceMembersMono = permissionGroupsByWorkspacesMono
|
||||||
.flatMapMany(permissionGroupsByWorkspaces -> Flux.fromIterable(permissionGroupsByWorkspaces.keySet()))
|
.flatMapMany(permissionGroupsByWorkspaces -> Flux.fromIterable(permissionGroupsByWorkspaces.keySet()))
|
||||||
.zipWith(permissionGroupsByWorkspaceFlux)
|
.zipWith(permissionGroupsByWorkspaceFlux)
|
||||||
.flatMap(tuple -> {
|
.flatMap(tuple -> {
|
||||||
|
|
@ -304,17 +274,17 @@ public class UserWorkspaceServiceCEImpl implements UserWorkspaceServiceCE {
|
||||||
Map<String, Collection<PermissionGroup>> collectionMap = tuple.getT2();
|
Map<String, Collection<PermissionGroup>> collectionMap = tuple.getT2();
|
||||||
List<PermissionGroup> permissionGroups = collectionMap.get(workspaceId).stream().collect(Collectors.toList());
|
List<PermissionGroup> permissionGroups = collectionMap.get(workspaceId).stream().collect(Collectors.toList());
|
||||||
|
|
||||||
Mono<List<UserAndPermissionGroupDTO>> userAndPermissionGroupDTOsMono = Mono.just(mapPermissionGroupListToUserAndPermissionGroupDTOList(permissionGroups))
|
Mono<List<WorkspaceMemberInfoDTO>> userAndPermissionGroupDTOsMono = Mono.just(mapPermissionGroupListToUserAndPermissionGroupDTOList(permissionGroups))
|
||||||
.zipWith(userMapMono)
|
.zipWith(userMapMono)
|
||||||
.map(tuple1 -> {
|
.map(tuple1 -> {
|
||||||
List<UserAndPermissionGroupDTO> userAndPermissionGroupDTOList = tuple1.getT1();
|
List<WorkspaceMemberInfoDTO> workspaceMemberInfoDTOList = tuple1.getT1();
|
||||||
Map<String, User> userMap = tuple1.getT2();
|
Map<String, User> userMap = tuple1.getT2();
|
||||||
userAndPermissionGroupDTOList.forEach(userAndPermissionGroupDTO -> {
|
workspaceMemberInfoDTOList.forEach(userAndPermissionGroupDTO -> {
|
||||||
User user = userMap.get(userAndPermissionGroupDTO.getUserId());
|
User user = userMap.get(userAndPermissionGroupDTO.getUserId());
|
||||||
userAndPermissionGroupDTO.setName(Optional.ofNullable(user.getName()).orElse(user.computeFirstName()));
|
userAndPermissionGroupDTO.setName(Optional.ofNullable(user.getName()).orElse(user.computeFirstName()));
|
||||||
userAndPermissionGroupDTO.setUsername(user.getUsername());
|
userAndPermissionGroupDTO.setUsername(user.getUsername());
|
||||||
});
|
});
|
||||||
return userAndPermissionGroupDTOList;
|
return workspaceMemberInfoDTOList;
|
||||||
});
|
});
|
||||||
|
|
||||||
return Mono.zip(Mono.just(workspaceId), userAndPermissionGroupDTOsMono);
|
return Mono.zip(Mono.just(workspaceId), userAndPermissionGroupDTOsMono);
|
||||||
|
|
@ -324,12 +294,12 @@ public class UserWorkspaceServiceCEImpl implements UserWorkspaceServiceCE {
|
||||||
return workspaceMembersMono;
|
return workspaceMembersMono;
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<UserAndPermissionGroupDTO> mapPermissionGroupListToUserAndPermissionGroupDTOList(List<PermissionGroup> permissionGroupList) {
|
private List<WorkspaceMemberInfoDTO> mapPermissionGroupListToUserAndPermissionGroupDTOList(List<PermissionGroup> permissionGroupList) {
|
||||||
Set<String> userIds = new HashSet<>(); // Set of already collected users
|
Set<String> userIds = new HashSet<>(); // Set of already collected users
|
||||||
List<UserAndPermissionGroupDTO> userAndGroupDTOList = new ArrayList<>();
|
List<WorkspaceMemberInfoDTO> userAndGroupDTOList = new ArrayList<>();
|
||||||
permissionGroupList.forEach(permissionGroup -> {
|
permissionGroupList.forEach(permissionGroup -> {
|
||||||
Stream.ofNullable(permissionGroup.getAssignedToUserIds()).flatMap(Collection::stream).filter(userId -> !userIds.contains(userId)).forEach(userId -> {
|
Stream.ofNullable(permissionGroup.getAssignedToUserIds()).flatMap(Collection::stream).filter(userId -> !userIds.contains(userId)).forEach(userId -> {
|
||||||
userAndGroupDTOList.add(UserAndPermissionGroupDTO.builder()
|
userAndGroupDTOList.add(WorkspaceMemberInfoDTO.builder()
|
||||||
.userId(userId)
|
.userId(userId)
|
||||||
.permissionGroupName(permissionGroup.getName())
|
.permissionGroupName(permissionGroup.getName())
|
||||||
.permissionGroupId(permissionGroup.getId())
|
.permissionGroupId(permissionGroup.getId())
|
||||||
|
|
@ -339,4 +309,42 @@ public class UserWorkspaceServiceCEImpl implements UserWorkspaceServiceCE {
|
||||||
});
|
});
|
||||||
return userAndGroupDTOList;
|
return userAndGroupDTOList;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected Flux<PermissionGroup> getPermissionGroupsForWorkspace(String workspaceId) {
|
||||||
|
Mono<Workspace> workspaceMono = workspaceRepository.findById(workspaceId, AclPermission.READ_WORKSPACES)
|
||||||
|
.switchIfEmpty(Mono.error(new AppsmithException(AppsmithError.NO_RESOURCE_FOUND, FieldName.WORKSPACE, workspaceId)));
|
||||||
|
|
||||||
|
// Get default permission groups
|
||||||
|
return workspaceMono
|
||||||
|
.flatMapMany(workspace -> permissionGroupService.getByDefaultWorkspace(workspace, AclPermission.READ_PERMISSION_GROUP_MEMBERS));
|
||||||
|
}
|
||||||
|
|
||||||
|
private Comparator<WorkspaceMemberInfoDTO> getWorkspaceMemberComparator() {
|
||||||
|
return new Comparator<>() {
|
||||||
|
@Override
|
||||||
|
public int compare(WorkspaceMemberInfoDTO o1, WorkspaceMemberInfoDTO o2) {
|
||||||
|
int order1 = getOrder(o1.getPermissionGroupName());
|
||||||
|
int order2 = getOrder(o2.getPermissionGroupName());
|
||||||
|
|
||||||
|
// Administrator > Developer > App viewer
|
||||||
|
int permissionGroupSortOrder = order1 - order2;
|
||||||
|
|
||||||
|
if (permissionGroupSortOrder != 0) {
|
||||||
|
return permissionGroupSortOrder;
|
||||||
|
}
|
||||||
|
|
||||||
|
return o1.getUsername().compareTo(o2.getUsername());
|
||||||
|
}
|
||||||
|
|
||||||
|
private int getOrder(String name) {
|
||||||
|
if (name.startsWith(FieldName.ADMINISTRATOR)) {
|
||||||
|
return 0;
|
||||||
|
} else if (name.startsWith(FieldName.DEVELOPER)) {
|
||||||
|
return 1;
|
||||||
|
} else {
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@ import com.appsmith.server.domains.UserData;
|
||||||
import com.appsmith.server.domains.Workspace;
|
import com.appsmith.server.domains.Workspace;
|
||||||
import com.appsmith.server.dtos.PageDTO;
|
import com.appsmith.server.dtos.PageDTO;
|
||||||
import com.appsmith.server.dtos.ReleaseNode;
|
import com.appsmith.server.dtos.ReleaseNode;
|
||||||
import com.appsmith.server.dtos.UserAndPermissionGroupDTO;
|
import com.appsmith.server.dtos.WorkspaceMemberInfoDTO;
|
||||||
import com.appsmith.server.dtos.UserHomepageDTO;
|
import com.appsmith.server.dtos.UserHomepageDTO;
|
||||||
import com.appsmith.server.dtos.WorkspaceApplicationsDTO;
|
import com.appsmith.server.dtos.WorkspaceApplicationsDTO;
|
||||||
import com.appsmith.server.exceptions.AppsmithError;
|
import com.appsmith.server.exceptions.AppsmithError;
|
||||||
|
|
@ -144,7 +144,7 @@ public class ApplicationFetcherCEImpl implements ApplicationFetcherCE {
|
||||||
.collectList()
|
.collectList()
|
||||||
.cache();
|
.cache();
|
||||||
|
|
||||||
Mono<Map<String, List<UserAndPermissionGroupDTO>>> userAndPermissionGroupMapDTO = workspacesFromRepoFlux
|
Mono<Map<String, List<WorkspaceMemberInfoDTO>>> userAndPermissionGroupMapDTO = workspacesFromRepoFlux
|
||||||
.map(Workspace::getId)
|
.map(Workspace::getId)
|
||||||
.collect(Collectors.toSet())
|
.collect(Collectors.toSet())
|
||||||
.flatMap(workspaceIds -> userWorkspaceService.getWorkspaceMembers(workspaceIds));
|
.flatMap(workspaceIds -> userWorkspaceService.getWorkspaceMembers(workspaceIds));
|
||||||
|
|
@ -155,7 +155,7 @@ public class ApplicationFetcherCEImpl implements ApplicationFetcherCE {
|
||||||
|
|
||||||
Map<String, Collection<Application>> applicationsCollectionByWorkspaceId = tuple.getT2();
|
Map<String, Collection<Application>> applicationsCollectionByWorkspaceId = tuple.getT2();
|
||||||
|
|
||||||
Map<String, List<UserAndPermissionGroupDTO>> userAndPermissionGroupMapDTOByWorkspaceId = tuple.getT3();
|
Map<String, List<WorkspaceMemberInfoDTO>> userAndPermissionGroupMapDTOByWorkspaceId = tuple.getT3();
|
||||||
|
|
||||||
List<WorkspaceApplicationsDTO> workspaceApplicationsDTOS = new ArrayList<>();
|
List<WorkspaceApplicationsDTO> workspaceApplicationsDTOS = new ArrayList<>();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@ import com.appsmith.server.domains.CommentThread;
|
||||||
import com.appsmith.server.domains.GitApplicationMetadata;
|
import com.appsmith.server.domains.GitApplicationMetadata;
|
||||||
import com.appsmith.server.domains.UserRole;
|
import com.appsmith.server.domains.UserRole;
|
||||||
import com.appsmith.server.domains.Workspace;
|
import com.appsmith.server.domains.Workspace;
|
||||||
import com.appsmith.server.dtos.UserAndPermissionGroupDTO;
|
import com.appsmith.server.dtos.WorkspaceMemberInfoDTO;
|
||||||
import com.appsmith.server.events.CommentAddedEvent;
|
import com.appsmith.server.events.CommentAddedEvent;
|
||||||
import com.appsmith.server.events.CommentThreadClosedEvent;
|
import com.appsmith.server.events.CommentThreadClosedEvent;
|
||||||
import com.appsmith.server.helpers.CommentUtils;
|
import com.appsmith.server.helpers.CommentUtils;
|
||||||
|
|
@ -70,7 +70,7 @@ public class EmailEventHandlerCEImpl implements EmailEventHandlerCE {
|
||||||
.zipWith(userWorkspaceService.getWorkspaceMembers(objects.getT1().getWorkspaceId()))
|
.zipWith(userWorkspaceService.getWorkspaceMembers(objects.getT1().getWorkspaceId()))
|
||||||
.map(tuple -> {
|
.map(tuple -> {
|
||||||
Workspace workspace = tuple.getT1();
|
Workspace workspace = tuple.getT1();
|
||||||
List<UserAndPermissionGroupDTO> workspaceMembers = tuple.getT2();
|
List<WorkspaceMemberInfoDTO> workspaceMembers = tuple.getT2();
|
||||||
String pagename = objects.getT2();
|
String pagename = objects.getT2();
|
||||||
applicationEventPublisher.publishEvent(
|
applicationEventPublisher.publishEvent(
|
||||||
new CommentAddedEvent(
|
new CommentAddedEvent(
|
||||||
|
|
@ -197,7 +197,7 @@ public class EmailEventHandlerCEImpl implements EmailEventHandlerCE {
|
||||||
return emailSender.sendMail(receiverEmail, emailSubject, COMMENT_ADDED_EMAIL_TEMPLATE, templateParams);
|
return emailSender.sendMail(receiverEmail, emailSubject, COMMENT_ADDED_EMAIL_TEMPLATE, templateParams);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Mono<Boolean> getAddCommentEmailSenderMono(UserAndPermissionGroupDTO userAndGroupDTO, Comment comment, String originHeader,
|
private Mono<Boolean> getAddCommentEmailSenderMono(WorkspaceMemberInfoDTO userAndGroupDTO, Comment comment, String originHeader,
|
||||||
Application application, String pagename) {
|
Application application, String pagename) {
|
||||||
String receiverName = StringUtils.isEmpty(userAndGroupDTO.getName()) ? "User" : userAndGroupDTO.getName();
|
String receiverName = StringUtils.isEmpty(userAndGroupDTO.getName()) ? "User" : userAndGroupDTO.getName();
|
||||||
String receiverEmail = userAndGroupDTO.getUsername();
|
String receiverEmail = userAndGroupDTO.getUsername();
|
||||||
|
|
@ -261,12 +261,12 @@ public class EmailEventHandlerCEImpl implements EmailEventHandlerCE {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Mono<Boolean> sendEmailForCommentAdded(Workspace workspace, List<UserAndPermissionGroupDTO> workspaceMembers,
|
private Mono<Boolean> sendEmailForCommentAdded(Workspace workspace, List<WorkspaceMemberInfoDTO> workspaceMembers,
|
||||||
Application application, Comment comment, String originHeader,
|
Application application, Comment comment, String originHeader,
|
||||||
Set<String> subscribers, String pagename) {
|
Set<String> subscribers, String pagename) {
|
||||||
|
|
||||||
List<Mono<Boolean>> emailMonos = new ArrayList<>();
|
List<Mono<Boolean>> emailMonos = new ArrayList<>();
|
||||||
for (UserAndPermissionGroupDTO user : workspaceMembers) {
|
for (WorkspaceMemberInfoDTO user : workspaceMembers) {
|
||||||
if(!comment.getAuthorUsername().equals(user.getUsername()) && subscribers.contains(user.getUsername())) {
|
if(!comment.getAuthorUsername().equals(user.getUsername()) && subscribers.contains(user.getUsername())) {
|
||||||
emailMonos.add(getAddCommentEmailSenderMono(user, comment, originHeader, application, pagename));
|
emailMonos.add(getAddCommentEmailSenderMono(user, comment, originHeader, application, pagename));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@ import com.appsmith.server.domains.User;
|
||||||
import com.appsmith.server.domains.UserRole;
|
import com.appsmith.server.domains.UserRole;
|
||||||
import com.appsmith.server.domains.Workspace;
|
import com.appsmith.server.domains.Workspace;
|
||||||
import com.appsmith.server.dtos.UpdatePermissionGroupDTO;
|
import com.appsmith.server.dtos.UpdatePermissionGroupDTO;
|
||||||
import com.appsmith.server.dtos.UserAndPermissionGroupDTO;
|
import com.appsmith.server.dtos.WorkspaceMemberInfoDTO;
|
||||||
import com.appsmith.server.exceptions.AppsmithError;
|
import com.appsmith.server.exceptions.AppsmithError;
|
||||||
import com.appsmith.server.helpers.PolicyUtils;
|
import com.appsmith.server.helpers.PolicyUtils;
|
||||||
import com.appsmith.server.repositories.ApplicationRepository;
|
import com.appsmith.server.repositories.ApplicationRepository;
|
||||||
|
|
@ -162,7 +162,7 @@ public class UserWorkspaceServiceTest {
|
||||||
|
|
||||||
Set<String> uniqueUsersInWorkspaceBefore = userWorkspaceService.getWorkspaceMembers(workspace.getId())
|
Set<String> uniqueUsersInWorkspaceBefore = userWorkspaceService.getWorkspaceMembers(workspace.getId())
|
||||||
.flatMapMany(workspaceMembers -> Flux.fromIterable(workspaceMembers))
|
.flatMapMany(workspaceMembers -> Flux.fromIterable(workspaceMembers))
|
||||||
.map(UserAndPermissionGroupDTO::getUserId)
|
.map(WorkspaceMemberInfoDTO::getUserId)
|
||||||
.collect(Collectors.toSet())
|
.collect(Collectors.toSet())
|
||||||
.block();
|
.block();
|
||||||
|
|
||||||
|
|
@ -245,7 +245,7 @@ public class UserWorkspaceServiceTest {
|
||||||
updatePermissionGroupDTO.setNewPermissionGroupId(developerPermissionGroup.getId());
|
updatePermissionGroupDTO.setNewPermissionGroupId(developerPermissionGroup.getId());
|
||||||
String origin = "http://random-origin.test";
|
String origin = "http://random-origin.test";
|
||||||
|
|
||||||
Mono<UserAndPermissionGroupDTO> updateUserRoleMono = userWorkspaceService.updatePermissionGroupForMember(workspace.getId(), updatePermissionGroupDTO, origin);
|
Mono<WorkspaceMemberInfoDTO> updateUserRoleMono = userWorkspaceService.updatePermissionGroupForMember(workspace.getId(), updatePermissionGroupDTO, origin);
|
||||||
|
|
||||||
StepVerifier.create(updateUserRoleMono).expectErrorMessage(
|
StepVerifier.create(updateUserRoleMono).expectErrorMessage(
|
||||||
AppsmithError.REMOVE_LAST_WORKSPACE_ADMIN_ERROR.getMessage()
|
AppsmithError.REMOVE_LAST_WORKSPACE_ADMIN_ERROR.getMessage()
|
||||||
|
|
@ -285,7 +285,7 @@ public class UserWorkspaceServiceTest {
|
||||||
updatePermissionGroupDTO.setNewPermissionGroupId(developerPermissionGroup.getId());
|
updatePermissionGroupDTO.setNewPermissionGroupId(developerPermissionGroup.getId());
|
||||||
String origin = "http://random-origin.test";
|
String origin = "http://random-origin.test";
|
||||||
|
|
||||||
Mono<UserAndPermissionGroupDTO> updateUserRoleMono = userWorkspaceService.updatePermissionGroupForMember(workspace.getId(), updatePermissionGroupDTO, origin);
|
Mono<WorkspaceMemberInfoDTO> updateUserRoleMono = userWorkspaceService.updatePermissionGroupForMember(workspace.getId(), updatePermissionGroupDTO, origin);
|
||||||
|
|
||||||
StepVerifier.create(updateUserRoleMono)
|
StepVerifier.create(updateUserRoleMono)
|
||||||
.assertNext(userRole1 -> {
|
.assertNext(userRole1 -> {
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@ import com.appsmith.server.constants.FieldName;
|
||||||
import com.appsmith.server.domains.PermissionGroup;
|
import com.appsmith.server.domains.PermissionGroup;
|
||||||
import com.appsmith.server.domains.Workspace;
|
import com.appsmith.server.domains.Workspace;
|
||||||
import com.appsmith.server.dtos.PermissionGroupInfoDTO;
|
import com.appsmith.server.dtos.PermissionGroupInfoDTO;
|
||||||
import com.appsmith.server.dtos.UserAndPermissionGroupDTO;
|
import com.appsmith.server.dtos.WorkspaceMemberInfoDTO;
|
||||||
import com.appsmith.server.exceptions.AppsmithError;
|
import com.appsmith.server.exceptions.AppsmithError;
|
||||||
import com.appsmith.server.helpers.PolicyUtils;
|
import com.appsmith.server.helpers.PolicyUtils;
|
||||||
import com.appsmith.server.notifications.EmailSender;
|
import com.appsmith.server.notifications.EmailSender;
|
||||||
|
|
@ -127,7 +127,7 @@ public class UserWorkspaceServiceUnitTest {
|
||||||
Mockito.when(userRepository.findAllById(ArgumentMatchers.<Iterable<String>>any()))
|
Mockito.when(userRepository.findAllById(ArgumentMatchers.<Iterable<String>>any()))
|
||||||
.thenReturn(Flux.empty());
|
.thenReturn(Flux.empty());
|
||||||
|
|
||||||
Mono<List<UserAndPermissionGroupDTO>> workspaceMembers = userWorkspaceService.getWorkspaceMembers(testWorkspace.getId());
|
Mono<List<WorkspaceMemberInfoDTO>> workspaceMembers = userWorkspaceService.getWorkspaceMembers(testWorkspace.getId());
|
||||||
StepVerifier
|
StepVerifier
|
||||||
.create(workspaceMembers)
|
.create(workspaceMembers)
|
||||||
.assertNext(userAndGroupDTOs -> {
|
.assertNext(userAndGroupDTOs -> {
|
||||||
|
|
@ -147,7 +147,7 @@ public class UserWorkspaceServiceUnitTest {
|
||||||
Mockito.when(userRepository.findAllById(ArgumentMatchers.<Iterable<String>>any()))
|
Mockito.when(userRepository.findAllById(ArgumentMatchers.<Iterable<String>>any()))
|
||||||
.thenReturn(Flux.empty());
|
.thenReturn(Flux.empty());
|
||||||
|
|
||||||
Mono<List<UserAndPermissionGroupDTO>> workspaceMembers = userWorkspaceService.getWorkspaceMembers(sampleWorkspaceId);
|
Mono<List<WorkspaceMemberInfoDTO>> workspaceMembers = userWorkspaceService.getWorkspaceMembers(sampleWorkspaceId);
|
||||||
StepVerifier
|
StepVerifier
|
||||||
.create(workspaceMembers)
|
.create(workspaceMembers)
|
||||||
.expectErrorMessage(AppsmithError.NO_RESOURCE_FOUND.getMessage(FieldName.WORKSPACE, sampleWorkspaceId))
|
.expectErrorMessage(AppsmithError.NO_RESOURCE_FOUND.getMessage(FieldName.WORKSPACE, sampleWorkspaceId))
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,7 @@ import com.appsmith.server.domains.User;
|
||||||
import com.appsmith.server.domains.Workspace;
|
import com.appsmith.server.domains.Workspace;
|
||||||
import com.appsmith.server.dtos.InviteUsersDTO;
|
import com.appsmith.server.dtos.InviteUsersDTO;
|
||||||
import com.appsmith.server.dtos.PermissionGroupInfoDTO;
|
import com.appsmith.server.dtos.PermissionGroupInfoDTO;
|
||||||
import com.appsmith.server.dtos.UserAndPermissionGroupDTO;
|
import com.appsmith.server.dtos.WorkspaceMemberInfoDTO;
|
||||||
import com.appsmith.server.exceptions.AppsmithError;
|
import com.appsmith.server.exceptions.AppsmithError;
|
||||||
import com.appsmith.server.exceptions.AppsmithException;
|
import com.appsmith.server.exceptions.AppsmithException;
|
||||||
import com.appsmith.server.helpers.TextUtils;
|
import com.appsmith.server.helpers.TextUtils;
|
||||||
|
|
@ -751,7 +751,7 @@ public class WorkspaceServiceTest {
|
||||||
inviteUsersDTO.setPermissionGroupId(viewerPermissionGroupId);
|
inviteUsersDTO.setPermissionGroupId(viewerPermissionGroupId);
|
||||||
userAndAccessManagementService.inviteUsers(inviteUsersDTO, origin).block();
|
userAndAccessManagementService.inviteUsers(inviteUsersDTO, origin).block();
|
||||||
|
|
||||||
Mono<List<UserAndPermissionGroupDTO>> usersMono = userWorkspaceService.getWorkspaceMembers(createdWorkspace.getId());
|
Mono<List<WorkspaceMemberInfoDTO>> usersMono = userWorkspaceService.getWorkspaceMembers(createdWorkspace.getId());
|
||||||
|
|
||||||
StepVerifier
|
StepVerifier
|
||||||
.create(usersMono)
|
.create(usersMono)
|
||||||
|
|
@ -759,7 +759,7 @@ public class WorkspaceServiceTest {
|
||||||
assertThat(users).isNotNull();
|
assertThat(users).isNotNull();
|
||||||
assertThat(users.size()).isEqualTo(6);
|
assertThat(users.size()).isEqualTo(6);
|
||||||
// Assert that the members are sorted by the permission group and then email
|
// Assert that the members are sorted by the permission group and then email
|
||||||
UserAndPermissionGroupDTO userAndGroupDTO = users.get(0);
|
WorkspaceMemberInfoDTO userAndGroupDTO = users.get(0);
|
||||||
assertThat(userAndGroupDTO.getUsername()).isEqualTo("api_user");
|
assertThat(userAndGroupDTO.getUsername()).isEqualTo("api_user");
|
||||||
assertThat(userAndGroupDTO.getPermissionGroupName()).startsWith(ADMINISTRATOR);
|
assertThat(userAndGroupDTO.getPermissionGroupName()).startsWith(ADMINISTRATOR);
|
||||||
userAndGroupDTO = users.get(1);
|
userAndGroupDTO = users.get(1);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user