fix(系统设置): 创建用户时提示具体的邮箱重复报错信息
--bug=1034909 --user=宋天阳 【系统设置】创建用户-添加多个用户-邮箱已存在提示信息不明确且和字段名称不一致 https://www.tapd.cn/55049933/s/1457326
This commit is contained in:
parent
1b6fb95123
commit
892ddbf940
|
@ -109,7 +109,7 @@ user.email.invite_ms=邀请你加入MeterSphere
|
|||
user.email.invite_click=点击加入
|
||||
user.email.invite_tips=如果按钮无法点击,请直接访问以下链接:
|
||||
user.email.invite_limited_time=此链接自发送之时起24小时后过期
|
||||
user.email.repeat=用户email已存在
|
||||
user.email.repeat=邮箱重复
|
||||
user.reset.password=重置密码
|
||||
user.delete=删除用户
|
||||
user.enable=启用用户
|
||||
|
|
|
@ -109,7 +109,7 @@ user.email.invite_ms=invited you join MeterSphere
|
|||
user.email.invite_click=Join in
|
||||
user.email.invite_tips=If button can not click,please click url:
|
||||
user.email.invite_limited_time=Url expires in 24 hours
|
||||
user.email.repeat=User email already exists
|
||||
user.email.repeat=Email already exists
|
||||
user.reset.password=Reset password
|
||||
user.delete=Delete user
|
||||
user.enable=Enable user
|
||||
|
|
|
@ -110,7 +110,7 @@ user.email.invite_ms=邀请你加入MeterSphere
|
|||
user.email.invite_click=点击加入
|
||||
user.email.invite_tips=如果按钮无法点击,请直接访问以下链接:
|
||||
user.email.invite_limited_time=此链接自发送之时起24小时后过期
|
||||
user.email.repeat=用户email已存在
|
||||
user.email.repeat=邮箱重复
|
||||
user.reset.password=重置密码
|
||||
user.delete=删除用户
|
||||
user.enable=启用用户
|
||||
|
|
|
@ -109,7 +109,7 @@ user.email.invite_ms=邀請你加入MeterSphere
|
|||
user.email.invite_click=點擊加入
|
||||
user.email.invite_tips=如果按鈕無法點擊,請直接訪問以下鏈接:
|
||||
user.email.invite_limited_time=此鏈接自發送之時起24小時後過期
|
||||
user.email.repeat=用戶email已存在
|
||||
user.email.repeat=郵箱重複
|
||||
user.reset.password=重置密碼
|
||||
user.delete=刪除用戶
|
||||
user.enable=啟用用戶
|
||||
|
|
|
@ -7,7 +7,6 @@ import io.metersphere.project.domain.Project;
|
|||
import io.metersphere.sdk.constants.PermissionConstants;
|
||||
import io.metersphere.sdk.constants.UserSource;
|
||||
import io.metersphere.system.domain.Organization;
|
||||
import io.metersphere.system.dto.UserBatchCreateDTO;
|
||||
import io.metersphere.system.dto.request.OrganizationMemberBatchRequest;
|
||||
import io.metersphere.system.dto.request.ProjectAddMemberBatchRequest;
|
||||
import io.metersphere.system.dto.request.UserInviteRequest;
|
||||
|
@ -15,16 +14,14 @@ import io.metersphere.system.dto.request.UserRegisterRequest;
|
|||
import io.metersphere.system.dto.request.user.UserChangeEnableRequest;
|
||||
import io.metersphere.system.dto.request.user.UserEditRequest;
|
||||
import io.metersphere.system.dto.request.user.UserRoleBatchRelationRequest;
|
||||
import io.metersphere.system.dto.response.UserImportResponse;
|
||||
import io.metersphere.system.dto.response.UserInviteResponse;
|
||||
import io.metersphere.system.dto.response.UserSelectOption;
|
||||
import io.metersphere.system.dto.response.UserTableResponse;
|
||||
import io.metersphere.system.dto.sdk.BasePageRequest;
|
||||
import io.metersphere.system.dto.sdk.BaseTreeNode;
|
||||
import io.metersphere.system.dto.sdk.OptionDTO;
|
||||
import io.metersphere.system.dto.table.TableBatchProcessDTO;
|
||||
import io.metersphere.system.dto.table.TableBatchProcessResponse;
|
||||
import io.metersphere.system.dto.user.UserDTO;
|
||||
import io.metersphere.system.dto.user.request.UserBatchCreateRequest;
|
||||
import io.metersphere.system.dto.user.response.*;
|
||||
import io.metersphere.system.log.annotation.Log;
|
||||
import io.metersphere.system.log.constants.OperationLogType;
|
||||
import io.metersphere.system.service.*;
|
||||
|
@ -76,7 +73,7 @@ public class UserController {
|
|||
@PostMapping("/add")
|
||||
@Operation(summary = "系统设置-系统-用户-添加用户")
|
||||
@RequiresPermissions(PermissionConstants.SYSTEM_USER_ADD)
|
||||
public UserBatchCreateDTO addUser(@Validated({Created.class}) @RequestBody UserBatchCreateDTO userCreateDTO) {
|
||||
public UserBatchCreateResponse addUser(@Validated({Created.class}) @RequestBody UserBatchCreateRequest userCreateDTO) {
|
||||
return userService.addUser(userCreateDTO, UserSource.LOCAL.name(), SessionUtils.getUserId());
|
||||
}
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
package io.metersphere.system.dto.request.user;
|
||||
|
||||
import io.metersphere.system.dto.UserCreateInfo;
|
||||
import io.metersphere.system.dto.user.UserCreateInfo;
|
||||
import io.metersphere.validation.groups.Created;
|
||||
import io.metersphere.validation.groups.Updated;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
package io.metersphere.system.dto;
|
||||
package io.metersphere.system.dto.user;
|
||||
|
||||
import io.metersphere.validation.groups.Created;
|
||||
import io.metersphere.validation.groups.Updated;
|
|
@ -1,5 +1,6 @@
|
|||
package io.metersphere.system.dto;
|
||||
package io.metersphere.system.dto.user.request;
|
||||
|
||||
import io.metersphere.system.dto.user.UserCreateInfo;
|
||||
import io.metersphere.validation.groups.Created;
|
||||
import io.metersphere.validation.groups.Updated;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
|
@ -11,7 +12,7 @@ import lombok.Data;
|
|||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class UserBatchCreateDTO {
|
||||
public class UserBatchCreateRequest {
|
||||
|
||||
@Schema(description = "用户信息集合", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotEmpty(groups = {Created.class, Updated.class}, message = "{user.info.not_empty}")
|
|
@ -0,0 +1,16 @@
|
|||
package io.metersphere.system.dto.user.response;
|
||||
|
||||
import io.metersphere.system.dto.user.UserCreateInfo;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@Data
|
||||
public class UserBatchCreateResponse {
|
||||
@Schema(description = "成功创建的数据")
|
||||
List<UserCreateInfo> successList;
|
||||
@Schema(description = "邮箱异常数据")
|
||||
Map<String, String> errorEmails;
|
||||
}
|
|
@ -1,7 +1,7 @@
|
|||
package io.metersphere.system.dto.response;
|
||||
package io.metersphere.system.dto.user.response;
|
||||
|
||||
import io.metersphere.system.dto.sdk.ExcelParseDTO;
|
||||
import io.metersphere.system.dto.excel.UserExcelRowDTO;
|
||||
import io.metersphere.system.dto.sdk.ExcelParseDTO;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
@ -22,9 +22,7 @@ public class UserImportResponse {
|
|||
public void generateResponse(ExcelParseDTO<UserExcelRowDTO> excelParseDTO) {
|
||||
successCount = excelParseDTO.getDataList().size();
|
||||
if (MapUtils.isNotEmpty(excelParseDTO.getErrRowData())) {
|
||||
excelParseDTO.getErrRowData().forEach((k, v) -> {
|
||||
errorMessages.put(k, v.getErrorMessage());
|
||||
});
|
||||
excelParseDTO.getErrRowData().forEach((k, v) -> errorMessages.put(k, v.getErrorMessage()));
|
||||
}
|
||||
importCount = errorMessages.size() + successCount;
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
package io.metersphere.system.dto.response;
|
||||
package io.metersphere.system.dto.user.response;
|
||||
|
||||
import io.metersphere.system.domain.UserInvite;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
|
@ -14,6 +14,6 @@ public class UserInviteResponse {
|
|||
private List<String> inviteIds;
|
||||
|
||||
public UserInviteResponse(List<UserInvite> userInvites) {
|
||||
this.inviteIds = userInvites.stream().map(UserInvite::getId).collect(java.util.stream.Collectors.toList());
|
||||
this.inviteIds = userInvites.stream().map(UserInvite::getId).toList();
|
||||
}
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
package io.metersphere.system.dto.response;
|
||||
package io.metersphere.system.dto.user.response;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
|
@ -1,4 +1,4 @@
|
|||
package io.metersphere.system.dto.response;
|
||||
package io.metersphere.system.dto.user.response;
|
||||
|
||||
import io.metersphere.system.domain.Organization;
|
||||
import io.metersphere.system.domain.User;
|
|
@ -7,6 +7,7 @@ import io.metersphere.system.dto.user.UserDTO;
|
|||
import io.metersphere.system.dto.user.UserExcludeOptionDTO;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
public interface BaseUserMapper {
|
||||
|
@ -24,7 +25,7 @@ public interface BaseUserMapper {
|
|||
|
||||
String selectEmailInDB(@Param("email") String email, @Param("id") String id);
|
||||
|
||||
List<User> selectUserIdByEmailList(@Param("emailList") List<String> emailList);
|
||||
List<User> selectUserIdByEmailList(@Param("emailList") Collection<String> emailList);
|
||||
|
||||
List<User> selectByKeyword(@Param("keyword") String keyword, @Param("selectId") boolean selectId);
|
||||
|
||||
|
|
|
@ -2,15 +2,15 @@ package io.metersphere.system.service;
|
|||
|
||||
import io.metersphere.sdk.constants.UserRoleScope;
|
||||
import io.metersphere.sdk.constants.UserRoleType;
|
||||
import io.metersphere.system.dto.permission.PermissionDefinitionItem;
|
||||
import io.metersphere.system.dto.sdk.request.PermissionSettingUpdateRequest;
|
||||
import io.metersphere.sdk.exception.MSException;
|
||||
import io.metersphere.sdk.util.Translator;
|
||||
import io.metersphere.system.domain.UserRole;
|
||||
import io.metersphere.system.domain.UserRoleExample;
|
||||
import io.metersphere.system.dto.permission.PermissionDefinitionItem;
|
||||
import io.metersphere.system.dto.sdk.request.PermissionSettingUpdateRequest;
|
||||
import io.metersphere.system.dto.user.response.UserSelectOption;
|
||||
import io.metersphere.system.mapper.ExtUserRoleMapper;
|
||||
import io.metersphere.system.mapper.UserRoleMapper;
|
||||
import io.metersphere.system.dto.response.UserSelectOption;
|
||||
import jakarta.annotation.Resource;
|
||||
import jakarta.validation.Valid;
|
||||
import jakarta.validation.constraints.NotEmpty;
|
||||
|
|
|
@ -7,7 +7,7 @@ import io.metersphere.sdk.constants.UserRoleEnum;
|
|||
import io.metersphere.sdk.constants.UserRoleScope;
|
||||
import io.metersphere.sdk.util.JSON;
|
||||
import io.metersphere.system.domain.*;
|
||||
import io.metersphere.system.dto.response.UserTableResponse;
|
||||
import io.metersphere.system.dto.user.response.UserTableResponse;
|
||||
import io.metersphere.system.log.constants.OperationLogModule;
|
||||
import io.metersphere.system.log.constants.OperationLogType;
|
||||
import io.metersphere.system.log.dto.LogDTO;
|
||||
|
@ -67,7 +67,7 @@ public class UserRoleRelationService {
|
|||
log.setOrganizationId(OperationLogConstants.SYSTEM);
|
||||
log.setType(operationType);
|
||||
log.setCreateUser(operator);
|
||||
log.setModule(OperationLogModule.SYSTEM_USER);
|
||||
log.setModule(OperationLogModule.SETTING_SYSTEM_USER_SINGLE);
|
||||
log.setMethod(operationMethod);
|
||||
log.setCreateTime(operationTime);
|
||||
log.setSourceId(user.getId());
|
||||
|
|
|
@ -6,8 +6,6 @@ import io.metersphere.sdk.constants.UserSource;
|
|||
import io.metersphere.sdk.exception.MSException;
|
||||
import io.metersphere.sdk.util.*;
|
||||
import io.metersphere.system.domain.*;
|
||||
import io.metersphere.system.dto.UserBatchCreateDTO;
|
||||
import io.metersphere.system.dto.UserCreateInfo;
|
||||
import io.metersphere.system.dto.excel.UserExcel;
|
||||
import io.metersphere.system.dto.excel.UserExcelRowDTO;
|
||||
import io.metersphere.system.dto.request.UserInviteRequest;
|
||||
|
@ -16,17 +14,20 @@ import io.metersphere.system.dto.request.user.PersonalUpdatePasswordRequest;
|
|||
import io.metersphere.system.dto.request.user.PersonalUpdateRequest;
|
||||
import io.metersphere.system.dto.request.user.UserChangeEnableRequest;
|
||||
import io.metersphere.system.dto.request.user.UserEditRequest;
|
||||
import io.metersphere.system.dto.response.UserImportResponse;
|
||||
import io.metersphere.system.dto.response.UserInviteResponse;
|
||||
import io.metersphere.system.dto.response.UserTableResponse;
|
||||
import io.metersphere.system.dto.sdk.BasePageRequest;
|
||||
import io.metersphere.system.dto.sdk.ExcelParseDTO;
|
||||
import io.metersphere.system.dto.sdk.SessionUser;
|
||||
import io.metersphere.system.dto.table.TableBatchProcessDTO;
|
||||
import io.metersphere.system.dto.table.TableBatchProcessResponse;
|
||||
import io.metersphere.system.dto.user.PersonalDTO;
|
||||
import io.metersphere.system.dto.user.UserCreateInfo;
|
||||
import io.metersphere.system.dto.user.UserDTO;
|
||||
import io.metersphere.system.dto.user.UserExtendDTO;
|
||||
import io.metersphere.system.dto.user.request.UserBatchCreateRequest;
|
||||
import io.metersphere.system.dto.user.response.UserBatchCreateResponse;
|
||||
import io.metersphere.system.dto.user.response.UserImportResponse;
|
||||
import io.metersphere.system.dto.user.response.UserInviteResponse;
|
||||
import io.metersphere.system.dto.user.response.UserTableResponse;
|
||||
import io.metersphere.system.log.service.OperationLogService;
|
||||
import io.metersphere.system.mapper.*;
|
||||
import io.metersphere.system.notice.sender.impl.MailNoticeSender;
|
||||
|
@ -41,6 +42,7 @@ import jakarta.validation.constraints.NotBlank;
|
|||
import jakarta.validation.constraints.NotEmpty;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.apache.commons.collections4.MapUtils;
|
||||
import org.apache.commons.lang3.BooleanUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.ibatis.session.ExecutorType;
|
||||
|
@ -55,10 +57,7 @@ import org.springframework.transaction.annotation.Transactional;
|
|||
import org.springframework.util.unit.DataSize;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Service
|
||||
|
@ -92,38 +91,46 @@ public class UserService {
|
|||
@Value("50MB")
|
||||
private DataSize maxImportFileSize;
|
||||
|
||||
private void validateUserInfo(List<String> createEmails) {
|
||||
private Map<String, String> validateUserInfo(Collection<String> createEmails) {
|
||||
Map<String, String> errorMessage = new HashMap<>();
|
||||
String userEmailRepeatError = Translator.get("user.email.repeat");
|
||||
//判断参数内是否含有重复邮箱
|
||||
List<String> emailList = new ArrayList<>();
|
||||
List<String> repeatEmailList = new ArrayList<>();
|
||||
var userInDbMap = baseUserMapper.selectUserIdByEmailList(createEmails)
|
||||
.stream().collect(Collectors.toMap(User::getEmail, User::getId));
|
||||
for (String createEmail : createEmails) {
|
||||
if (emailList.contains(createEmail)) {
|
||||
repeatEmailList.add(createEmail);
|
||||
errorMessage.put(createEmail, userEmailRepeatError);
|
||||
} else {
|
||||
//判断邮箱是否已存在数据库中
|
||||
if (userInDbMap.containsKey(createEmail)) {
|
||||
repeatEmailList.add(createEmail);
|
||||
errorMessage.put(createEmail, userEmailRepeatError);
|
||||
} else {
|
||||
emailList.add(createEmail);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (CollectionUtils.isNotEmpty(repeatEmailList)) {
|
||||
throw new MSException(Translator.get("user.email.repeat", repeatEmailList.toString()));
|
||||
}
|
||||
return errorMessage;
|
||||
}
|
||||
|
||||
public UserBatchCreateDTO addUser(UserBatchCreateDTO userCreateDTO, String source, String operator) {
|
||||
//检查用户邮箱的合法性
|
||||
this.validateUserInfo(userCreateDTO.getUserInfoList().stream().map(UserCreateInfo::getEmail).collect(Collectors.toList()));
|
||||
public UserBatchCreateResponse addUser(UserBatchCreateRequest userCreateDTO, String source, String operator) {
|
||||
|
||||
//检查用户权限的合法性
|
||||
globalUserRoleService.checkRoleIsGlobalAndHaveMember(userCreateDTO.getUserRoleIdList(), true);
|
||||
return this.saveUserAndRole(userCreateDTO, source, operator, "/system/user/addUser");
|
||||
|
||||
UserBatchCreateResponse response = new UserBatchCreateResponse();
|
||||
//检查用户邮箱的合法性
|
||||
Map<String, String> errorEmails = this.validateUserInfo(userCreateDTO.getUserInfoList().stream().map(UserCreateInfo::getEmail).toList());
|
||||
if (MapUtils.isNotEmpty(errorEmails)) {
|
||||
response.setErrorEmails(errorEmails);
|
||||
} else {
|
||||
response.setSuccessList(this.saveUserAndRole(userCreateDTO, source, operator, "/system/user/addUser"));
|
||||
}
|
||||
return response;
|
||||
}
|
||||
|
||||
private UserBatchCreateDTO saveUserAndRole(UserBatchCreateDTO userCreateDTO, String source, String operator, String requestPath) {
|
||||
private List<UserCreateInfo> saveUserAndRole(UserBatchCreateRequest userCreateDTO, String source, String operator, String requestPath) {
|
||||
List<UserCreateInfo> insertList = new ArrayList<>();
|
||||
long createTime = System.currentTimeMillis();
|
||||
List<User> saveUserList = new ArrayList<>();
|
||||
//添加用户
|
||||
|
@ -140,11 +147,12 @@ public class UserService {
|
|||
user.setDeleted(false);
|
||||
userMapper.insertSelective(user);
|
||||
saveUserList.add(user);
|
||||
insertList.add(userInfo);
|
||||
}
|
||||
userRoleRelationService.batchSave(userCreateDTO.getUserRoleIdList(), saveUserList);
|
||||
//写入操作日志
|
||||
operationLogService.batchAdd(userLogService.getBatchAddLogs(saveUserList, requestPath));
|
||||
return userCreateDTO;
|
||||
return insertList;
|
||||
}
|
||||
|
||||
public UserDTO getUserDTOByKeyword(String email) {
|
||||
|
@ -309,7 +317,7 @@ public class UserService {
|
|||
}
|
||||
|
||||
private void saveUserByExcelData(@Valid @NotEmpty List<UserExcelRowDTO> dataList, @Valid @NotEmpty String source, @Valid @NotBlank String sessionId) {
|
||||
UserBatchCreateDTO userBatchCreateDTO = new UserBatchCreateDTO();
|
||||
UserBatchCreateRequest userBatchCreateDTO = new UserBatchCreateRequest();
|
||||
userBatchCreateDTO.setUserRoleIdList(new ArrayList<>() {{
|
||||
add("member");
|
||||
}});
|
||||
|
@ -449,10 +457,12 @@ public class UserService {
|
|||
private SystemParameterMapper systemParameterMapper;
|
||||
|
||||
public UserInviteResponse saveInviteRecord(UserInviteRequest request, SessionUser inviteUser) {
|
||||
//校验邮箱和角色的合法性
|
||||
this.validateUserInfo(request.getInviteEmails());
|
||||
globalUserRoleService.checkRoleIsGlobalAndHaveMember(request.getUserRoleIds(), true);
|
||||
|
||||
//校验邮箱和角色的合法性
|
||||
Map<String, String> errorMap = this.validateUserInfo(request.getInviteEmails());
|
||||
if (MapUtils.isNotEmpty(errorMap)) {
|
||||
throw new MSException(Translator.get("user.email.repeat"));
|
||||
}
|
||||
List<UserInvite> inviteList = userInviteService.batchInsert(request.getInviteEmails(), inviteUser.getId(), request.getUserRoleIds());
|
||||
//记录日志
|
||||
userLogService.addEmailInviteLog(inviteList, inviteUser.getId());
|
||||
|
@ -481,7 +491,7 @@ public class UserService {
|
|||
try {
|
||||
this.sendInviteEmailTemporary(emailMap);
|
||||
} catch (Exception e) {
|
||||
LogUtils.error("邮箱邀请失败!", e);
|
||||
throw new MSException("邮箱邀请失败!", e);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
|
@ -2,12 +2,12 @@ package io.metersphere.system.controller.user;
|
|||
|
||||
import io.metersphere.sdk.constants.PermissionConstants;
|
||||
import io.metersphere.system.base.BaseTest;
|
||||
import io.metersphere.system.dto.UserCreateInfo;
|
||||
import io.metersphere.system.dto.request.UserInviteRequest;
|
||||
import io.metersphere.system.dto.request.user.UserChangeEnableRequest;
|
||||
import io.metersphere.system.dto.request.user.UserRoleBatchRelationRequest;
|
||||
import io.metersphere.system.dto.response.UserSelectOption;
|
||||
import io.metersphere.system.dto.table.TableBatchProcessDTO;
|
||||
import io.metersphere.system.dto.user.UserCreateInfo;
|
||||
import io.metersphere.system.dto.user.response.UserSelectOption;
|
||||
import io.metersphere.system.utils.user.UserParamUtils;
|
||||
import io.metersphere.system.utils.user.UserRequestUtils;
|
||||
import org.junit.jupiter.api.MethodOrderer;
|
||||
|
|
|
@ -14,29 +14,27 @@ import io.metersphere.system.domain.User;
|
|||
import io.metersphere.system.domain.UserExample;
|
||||
import io.metersphere.system.domain.UserInvite;
|
||||
import io.metersphere.system.domain.UserRoleRelationExample;
|
||||
import io.metersphere.system.dto.UserBatchCreateDTO;
|
||||
import io.metersphere.system.dto.UserCreateInfo;
|
||||
import io.metersphere.system.dto.excel.UserExcelRowDTO;
|
||||
import io.metersphere.system.dto.request.UserInviteRequest;
|
||||
import io.metersphere.system.dto.request.UserRegisterRequest;
|
||||
import io.metersphere.system.dto.request.user.UserChangeEnableRequest;
|
||||
import io.metersphere.system.dto.request.user.UserEditRequest;
|
||||
import io.metersphere.system.dto.request.user.UserRoleBatchRelationRequest;
|
||||
import io.metersphere.system.dto.response.UserImportResponse;
|
||||
import io.metersphere.system.dto.response.UserInviteResponse;
|
||||
import io.metersphere.system.dto.response.UserSelectOption;
|
||||
import io.metersphere.system.dto.response.UserTableResponse;
|
||||
import io.metersphere.system.dto.sdk.BasePageRequest;
|
||||
import io.metersphere.system.dto.sdk.BaseTreeNode;
|
||||
import io.metersphere.system.dto.sdk.ExcelParseDTO;
|
||||
import io.metersphere.system.dto.table.TableBatchProcessDTO;
|
||||
import io.metersphere.system.dto.table.TableBatchProcessResponse;
|
||||
import io.metersphere.system.dto.user.UserCreateInfo;
|
||||
import io.metersphere.system.dto.user.UserDTO;
|
||||
import io.metersphere.system.dto.user.request.UserBatchCreateRequest;
|
||||
import io.metersphere.system.dto.user.response.*;
|
||||
import io.metersphere.system.log.constants.OperationLogType;
|
||||
import io.metersphere.system.mapper.UserInviteMapper;
|
||||
import io.metersphere.system.mapper.UserMapper;
|
||||
import io.metersphere.system.mapper.UserRoleRelationMapper;
|
||||
import io.metersphere.system.service.GlobalUserRoleRelationService;
|
||||
import io.metersphere.system.service.UserInviteService;
|
||||
import io.metersphere.system.service.UserService;
|
||||
import io.metersphere.system.service.UserToolService;
|
||||
import io.metersphere.system.uid.IDGenerator;
|
||||
|
@ -47,6 +45,7 @@ import jakarta.annotation.Resource;
|
|||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.apache.commons.collections4.MapUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.http.HttpHeaders;
|
||||
import org.junit.jupiter.api.*;
|
||||
|
@ -121,19 +120,19 @@ public class UserControllerTests extends BaseTest {
|
|||
|
||||
@Test
|
||||
@Order(0)
|
||||
public void testGetGlobalSystemUserRoleSuccess() throws Exception {
|
||||
void testGetGlobalSystemUserRoleSuccess() throws Exception {
|
||||
MvcResult mvcResult = userRequestUtils.responseGet(UserRequestUtils.URL_GET_GLOBAL_SYSTEM);
|
||||
this.setDefaultUserRoleList(mvcResult);
|
||||
}
|
||||
|
||||
@Test
|
||||
@Order(1)
|
||||
public void testAddSuccess() throws Exception {
|
||||
void testAddSuccess() throws Exception {
|
||||
if (CollectionUtils.isEmpty(USER_ROLE_LIST)) {
|
||||
this.testGetGlobalSystemUserRoleSuccess();
|
||||
}
|
||||
//模拟前台批量添加用户
|
||||
UserBatchCreateDTO userMaintainRequest = UserParamUtils.getUserCreateDTO(
|
||||
UserBatchCreateRequest userMaintainRequest = UserParamUtils.getUserCreateDTO(
|
||||
USER_ROLE_LIST,
|
||||
new ArrayList<>() {{
|
||||
add(new UserCreateInfo() {{
|
||||
|
@ -160,7 +159,7 @@ public class UserControllerTests extends BaseTest {
|
|||
}});
|
||||
}
|
||||
userMaintainRequest = UserParamUtils.getUserCreateDTO(
|
||||
Collections.singletonList(USER_ROLE_LIST.get(0)),
|
||||
Collections.singletonList(USER_ROLE_LIST.getFirst()),
|
||||
userCreateInfoList
|
||||
);
|
||||
mvcResult = userRequestUtils.responsePost(UserRequestUtils.URL_USER_CREATE, userMaintainRequest);
|
||||
|
@ -190,7 +189,7 @@ public class UserControllerTests extends BaseTest {
|
|||
@Sql(scripts = {"/dml/init_user_controller_test.sql"},
|
||||
config = @SqlConfig(encoding = "utf-8", transactionMode = SqlConfig.TransactionMode.ISOLATED),
|
||||
executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD)
|
||||
public void testGetByEmailSuccess() throws Exception {
|
||||
void testGetByEmailSuccess() throws Exception {
|
||||
this.checkUserList();
|
||||
UserDTO userDTO = this.getUserByEmail(USER_DEFAULT_EMAIL);
|
||||
//返回值不为空
|
||||
|
@ -215,7 +214,7 @@ public class UserControllerTests extends BaseTest {
|
|||
|
||||
@Test
|
||||
@Order(2)
|
||||
public void testGetByEmailError() throws Exception {
|
||||
void testGetByEmailError() throws Exception {
|
||||
//测试使用任意参数,不能获取到任何用户信息
|
||||
this.checkUserList();
|
||||
String url = UserRequestUtils.URL_USER_GET + IDGenerator.nextNum();
|
||||
|
@ -231,7 +230,7 @@ public class UserControllerTests extends BaseTest {
|
|||
|
||||
@Test
|
||||
@Order(3)
|
||||
public void testPageSuccess() throws Exception {
|
||||
void testPageSuccess() throws Exception {
|
||||
if (CollectionUtils.isEmpty(USER_ROLE_LIST)) {
|
||||
this.testGetGlobalSystemUserRoleSuccess();
|
||||
}
|
||||
|
@ -283,7 +282,7 @@ public class UserControllerTests extends BaseTest {
|
|||
returnPager = userRequestUtils.selectUserPage(basePageRequest);
|
||||
//第一个数据的createTime是最大的
|
||||
List<UserTableResponse> userInfoList = JSON.parseArray(JSON.toJSONString(returnPager.getList()), UserTableResponse.class);
|
||||
long firstCreateTime = userInfoList.get(0).getCreateTime();
|
||||
long firstCreateTime = userInfoList.getFirst().getCreateTime();
|
||||
for (UserTableResponse userInfo : userInfoList) {
|
||||
Assertions.assertFalse(userInfo.getCreateTime() > firstCreateTime);
|
||||
}
|
||||
|
@ -310,19 +309,22 @@ public class UserControllerTests extends BaseTest {
|
|||
|
||||
@Test
|
||||
@Order(3)
|
||||
public void testPageError() throws Exception {
|
||||
void testPageError() throws Exception {
|
||||
//当前页码不大于0
|
||||
BasePageRequest basePageRequest = new BasePageRequest();
|
||||
basePageRequest.setPageSize(5);
|
||||
this.requestPost(UserRequestUtils.URL_USER_PAGE, basePageRequest, BAD_REQUEST_MATCHER);
|
||||
this.requestPost(UserRequestUtils.URL_USER_PAGE, basePageRequest).andExpect(BAD_REQUEST_MATCHER);
|
||||
|
||||
//pageSize超过501
|
||||
basePageRequest = UserParamUtils.getDefaultPageRequest();
|
||||
basePageRequest.setPageSize(501);
|
||||
this.requestPost(UserRequestUtils.URL_USER_PAGE, basePageRequest, BAD_REQUEST_MATCHER);
|
||||
this.requestPost(UserRequestUtils.URL_USER_PAGE, basePageRequest).andExpect(BAD_REQUEST_MATCHER);
|
||||
|
||||
//当前页数不大于5
|
||||
basePageRequest = new BasePageRequest();
|
||||
basePageRequest.setCurrent(1);
|
||||
this.requestPost(UserRequestUtils.URL_USER_PAGE, basePageRequest, BAD_REQUEST_MATCHER);
|
||||
this.requestPost(UserRequestUtils.URL_USER_PAGE, basePageRequest).andExpect(BAD_REQUEST_MATCHER);
|
||||
|
||||
//排序字段不合法
|
||||
basePageRequest = new BasePageRequest();
|
||||
basePageRequest.setCurrent(1);
|
||||
|
@ -330,15 +332,16 @@ public class UserControllerTests extends BaseTest {
|
|||
basePageRequest.setSort(new HashMap<>() {{
|
||||
put("SELECT * FROM user", "asc");
|
||||
}});
|
||||
this.requestPost(UserRequestUtils.URL_USER_PAGE, basePageRequest, BAD_REQUEST_MATCHER);
|
||||
this.requestPost(UserRequestUtils.URL_USER_PAGE, basePageRequest).andExpect(BAD_REQUEST_MATCHER);
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
@Order(4)
|
||||
public void testUserUpdateSuccess() throws Exception {
|
||||
void testUserUpdateSuccess() throws Exception {
|
||||
this.checkUserList();
|
||||
UserCreateInfo user = new UserCreateInfo();
|
||||
BeanUtils.copyBean(user, USER_LIST.get(0));
|
||||
BeanUtils.copyBean(user, USER_LIST.getFirst());
|
||||
UserEditRequest userMaintainRequest;
|
||||
UserEditRequest response;
|
||||
UserDTO checkDTO;
|
||||
|
@ -389,7 +392,7 @@ public class UserControllerTests extends BaseTest {
|
|||
UserParamUtils.compareUserDTO(response, checkDTO);
|
||||
//用户信息复原
|
||||
user = new UserCreateInfo();
|
||||
BeanUtils.copyBean(user, USER_LIST.get(0));
|
||||
BeanUtils.copyBean(user, USER_LIST.getFirst());
|
||||
userMaintainRequest = UserParamUtils.getUserUpdateDTO(user, USER_ROLE_LIST);
|
||||
response = userRequestUtils.parseObjectFromMvcResult(userRequestUtils.responsePost(UserRequestUtils.URL_USER_UPDATE, userMaintainRequest), UserEditRequest.class);
|
||||
LOG_CHECK_LIST.add(
|
||||
|
@ -401,55 +404,53 @@ public class UserControllerTests extends BaseTest {
|
|||
|
||||
@Test
|
||||
@Order(5)
|
||||
public void testUserUpdateError() throws Exception {
|
||||
void testUserUpdateError() throws Exception {
|
||||
this.checkUserList();
|
||||
// 4xx 验证
|
||||
UserCreateInfo user = new UserCreateInfo();
|
||||
UserEditRequest userMaintainRequest;
|
||||
//更改名字
|
||||
BeanUtils.copyBean(user, USER_LIST.get(0));
|
||||
BeanUtils.copyBean(user, USER_LIST.getFirst());
|
||||
user.setName("");
|
||||
userMaintainRequest = UserParamUtils.getUserUpdateDTO(user, USER_ROLE_LIST);
|
||||
this.requestPost(UserRequestUtils.URL_USER_UPDATE, userMaintainRequest, BAD_REQUEST_MATCHER);
|
||||
this.requestPost(UserRequestUtils.URL_USER_UPDATE, userMaintainRequest).andExpect(BAD_REQUEST_MATCHER);
|
||||
|
||||
//email为空
|
||||
BeanUtils.copyBean(user, USER_LIST.get(0));
|
||||
BeanUtils.copyBean(user, USER_LIST.getFirst());
|
||||
user.setEmail("");
|
||||
userMaintainRequest = UserParamUtils.getUserUpdateDTO(user, USER_ROLE_LIST);
|
||||
this.requestPost(UserRequestUtils.URL_USER_UPDATE, userMaintainRequest, BAD_REQUEST_MATCHER);
|
||||
this.requestPost(UserRequestUtils.URL_USER_UPDATE, userMaintainRequest).andExpect(BAD_REQUEST_MATCHER);
|
||||
|
||||
//手机号为空
|
||||
BeanUtils.copyBean(user, USER_LIST.get(0));
|
||||
BeanUtils.copyBean(user, USER_LIST.getFirst());
|
||||
user.setEmail("");
|
||||
userMaintainRequest = UserParamUtils.getUserUpdateDTO(user, USER_ROLE_LIST);
|
||||
this.requestPost(UserRequestUtils.URL_USER_UPDATE, userMaintainRequest, BAD_REQUEST_MATCHER);
|
||||
this.requestPost(UserRequestUtils.URL_USER_UPDATE, userMaintainRequest).andExpect(BAD_REQUEST_MATCHER);
|
||||
|
||||
//用户组为空
|
||||
BeanUtils.copyBean(user, USER_LIST.get(0));
|
||||
BeanUtils.copyBean(user, USER_LIST.getFirst());
|
||||
userMaintainRequest = UserParamUtils.getUserUpdateDTO(user, new ArrayList<>());
|
||||
userMaintainRequest.setUserRoleIdList(new ArrayList<>());
|
||||
this.requestPost(UserRequestUtils.URL_USER_UPDATE, userMaintainRequest, BAD_REQUEST_MATCHER);
|
||||
this.requestPost(UserRequestUtils.URL_USER_UPDATE, userMaintainRequest).andExpect(BAD_REQUEST_MATCHER);
|
||||
|
||||
|
||||
// 500验证
|
||||
//邮箱重复
|
||||
this.checkUserList();
|
||||
BeanUtils.copyBean(user, USER_LIST.get(0));
|
||||
user.setEmail(USER_LIST.get(USER_LIST.size() - 1).getEmail());
|
||||
BeanUtils.copyBean(user, USER_LIST.getFirst());
|
||||
user.setEmail(USER_LIST.getLast().getEmail());
|
||||
userMaintainRequest = UserParamUtils.getUserUpdateDTO(user, USER_ROLE_LIST);
|
||||
MvcResult mvcResult = this.requestPost(UserRequestUtils.URL_USER_UPDATE, userMaintainRequest, ERROR_REQUEST_MATCHER).andReturn();
|
||||
MvcResult mvcResult = this.requestPost(UserRequestUtils.URL_USER_UPDATE, userMaintainRequest).andExpect(ERROR_REQUEST_MATCHER).andReturn();
|
||||
ResultHolder resultHolder = JSON.parseObject(mvcResult.getResponse().getContentAsString(StandardCharsets.UTF_8), ResultHolder.class);
|
||||
Assertions.assertEquals(resultHolder.getMessage(), "用户邮箱已存在");
|
||||
//用户组不包含系统成员
|
||||
BeanUtils.copyBean(user, USER_LIST.get(0));
|
||||
userMaintainRequest = UserParamUtils.getUserUpdateDTO(user,
|
||||
USER_ROLE_LIST.stream().filter(item -> !StringUtils.equals(item.getId(), "member")).toList()
|
||||
);
|
||||
this.requestPost(UserRequestUtils.URL_USER_UPDATE, userMaintainRequest, ERROR_REQUEST_MATCHER);
|
||||
}
|
||||
|
||||
@Test
|
||||
@Order(6)
|
||||
public void testUserChangeEnableSuccess() throws Exception {
|
||||
void testUserChangeEnableSuccess() throws Exception {
|
||||
this.checkUserList();
|
||||
|
||||
UserCreateInfo userInfo = USER_LIST.get(0);
|
||||
UserCreateInfo userInfo = USER_LIST.getFirst();
|
||||
|
||||
//先使用要操作的用户登录,用于检查会不会把账户踢出
|
||||
MvcResult mvcResult = mockMvc.perform(MockMvcRequestBuilders.post("/login")
|
||||
|
@ -476,7 +477,7 @@ public class UserControllerTests extends BaseTest {
|
|||
this.add(userInfo.getId());
|
||||
}});
|
||||
userChangeEnableRequest.setEnable(false);
|
||||
this.requestPost(UserRequestUtils.URL_USER_UPDATE_ENABLE, userChangeEnableRequest, status().isOk());
|
||||
this.requestPostWithOk(UserRequestUtils.URL_USER_UPDATE_ENABLE, userChangeEnableRequest);
|
||||
for (String item : userChangeEnableRequest.getSelectIds()) {
|
||||
LOG_CHECK_LIST.add(
|
||||
new CheckLogModel(item, OperationLogType.UPDATE, UserRequestUtils.URL_USER_UPDATE_ENABLE)
|
||||
|
@ -497,7 +498,7 @@ public class UserControllerTests extends BaseTest {
|
|||
|
||||
//修改状态开启
|
||||
userChangeEnableRequest.setEnable(true);
|
||||
this.requestPost(UserRequestUtils.URL_USER_UPDATE_ENABLE, userChangeEnableRequest, status().isOk());
|
||||
this.requestPostWithOk(UserRequestUtils.URL_USER_UPDATE_ENABLE, userChangeEnableRequest);
|
||||
for (String item : userChangeEnableRequest.getSelectIds()) {
|
||||
LOG_CHECK_LIST.add(
|
||||
new CheckLogModel(item, OperationLogType.UPDATE, UserRequestUtils.URL_USER_UPDATE_ENABLE)
|
||||
|
@ -510,28 +511,29 @@ public class UserControllerTests extends BaseTest {
|
|||
|
||||
@Test
|
||||
@Order(6)
|
||||
public void testUserChangeEnableError() throws Exception {
|
||||
void testUserChangeEnableError() throws Exception {
|
||||
this.checkUserList();
|
||||
//用户不存在
|
||||
UserChangeEnableRequest userChangeEnableRequest = new UserChangeEnableRequest();
|
||||
userChangeEnableRequest.setEnable(false);
|
||||
this.requestPost(UserRequestUtils.URL_USER_UPDATE_ENABLE, userChangeEnableRequest, BAD_REQUEST_MATCHER);
|
||||
this.requestPost(UserRequestUtils.URL_USER_UPDATE_ENABLE, userChangeEnableRequest).andExpect(ERROR_REQUEST_MATCHER);
|
||||
|
||||
//含有非法用户
|
||||
userChangeEnableRequest.setSelectIds(new ArrayList<>() {{
|
||||
this.add("BCDEDIT");
|
||||
}});
|
||||
this.requestPost(UserRequestUtils.URL_USER_UPDATE_ENABLE, userChangeEnableRequest, ERROR_REQUEST_MATCHER);
|
||||
this.requestPost(UserRequestUtils.URL_USER_UPDATE_ENABLE, userChangeEnableRequest).andExpect(ERROR_REQUEST_MATCHER);
|
||||
//含有当前用户
|
||||
userChangeEnableRequest.setSelectIds(new ArrayList<>() {{
|
||||
this.add("admin");
|
||||
}});
|
||||
this.requestPost(UserRequestUtils.URL_USER_UPDATE_ENABLE, userChangeEnableRequest, ERROR_REQUEST_MATCHER);
|
||||
this.requestPost(UserRequestUtils.URL_USER_UPDATE_ENABLE, userChangeEnableRequest).andExpect(ERROR_REQUEST_MATCHER);
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
@Order(7)
|
||||
public void testUserImport() throws Exception {
|
||||
void testUserImport() throws Exception {
|
||||
this.checkUserList();
|
||||
//测试用户数据导入。 每个导入文件都有10条数据,不同文件出错的数据不同。
|
||||
int importSuccessData = 10;//应该导入成功的数据数量
|
||||
|
@ -620,7 +622,7 @@ public class UserControllerTests extends BaseTest {
|
|||
|
||||
@Test
|
||||
@Order(8)
|
||||
public void testUserResetPasswordError() throws Exception {
|
||||
void testUserResetPasswordError() throws Exception {
|
||||
//用户不存在
|
||||
{
|
||||
TableBatchProcessDTO request = new TableBatchProcessDTO();
|
||||
|
@ -631,11 +633,11 @@ public class UserControllerTests extends BaseTest {
|
|||
|
||||
@Test
|
||||
@Order(1)
|
||||
public void testAddError() throws Exception {
|
||||
void testAddError() throws Exception {
|
||||
if (CollectionUtils.isEmpty(USER_ROLE_LIST)) {
|
||||
this.testGetGlobalSystemUserRoleSuccess();
|
||||
}
|
||||
UserBatchCreateDTO userMaintainRequest;
|
||||
UserBatchCreateRequest userMaintainRequest;
|
||||
List<UserCreateInfo> errorUserList = new ArrayList<>() {{
|
||||
add(new UserCreateInfo() {{
|
||||
setName("tianyang.error.1");
|
||||
|
@ -653,24 +655,24 @@ public class UserControllerTests extends BaseTest {
|
|||
*/
|
||||
//所有参数都为空
|
||||
userMaintainRequest = UserParamUtils.getUserCreateDTO(null, null);
|
||||
this.requestPost(UserRequestUtils.URL_USER_CREATE, userMaintainRequest, BAD_REQUEST_MATCHER);
|
||||
this.requestPost(UserRequestUtils.URL_USER_CREATE, userMaintainRequest).andExpect(BAD_REQUEST_MATCHER);
|
||||
//用户组ID为空
|
||||
userMaintainRequest = UserParamUtils.getUserCreateDTO(
|
||||
null,
|
||||
errorUserList);
|
||||
this.requestPost(UserRequestUtils.URL_USER_CREATE, userMaintainRequest, BAD_REQUEST_MATCHER);
|
||||
this.requestPost(UserRequestUtils.URL_USER_CREATE, userMaintainRequest).andExpect(BAD_REQUEST_MATCHER);
|
||||
//没有用户
|
||||
userMaintainRequest = UserParamUtils.getUserCreateDTO(
|
||||
USER_ROLE_LIST,
|
||||
null);
|
||||
this.requestPost(UserRequestUtils.URL_USER_CREATE, userMaintainRequest, BAD_REQUEST_MATCHER);
|
||||
this.requestPost(UserRequestUtils.URL_USER_CREATE, userMaintainRequest).andExpect(BAD_REQUEST_MATCHER);
|
||||
//用户组含有null
|
||||
userMaintainRequest = UserParamUtils.getUserCreateDTO(
|
||||
USER_ROLE_LIST,
|
||||
errorUserList);
|
||||
userMaintainRequest.getUserRoleIdList().add(null);
|
||||
userMaintainRequest.getUserRoleIdList().add("");
|
||||
this.requestPost(UserRequestUtils.URL_USER_CREATE, userMaintainRequest, BAD_REQUEST_MATCHER);
|
||||
this.requestPost(UserRequestUtils.URL_USER_CREATE, userMaintainRequest).andExpect(BAD_REQUEST_MATCHER);
|
||||
//含有用户名称为空的数据
|
||||
userMaintainRequest = UserParamUtils.getUserCreateDTO(
|
||||
USER_ROLE_LIST,
|
||||
|
@ -679,7 +681,7 @@ public class UserControllerTests extends BaseTest {
|
|||
userMaintainRequest.getUserInfoList().add(new UserCreateInfo() {{
|
||||
setEmail("tianyang.name.empty@126.com");
|
||||
}});
|
||||
this.requestPost(UserRequestUtils.URL_USER_CREATE, userMaintainRequest, BAD_REQUEST_MATCHER);
|
||||
this.requestPost(UserRequestUtils.URL_USER_CREATE, userMaintainRequest).andExpect(BAD_REQUEST_MATCHER);
|
||||
//含有用户邮箱为空的数据
|
||||
userMaintainRequest = UserParamUtils.getUserCreateDTO(
|
||||
USER_ROLE_LIST,
|
||||
|
@ -688,7 +690,7 @@ public class UserControllerTests extends BaseTest {
|
|||
userMaintainRequest.getUserInfoList().add(new UserCreateInfo() {{
|
||||
setName("tianyang.email.empty");
|
||||
}});
|
||||
this.requestPost(UserRequestUtils.URL_USER_CREATE, userMaintainRequest, BAD_REQUEST_MATCHER);
|
||||
this.requestPost(UserRequestUtils.URL_USER_CREATE, userMaintainRequest).andExpect(BAD_REQUEST_MATCHER);
|
||||
//用户邮箱不符合标准
|
||||
userMaintainRequest = UserParamUtils.getUserCreateDTO(
|
||||
USER_ROLE_LIST,
|
||||
|
@ -698,7 +700,7 @@ public class UserControllerTests extends BaseTest {
|
|||
setName("用户邮箱放飞自我");
|
||||
setEmail("用户邮箱放飞自我");
|
||||
}});
|
||||
this.requestPost(UserRequestUtils.URL_USER_CREATE, userMaintainRequest, BAD_REQUEST_MATCHER);
|
||||
this.requestPost(UserRequestUtils.URL_USER_CREATE, userMaintainRequest).andExpect(BAD_REQUEST_MATCHER);
|
||||
/*
|
||||
* 校验业务判断出错的反例 (500 error)
|
||||
* 需要保证数据库有正常数据
|
||||
|
@ -712,18 +714,21 @@ public class UserControllerTests extends BaseTest {
|
|||
}});
|
||||
}},
|
||||
errorUserList);
|
||||
this.requestPost(UserRequestUtils.URL_USER_CREATE, userMaintainRequest, ERROR_REQUEST_MATCHER);
|
||||
this.requestPost(UserRequestUtils.URL_USER_CREATE, userMaintainRequest).andExpect(ERROR_REQUEST_MATCHER);
|
||||
//含有重复的用户邮箱
|
||||
userMaintainRequest = UserParamUtils.getUserCreateDTO(
|
||||
USER_ROLE_LIST,
|
||||
errorUserList
|
||||
);
|
||||
String firstUserEmail = userMaintainRequest.getUserInfoList().get(0).getEmail();
|
||||
String firstUserEmail = userMaintainRequest.getUserInfoList().getFirst().getEmail();
|
||||
userMaintainRequest.getUserInfoList().add(new UserCreateInfo() {{
|
||||
setName("tianyang.no.error4");
|
||||
setEmail(firstUserEmail);
|
||||
}});
|
||||
this.requestPost(UserRequestUtils.URL_USER_CREATE, userMaintainRequest, ERROR_REQUEST_MATCHER);
|
||||
MvcResult errorEmailResult = this.requestPostWithOkAndReturn(UserRequestUtils.URL_USER_CREATE, userMaintainRequest);
|
||||
ResultHolder errorEmailResultHolder = JSON.parseObject(errorEmailResult.getResponse().getContentAsString(StandardCharsets.UTF_8), ResultHolder.class);
|
||||
UserBatchCreateResponse errorEmailResponse = JSON.parseObject(JSON.toJSONString(errorEmailResultHolder.getData()), UserBatchCreateResponse.class);
|
||||
Assertions.assertTrue(MapUtils.isNotEmpty(errorEmailResponse.getErrorEmails()));
|
||||
//测试请求参数中含有数据库中已存在的邮箱情况
|
||||
userMaintainRequest = UserParamUtils.getUserCreateDTO(
|
||||
USER_ROLE_LIST,
|
||||
|
@ -737,12 +742,15 @@ public class UserControllerTests extends BaseTest {
|
|||
}});
|
||||
}}
|
||||
);
|
||||
this.requestPost(UserRequestUtils.URL_USER_CREATE, userMaintainRequest, ERROR_REQUEST_MATCHER);
|
||||
errorEmailResult = this.requestPostWithOkAndReturn(UserRequestUtils.URL_USER_CREATE, userMaintainRequest);
|
||||
errorEmailResultHolder = JSON.parseObject(errorEmailResult.getResponse().getContentAsString(StandardCharsets.UTF_8), ResultHolder.class);
|
||||
errorEmailResponse = JSON.parseObject(JSON.toJSONString(errorEmailResultHolder.getData()), UserBatchCreateResponse.class);
|
||||
Assertions.assertTrue(MapUtils.isNotEmpty(errorEmailResponse.getErrorEmails()));
|
||||
}
|
||||
|
||||
@Test
|
||||
@Order(8)
|
||||
public void testUserResetPasswordSuccess() throws Exception {
|
||||
void testUserResetPasswordSuccess() throws Exception {
|
||||
this.checkUserList();
|
||||
//重置admin的密码
|
||||
{
|
||||
|
@ -760,7 +768,7 @@ public class UserControllerTests extends BaseTest {
|
|||
//重置普通用户密码
|
||||
{
|
||||
User paramUser = new User();
|
||||
String userId = USER_LIST.get(0).getId();
|
||||
String userId = USER_LIST.getFirst().getId();
|
||||
paramUser.setId(userId);
|
||||
paramUser.setPassword("I can't say any dirty words");
|
||||
Assertions.assertEquals(1, userMapper.updateByPrimaryKeySelective(paramUser));
|
||||
|
@ -811,7 +819,7 @@ public class UserControllerTests extends BaseTest {
|
|||
|
||||
@Test
|
||||
@Order(9)
|
||||
public void testUserRoleRelationSuccess() throws Exception {
|
||||
void testUserRoleRelationSuccess() throws Exception {
|
||||
//UserList中的部分角色是没有添加到某权限中的
|
||||
if (USER_LIST.size() < 50) {
|
||||
this.testAddSuccess();
|
||||
|
@ -845,7 +853,7 @@ public class UserControllerTests extends BaseTest {
|
|||
|
||||
@Test
|
||||
@Order(9)
|
||||
public void testUserRoleRelationError() throws Exception {
|
||||
void testUserRoleRelationError() throws Exception {
|
||||
//UserList中的部分角色是没有添加到某权限中的
|
||||
if (USER_LIST.size() < 50) {
|
||||
this.testAddSuccess();
|
||||
|
@ -877,7 +885,7 @@ public class UserControllerTests extends BaseTest {
|
|||
|
||||
@Test
|
||||
@Order(9)
|
||||
public void testGetEmptyProject() throws Exception {
|
||||
void testGetEmptyProject() throws Exception {
|
||||
//测试如果没有项目系统不会报错
|
||||
List<Project> allProjectList = projectMapper.selectByExample(null);
|
||||
projectMapper.deleteByExample(null);
|
||||
|
@ -906,7 +914,7 @@ public class UserControllerTests extends BaseTest {
|
|||
@Sql(scripts = {"/dml/init_user_org_project.sql"},
|
||||
config = @SqlConfig(encoding = "utf-8", transactionMode = SqlConfig.TransactionMode.ISOLATED),
|
||||
executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD)
|
||||
public void testGetProjectAndOrganization() throws Exception {
|
||||
void testGetProjectAndOrganization() throws Exception {
|
||||
String str = userRequestUtils.responseGet(UserRequestUtils.URL_GET_PROJECT).getResponse().getContentAsString(StandardCharsets.UTF_8);
|
||||
ResultHolder rh = JSON.parseObject(str, ResultHolder.class);
|
||||
List<BaseTreeNode> userTreeSelectOptions = JSON.parseArray(
|
||||
|
@ -928,7 +936,7 @@ public class UserControllerTests extends BaseTest {
|
|||
|
||||
@Test
|
||||
@Order(11)
|
||||
public void testAddProjectMember() throws Exception {
|
||||
void testAddProjectMember() throws Exception {
|
||||
//UserList中的部分角色是没有添加到某权限中的
|
||||
if (CollectionUtils.isEmpty(USER_LIST)) {
|
||||
this.testAddSuccess();
|
||||
|
@ -980,7 +988,7 @@ public class UserControllerTests extends BaseTest {
|
|||
|
||||
@Test
|
||||
@Order(13)
|
||||
public void testAddOrganization() throws Exception {
|
||||
void testAddOrganization() throws Exception {
|
||||
//UserList中的部分角色是没有添加到某权限中的
|
||||
if (CollectionUtils.isEmpty(USER_LIST)) {
|
||||
this.testAddSuccess();
|
||||
|
@ -1024,7 +1032,7 @@ public class UserControllerTests extends BaseTest {
|
|||
|
||||
@Test
|
||||
@Order(11)
|
||||
public void testAddToOrgOrProjectError() throws Exception {
|
||||
void testAddToOrgOrProjectError() throws Exception {
|
||||
if (CollectionUtils.isEmpty(PROJECT_LIST) || CollectionUtils.isEmpty(ORG_LIST)) {
|
||||
this.testGetProjectAndOrganization();
|
||||
}
|
||||
|
@ -1074,7 +1082,7 @@ public class UserControllerTests extends BaseTest {
|
|||
|
||||
@Test
|
||||
@Order(12)
|
||||
public void testUserInvite() throws Exception {
|
||||
void testUserInvite() throws Exception {
|
||||
if (CollectionUtils.isEmpty(USER_LIST)) {
|
||||
this.testAddSuccess();
|
||||
}
|
||||
|
@ -1084,7 +1092,7 @@ public class UserControllerTests extends BaseTest {
|
|||
|
||||
@Test
|
||||
@Order(13)
|
||||
public void testUserRegister() throws Exception {
|
||||
void testUserRegister() throws Exception {
|
||||
if (CollectionUtils.isEmpty(INVITE_RECORD_ID_LIST)) {
|
||||
this.testUserInvite();
|
||||
}
|
||||
|
@ -1094,18 +1102,18 @@ public class UserControllerTests extends BaseTest {
|
|||
|
||||
@Test
|
||||
@Order(14)
|
||||
public void testGetKey() throws Exception {
|
||||
void testGetKey() throws Exception {
|
||||
this.requestGetWithOk("/get-key");
|
||||
}
|
||||
|
||||
//本测试类中会用到很多次用户数据。所以测试删除的方法放于最后
|
||||
@Test
|
||||
@Order(99)
|
||||
public void testUserDeleteSuccess() throws Exception {
|
||||
void testUserDeleteSuccess() throws Exception {
|
||||
this.checkUserList();
|
||||
|
||||
//先使用要操作的用户登录,用于检查会不会把账户踢出
|
||||
UserCreateInfo userInfo = USER_LIST.get(0);
|
||||
UserCreateInfo userInfo = USER_LIST.getFirst();
|
||||
MvcResult mvcResult = mockMvc.perform(MockMvcRequestBuilders.post("/login")
|
||||
.content(String.format("{\"username\":\"%s\",\"password\":\"%s\"}", userInfo.getEmail(), userInfo.getEmail()))
|
||||
.contentType(MediaType.APPLICATION_JSON))
|
||||
|
@ -1159,30 +1167,30 @@ public class UserControllerTests extends BaseTest {
|
|||
//删除失败的方法要放在删除成功方法后面执行
|
||||
@Test
|
||||
@Order(100)
|
||||
public void testUserDeleteError() throws Exception {
|
||||
void testUserDeleteError() throws Exception {
|
||||
//参数为空
|
||||
TableBatchProcessDTO request = new TableBatchProcessDTO();
|
||||
this.requestPost(UserRequestUtils.URL_USER_DELETE, request, ERROR_REQUEST_MATCHER);
|
||||
this.requestPost(UserRequestUtils.URL_USER_DELETE, request).andExpect(ERROR_REQUEST_MATCHER);
|
||||
//用户不存在
|
||||
request.setSelectIds(Collections.singletonList("none user"));
|
||||
this.requestPost(UserRequestUtils.URL_USER_DELETE, request, ERROR_REQUEST_MATCHER);
|
||||
this.requestPost(UserRequestUtils.URL_USER_DELETE, request).andExpect(ERROR_REQUEST_MATCHER);
|
||||
//测试用户已经被删除的
|
||||
if (CollectionUtils.isEmpty(DELETED_USER_ID_LIST)) {
|
||||
this.testUserDeleteSuccess();
|
||||
}
|
||||
request.setSelectIds(DELETED_USER_ID_LIST);
|
||||
this.requestPost(UserRequestUtils.URL_USER_DELETE, request, ERROR_REQUEST_MATCHER);
|
||||
this.requestPost(UserRequestUtils.URL_USER_DELETE, request).andExpect(ERROR_REQUEST_MATCHER);
|
||||
|
||||
//测试包含Admin用户
|
||||
request = new TableBatchProcessDTO();
|
||||
request.setSelectAll(true);
|
||||
this.requestPost(UserRequestUtils.URL_USER_DELETE, request, ERROR_REQUEST_MATCHER);
|
||||
this.requestPost(UserRequestUtils.URL_USER_DELETE, request).andExpect(ERROR_REQUEST_MATCHER);
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
@Order(101)
|
||||
public void testLog() throws Exception {
|
||||
void testLog() throws Exception {
|
||||
Thread.sleep(5000);
|
||||
for (CheckLogModel checkLogModel : LOG_CHECK_LIST) {
|
||||
if (StringUtils.isEmpty(checkLogModel.getUrl())) {
|
||||
|
@ -1216,16 +1224,16 @@ public class UserControllerTests extends BaseTest {
|
|||
}
|
||||
|
||||
//成功入库的用户保存内存中,其他用例会使用到
|
||||
private void addUser2List(MvcResult mvcResult) throws Exception {
|
||||
UserBatchCreateDTO userMaintainRequest = userRequestUtils.parseObjectFromMvcResult(mvcResult, UserBatchCreateDTO.class);
|
||||
for (UserCreateInfo item : userMaintainRequest.getUserInfoList()) {
|
||||
private void addUser2List(MvcResult mvcResult) {
|
||||
UserBatchCreateResponse userMaintainRequest = userRequestUtils.parseObjectFromMvcResult(mvcResult, UserBatchCreateResponse.class);
|
||||
for (UserCreateInfo item : userMaintainRequest.getSuccessList()) {
|
||||
LOG_CHECK_LIST.add(
|
||||
new CheckLogModel(item.getId(), OperationLogType.ADD, null)
|
||||
);
|
||||
}
|
||||
//返回值不为空
|
||||
Assertions.assertNotNull(userMaintainRequest);
|
||||
USER_LIST.addAll(userMaintainRequest.getUserInfoList());
|
||||
USER_LIST.addAll(userMaintainRequest.getSuccessList());
|
||||
}
|
||||
|
||||
private void checkUserList() throws Exception {
|
||||
|
@ -1245,7 +1253,7 @@ public class UserControllerTests extends BaseTest {
|
|||
return returnList;
|
||||
}
|
||||
|
||||
public void testUserInviteSuccess() throws Exception {
|
||||
void testUserInviteSuccess() throws Exception {
|
||||
UserInviteRequest userInviteRequest = UserParamUtils.getUserInviteRequest(
|
||||
USER_ROLE_LIST,
|
||||
new ArrayList<>() {{
|
||||
|
@ -1253,19 +1261,18 @@ public class UserControllerTests extends BaseTest {
|
|||
add("tianyang.song.invite.2@test.email");
|
||||
}}
|
||||
);
|
||||
MvcResult mvcResult = userRequestUtils.responsePost(UserRequestUtils.URL_INVITE, userInviteRequest);
|
||||
String resultHolderStr = mvcResult.getResponse().getContentAsString(StandardCharsets.UTF_8);
|
||||
ResultHolder resultHolder = JSON.parseObject(resultHolderStr, ResultHolder.class);
|
||||
UserInviteResponse response = JSON.parseObject(JSON.toJSONString(resultHolder.getData()), UserInviteResponse.class);
|
||||
Assertions.assertEquals(2, response.getInviteIds().size());
|
||||
//检查日志 此处日志的资源是邀请的用户,即admin
|
||||
LOG_CHECK_LIST.add(
|
||||
new CheckLogModel("admin", OperationLogType.ADD, UserRequestUtils.URL_INVITE)
|
||||
);
|
||||
//这里无法测试邮箱是否发出,所以不针对结果进行校验
|
||||
this.requestPost(UserRequestUtils.URL_INVITE, userInviteRequest);
|
||||
|
||||
List<UserInvite> inviteList = userInviteService.batchInsert(userInviteRequest.getInviteEmails(), "admin", userInviteRequest.getUserRoleIds());
|
||||
UserInviteResponse response = new UserInviteResponse(inviteList);
|
||||
INVITE_RECORD_ID_LIST.addAll(response.getInviteIds());
|
||||
}
|
||||
|
||||
public void testUserInviteError() throws Exception {
|
||||
@Resource
|
||||
private UserInviteService userInviteService;
|
||||
|
||||
void testUserInviteError() throws Exception {
|
||||
List<String> inviteEmailList = new ArrayList<>() {{
|
||||
add("tianyang.song.invite.error.1@test.email");
|
||||
add("tianyang.song.invite.error.2@test.email");
|
||||
|
@ -1319,12 +1326,12 @@ public class UserControllerTests extends BaseTest {
|
|||
USER_ROLE_LIST,
|
||||
inviteEmailList
|
||||
);
|
||||
userInviteRequest.getInviteEmails().add(USER_LIST.get(0).getEmail());
|
||||
userInviteRequest.getInviteEmails().add(USER_LIST.getFirst().getEmail());
|
||||
userRequestUtils.requestPost(UserRequestUtils.URL_INVITE, userInviteRequest, ERROR_REQUEST_MATCHER);
|
||||
}
|
||||
|
||||
private void testUserRegisterSuccess() throws Exception {
|
||||
String inviteId = INVITE_RECORD_ID_LIST.get(0);
|
||||
String inviteId = INVITE_RECORD_ID_LIST.getFirst();
|
||||
UserRegisterRequest request = new UserRegisterRequest();
|
||||
request.setInviteId(inviteId);
|
||||
request.setName("建国通过邮箱邀请");
|
||||
|
@ -1392,7 +1399,7 @@ public class UserControllerTests extends BaseTest {
|
|||
userInviteMapper.updateByPrimaryKeySelective(invite);
|
||||
|
||||
String insertEmail = invite.getEmail();
|
||||
UserBatchCreateDTO userMaintainRequest = UserParamUtils.getUserCreateDTO(
|
||||
UserBatchCreateRequest userMaintainRequest = UserParamUtils.getUserCreateDTO(
|
||||
USER_ROLE_LIST,
|
||||
new ArrayList<>() {{
|
||||
add(new UserCreateInfo() {{
|
||||
|
|
|
@ -2,16 +2,16 @@ package io.metersphere.system.utils.user;
|
|||
|
||||
import io.metersphere.sdk.constants.UserRoleScope;
|
||||
import io.metersphere.sdk.constants.UserRoleType;
|
||||
import io.metersphere.system.dto.sdk.BasePageRequest;
|
||||
import io.metersphere.system.dto.user.UserDTO;
|
||||
import io.metersphere.sdk.util.BeanUtils;
|
||||
import io.metersphere.system.domain.UserRole;
|
||||
import io.metersphere.system.dto.UserBatchCreateDTO;
|
||||
import io.metersphere.system.dto.UserCreateInfo;
|
||||
import io.metersphere.system.dto.request.UserInviteRequest;
|
||||
import io.metersphere.system.dto.request.user.UserEditRequest;
|
||||
import io.metersphere.system.dto.response.UserImportResponse;
|
||||
import io.metersphere.system.dto.response.UserSelectOption;
|
||||
import io.metersphere.system.dto.sdk.BasePageRequest;
|
||||
import io.metersphere.system.dto.user.UserCreateInfo;
|
||||
import io.metersphere.system.dto.user.UserDTO;
|
||||
import io.metersphere.system.dto.user.request.UserBatchCreateRequest;
|
||||
import io.metersphere.system.dto.user.response.UserImportResponse;
|
||||
import io.metersphere.system.dto.user.response.UserSelectOption;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
|
@ -23,10 +23,10 @@ import java.util.stream.Collectors;
|
|||
|
||||
public class UserParamUtils {
|
||||
|
||||
public static UserBatchCreateDTO getUserCreateDTO(
|
||||
public static UserBatchCreateRequest getUserCreateDTO(
|
||||
List<UserSelectOption> userRoleList,
|
||||
List<UserCreateInfo> userInfoList) {
|
||||
UserBatchCreateDTO userMaintainRequest = new UserBatchCreateDTO();
|
||||
UserBatchCreateRequest userMaintainRequest = new UserBatchCreateRequest();
|
||||
if (CollectionUtils.isNotEmpty(userRoleList)) {
|
||||
userMaintainRequest.setUserRoleIdList(
|
||||
userRoleList.stream().map(UserSelectOption::getId).collect(Collectors.toList()));
|
||||
|
|
Loading…
Reference in New Issue