Commit cf3cfdd2d6c2967a9fc1c12f155330ebe93a6804

Authored by YunaiV
1 parent c845f3f0

补全用户与岗位的关联的单元测试,简化相关的实现代码

yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/dept/UserPostDO.java
1 package cn.iocoder.yudao.module.system.dal.dataobject.dept; 1 package cn.iocoder.yudao.module.system.dal.dataobject.dept;
2 2
3 import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; 3 import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
4 -import com.baomidou.mybatisplus.annotation.DbType; 4 +import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
5 import com.baomidou.mybatisplus.annotation.KeySequence; 5 import com.baomidou.mybatisplus.annotation.KeySequence;
6 import com.baomidou.mybatisplus.annotation.TableId; 6 import com.baomidou.mybatisplus.annotation.TableId;
7 import com.baomidou.mybatisplus.annotation.TableName; 7 import com.baomidou.mybatisplus.annotation.TableName;
@@ -14,6 +14,7 @@ import lombok.EqualsAndHashCode; @@ -14,6 +14,7 @@ import lombok.EqualsAndHashCode;
14 * @author ruoyi 14 * @author ruoyi
15 */ 15 */
16 @TableName("system_user_post") 16 @TableName("system_user_post")
  17 +@KeySequence("system_user_post_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
17 @Data 18 @Data
18 @EqualsAndHashCode(callSuper = true) 19 @EqualsAndHashCode(callSuper = true)
19 public class UserPostDO extends BaseDO { 20 public class UserPostDO extends BaseDO {
@@ -25,10 +26,14 @@ public class UserPostDO extends BaseDO { @@ -25,10 +26,14 @@ public class UserPostDO extends BaseDO {
25 private Long id; 26 private Long id;
26 /** 27 /**
27 * 用户 ID 28 * 用户 ID
  29 + *
  30 + * 关联 {@link AdminUserDO#getId()}
28 */ 31 */
29 private Long userId; 32 private Long userId;
30 /** 33 /**
31 * 角色 ID 34 * 角色 ID
  35 + *
  36 + * 关联 {@link PostDO#getId()}
32 */ 37 */
33 private Long postId; 38 private Long postId;
34 39
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/dept/UserPostMapper.java
@@ -12,9 +12,9 @@ import java.util.List; @@ -12,9 +12,9 @@ import java.util.List;
12 @Mapper 12 @Mapper
13 public interface UserPostMapper extends BaseMapperX<UserPostDO> { 13 public interface UserPostMapper extends BaseMapperX<UserPostDO> {
14 14
15 - default List<UserPostDO> selectIdList(Long id) { 15 + default List<UserPostDO> selectListByUserId(Long userId) {
16 return selectList(new LambdaQueryWrapperX<UserPostDO>() 16 return selectList(new LambdaQueryWrapperX<UserPostDO>()
17 - .eq(UserPostDO::getUserId, id)); 17 + .eq(UserPostDO::getUserId, userId));
18 } 18 }
19 19
20 default void deleteByUserIdAndPostId(Long userId, Collection<Long> postIds) { 20 default void deleteByUserIdAndPostId(Long userId, Collection<Long> postIds) {
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java
@@ -11,12 +11,7 @@ import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; @@ -11,12 +11,7 @@ import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
11 import cn.iocoder.yudao.module.infra.api.file.FileApi; 11 import cn.iocoder.yudao.module.infra.api.file.FileApi;
12 import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdatePasswordReqVO; 12 import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdatePasswordReqVO;
13 import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdateReqVO; 13 import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdateReqVO;
14 -import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserCreateReqVO;  
15 -import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserExportReqVO;  
16 -import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserImportExcelVO;  
17 -import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserImportRespVO;  
18 -import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserPageReqVO;  
19 -import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserUpdateReqVO; 14 +import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.*;
20 import cn.iocoder.yudao.module.system.convert.user.UserConvert; 15 import cn.iocoder.yudao.module.system.convert.user.UserConvert;
21 import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO; 16 import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO;
22 import cn.iocoder.yudao.module.system.dal.dataobject.dept.UserPostDO; 17 import cn.iocoder.yudao.module.system.dal.dataobject.dept.UserPostDO;
@@ -36,25 +31,12 @@ import org.springframework.transaction.annotation.Transactional; @@ -36,25 +31,12 @@ import org.springframework.transaction.annotation.Transactional;
36 31
37 import javax.annotation.Resource; 32 import javax.annotation.Resource;
38 import java.io.InputStream; 33 import java.io.InputStream;
39 -import java.util.ArrayList;  
40 -import java.util.Collection;  
41 -import java.util.Collections;  
42 -import java.util.Date;  
43 -import java.util.LinkedHashMap;  
44 -import java.util.List;  
45 -import java.util.Map;  
46 -import java.util.Set;  
47 -import java.util.stream.Collectors; 34 +import java.util.*;
48 35
49 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; 36 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
50 -import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.USER_COUNT_MAX;  
51 -import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.USER_EMAIL_EXISTS;  
52 -import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.USER_IMPORT_LIST_IS_EMPTY;  
53 -import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.USER_IS_DISABLE;  
54 -import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.USER_MOBILE_EXISTS;  
55 -import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.USER_NOT_EXISTS;  
56 -import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.USER_PASSWORD_FAILED;  
57 -import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.USER_USERNAME_EXISTS; 37 +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList;
  38 +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
  39 +import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*;
58 40
59 /** 41 /**
60 * 后台用户 Service 实现类 42 * 后台用户 Service 实现类
@@ -98,22 +80,17 @@ public class AdminUserServiceImpl implements AdminUserService { @@ -98,22 +80,17 @@ public class AdminUserServiceImpl implements AdminUserService {
98 } 80 }
99 }); 81 });
100 // 校验正确性 82 // 校验正确性
101 - this.checkCreateOrUpdate(null, reqVO.getUsername(), reqVO.getMobile(), reqVO.getEmail(), 83 + checkCreateOrUpdate(null, reqVO.getUsername(), reqVO.getMobile(), reqVO.getEmail(),
102 reqVO.getDeptId(), reqVO.getPostIds()); 84 reqVO.getDeptId(), reqVO.getPostIds());
103 // 插入用户 85 // 插入用户
104 AdminUserDO user = UserConvert.INSTANCE.convert(reqVO); 86 AdminUserDO user = UserConvert.INSTANCE.convert(reqVO);
105 user.setStatus(CommonStatusEnum.ENABLE.getStatus()); // 默认开启 87 user.setStatus(CommonStatusEnum.ENABLE.getStatus()); // 默认开启
106 user.setPassword(passwordEncoder.encode(reqVO.getPassword())); // 加密密码 88 user.setPassword(passwordEncoder.encode(reqVO.getPassword())); // 加密密码
107 userMapper.insert(user); 89 userMapper.insert(user);
108 - Set<Long> postIds = user.getPostIds();  
109 - if (CollectionUtil.isNotEmpty(postIds)) {  
110 - List<UserPostDO> insertUserPostList = CollectionUtils.convertList(postIds, postId -> {  
111 - UserPostDO entity = new UserPostDO();  
112 - entity.setUserId(user.getId());  
113 - entity.setPostId(postId);  
114 - return entity;  
115 - });  
116 - userPostMapper.insertBatch(insertUserPostList); 90 + // 插入关联岗位
  91 + if (CollectionUtil.isNotEmpty(user.getPostIds())) {
  92 + userPostMapper.insertBatch(convertList(user.getPostIds(),
  93 + postId -> new UserPostDO().setUserId(user.getId()).setPostId(postId)));
117 } 94 }
118 return user.getId(); 95 return user.getId();
119 } 96 }
@@ -122,48 +99,32 @@ public class AdminUserServiceImpl implements AdminUserService { @@ -122,48 +99,32 @@ public class AdminUserServiceImpl implements AdminUserService {
122 @Transactional(rollbackFor = Exception.class) 99 @Transactional(rollbackFor = Exception.class)
123 public void updateUser(UserUpdateReqVO reqVO) { 100 public void updateUser(UserUpdateReqVO reqVO) {
124 // 校验正确性 101 // 校验正确性
125 - this.checkCreateOrUpdate(reqVO.getId(), reqVO.getUsername(), reqVO.getMobile(), reqVO.getEmail(), 102 + checkCreateOrUpdate(reqVO.getId(), reqVO.getUsername(), reqVO.getMobile(), reqVO.getEmail(),
126 reqVO.getDeptId(), reqVO.getPostIds()); 103 reqVO.getDeptId(), reqVO.getPostIds());
127 // 更新用户 104 // 更新用户
128 AdminUserDO updateObj = UserConvert.INSTANCE.convert(reqVO); 105 AdminUserDO updateObj = UserConvert.INSTANCE.convert(reqVO);
129 userMapper.updateById(updateObj); 106 userMapper.updateById(updateObj);
130 // 更新岗位 107 // 更新岗位
131 updateUserPost(reqVO, updateObj); 108 updateUserPost(reqVO, updateObj);
132 -  
133 } 109 }
134 110
135 private void updateUserPost(UserUpdateReqVO reqVO, AdminUserDO updateObj) { 111 private void updateUserPost(UserUpdateReqVO reqVO, AdminUserDO updateObj) {
136 - Set<Long> postIds = updateObj.getPostIds();  
137 Long userId = reqVO.getId(); 112 Long userId = reqVO.getId();
138 - List<Long> dbPostIds = userPostMapper.selectIdList(userId)  
139 - .stream()  
140 - .map(UserPostDO::getPostId)  
141 - .collect(Collectors.toList()); 113 + Set<Long> dbPostIds = convertSet(userPostMapper.selectListByUserId(userId), UserPostDO::getPostId);
142 // 计算新增和删除的岗位编号 114 // 计算新增和删除的岗位编号
  115 + Set<Long> postIds = updateObj.getPostIds();
143 Collection<Long> createPostIds = CollUtil.subtract(postIds, dbPostIds); 116 Collection<Long> createPostIds = CollUtil.subtract(postIds, dbPostIds);
144 Collection<Long> deletePostIds = CollUtil.subtract(dbPostIds, postIds); 117 Collection<Long> deletePostIds = CollUtil.subtract(dbPostIds, postIds);
145 // 执行新增和删除。对于已经授权的菜单,不用做任何处理 118 // 执行新增和删除。对于已经授权的菜单,不用做任何处理
146 if (!CollectionUtil.isEmpty(createPostIds)) { 119 if (!CollectionUtil.isEmpty(createPostIds)) {
147 - List<UserPostDO> list = createUserPost(userId, createPostIds);  
148 - userPostMapper.insertBatch(list); 120 + userPostMapper.insertBatch(convertList(createPostIds,
  121 + postId -> new UserPostDO().setUserId(userId).setPostId(postId)));
149 } 122 }
150 if (!CollectionUtil.isEmpty(deletePostIds)) { 123 if (!CollectionUtil.isEmpty(deletePostIds)) {
151 userPostMapper.deleteByUserIdAndPostId(userId, deletePostIds); 124 userPostMapper.deleteByUserIdAndPostId(userId, deletePostIds);
152 } 125 }
153 } 126 }
154 127
155 - private List<UserPostDO> createUserPost(Long userId, Collection<Long> createPostIds) {  
156 - return createPostIds  
157 - .stream()  
158 - .map(postId -> {  
159 - UserPostDO entity = new UserPostDO();  
160 - entity.setUserId(userId);  
161 - entity.setPostId(postId);  
162 - return entity;  
163 - })  
164 - .collect(Collectors.toList());  
165 - }  
166 -  
167 @Override 128 @Override
168 public void updateUserLogin(Long id, String loginIp) { 129 public void updateUserLogin(Long id, String loginIp) {
169 userMapper.updateById(new AdminUserDO().setId(id).setLoginIp(loginIp).setLoginDate(new Date())); 130 userMapper.updateById(new AdminUserDO().setId(id).setLoginIp(loginIp).setLoginDate(new Date()));
@@ -172,9 +133,9 @@ public class AdminUserServiceImpl implements AdminUserService { @@ -172,9 +133,9 @@ public class AdminUserServiceImpl implements AdminUserService {
172 @Override 133 @Override
173 public void updateUserProfile(Long id, UserProfileUpdateReqVO reqVO) { 134 public void updateUserProfile(Long id, UserProfileUpdateReqVO reqVO) {
174 // 校验正确性 135 // 校验正确性
175 - this.checkUserExists(id);  
176 - this.checkEmailUnique(id, reqVO.getEmail());  
177 - this.checkMobileUnique(id, reqVO.getMobile()); 136 + checkUserExists(id);
  137 + checkEmailUnique(id, reqVO.getEmail());
  138 + checkMobileUnique(id, reqVO.getMobile());
178 // 执行更新 139 // 执行更新
179 userMapper.updateById(UserConvert.INSTANCE.convert(reqVO).setId(id)); 140 userMapper.updateById(UserConvert.INSTANCE.convert(reqVO).setId(id));
180 } 141 }
@@ -182,7 +143,7 @@ public class AdminUserServiceImpl implements AdminUserService { @@ -182,7 +143,7 @@ public class AdminUserServiceImpl implements AdminUserService {
182 @Override 143 @Override
183 public void updateUserPassword(Long id, UserProfileUpdatePasswordReqVO reqVO) { 144 public void updateUserPassword(Long id, UserProfileUpdatePasswordReqVO reqVO) {
184 // 校验旧密码密码 145 // 校验旧密码密码
185 - this.checkOldPassword(id, reqVO.getOldPassword()); 146 + checkOldPassword(id, reqVO.getOldPassword());
186 // 执行更新 147 // 执行更新
187 AdminUserDO updateObj = new AdminUserDO().setId(id); 148 AdminUserDO updateObj = new AdminUserDO().setId(id);
188 updateObj.setPassword(passwordEncoder.encode(reqVO.getNewPassword())); // 加密密码 149 updateObj.setPassword(passwordEncoder.encode(reqVO.getNewPassword())); // 加密密码
@@ -191,7 +152,7 @@ public class AdminUserServiceImpl implements AdminUserService { @@ -191,7 +152,7 @@ public class AdminUserServiceImpl implements AdminUserService {
191 152
192 @Override 153 @Override
193 public String updateUserAvatar(Long id, InputStream avatarFile) throws Exception { 154 public String updateUserAvatar(Long id, InputStream avatarFile) throws Exception {
194 - this.checkUserExists(id); 155 + checkUserExists(id);
195 // 存储文件 156 // 存储文件
196 String avatar = fileApi.createFile(IoUtil.readBytes(avatarFile)); 157 String avatar = fileApi.createFile(IoUtil.readBytes(avatarFile));
197 // 更新路径 158 // 更新路径
@@ -205,7 +166,7 @@ public class AdminUserServiceImpl implements AdminUserService { @@ -205,7 +166,7 @@ public class AdminUserServiceImpl implements AdminUserService {
205 @Override 166 @Override
206 public void updateUserPassword(Long id, String password) { 167 public void updateUserPassword(Long id, String password) {
207 // 校验用户存在 168 // 校验用户存在
208 - this.checkUserExists(id); 169 + checkUserExists(id);
209 // 更新密码 170 // 更新密码
210 AdminUserDO updateObj = new AdminUserDO(); 171 AdminUserDO updateObj = new AdminUserDO();
211 updateObj.setId(id); 172 updateObj.setId(id);
@@ -216,7 +177,7 @@ public class AdminUserServiceImpl implements AdminUserService { @@ -216,7 +177,7 @@ public class AdminUserServiceImpl implements AdminUserService {
216 @Override 177 @Override
217 public void updateUserStatus(Long id, Integer status) { 178 public void updateUserStatus(Long id, Integer status) {
218 // 校验用户存在 179 // 校验用户存在
219 - this.checkUserExists(id); 180 + checkUserExists(id);
220 // 更新状态 181 // 更新状态
221 AdminUserDO updateObj = new AdminUserDO(); 182 AdminUserDO updateObj = new AdminUserDO();
222 updateObj.setId(id); 183 updateObj.setId(id);
@@ -228,7 +189,7 @@ public class AdminUserServiceImpl implements AdminUserService { @@ -228,7 +189,7 @@ public class AdminUserServiceImpl implements AdminUserService {
228 @Transactional(rollbackFor = Exception.class) 189 @Transactional(rollbackFor = Exception.class)
229 public void deleteUser(Long id) { 190 public void deleteUser(Long id) {
230 // 校验用户存在 191 // 校验用户存在
231 - this.checkUserExists(id); 192 + checkUserExists(id);
232 // 删除用户 193 // 删除用户
233 userMapper.deleteById(id); 194 userMapper.deleteById(id);
234 // 删除用户关联数据 195 // 删除用户关联数据
@@ -244,7 +205,7 @@ public class AdminUserServiceImpl implements AdminUserService { @@ -244,7 +205,7 @@ public class AdminUserServiceImpl implements AdminUserService {
244 205
245 @Override 206 @Override
246 public PageResult<AdminUserDO> getUserPage(UserPageReqVO reqVO) { 207 public PageResult<AdminUserDO> getUserPage(UserPageReqVO reqVO) {
247 - return userMapper.selectPage(reqVO, this.getDeptCondition(reqVO.getDeptId())); 208 + return userMapper.selectPage(reqVO, getDeptCondition(reqVO.getDeptId()));
248 } 209 }
249 210
250 @Override 211 @Override
@@ -265,15 +226,11 @@ public class AdminUserServiceImpl implements AdminUserService { @@ -265,15 +226,11 @@ public class AdminUserServiceImpl implements AdminUserService {
265 if (CollUtil.isEmpty(postIds)) { 226 if (CollUtil.isEmpty(postIds)) {
266 return Collections.emptyList(); 227 return Collections.emptyList();
267 } 228 }
268 - List<Long> userIdList = userPostMapper.selectListByPostIds(postIds)  
269 - .stream()  
270 - .map(UserPostDO::getUserId)  
271 - .distinct()  
272 - .collect(Collectors.toList());;  
273 - if (userIdList.isEmpty()) { 229 + Set<Long> userIds = convertSet(userPostMapper.selectListByPostIds(postIds), UserPostDO::getUserId);
  230 + if (CollUtil.isEmpty(userIds)) {
274 return Collections.emptyList(); 231 return Collections.emptyList();
275 } 232 }
276 - return userMapper.selectBatchIds(userIdList); 233 + return userMapper.selectBatchIds(userIds);
277 } 234 }
278 235
279 @Override 236 @Override
@@ -306,7 +263,7 @@ public class AdminUserServiceImpl implements AdminUserService { @@ -306,7 +263,7 @@ public class AdminUserServiceImpl implements AdminUserService {
306 263
307 @Override 264 @Override
308 public List<AdminUserDO> getUsers(UserExportReqVO reqVO) { 265 public List<AdminUserDO> getUsers(UserExportReqVO reqVO) {
309 - return userMapper.selectList(reqVO, this.getDeptCondition(reqVO.getDeptId())); 266 + return userMapper.selectList(reqVO, getDeptCondition(reqVO.getDeptId()));
310 } 267 }
311 268
312 @Override 269 @Override
@@ -328,7 +285,7 @@ public class AdminUserServiceImpl implements AdminUserService { @@ -328,7 +285,7 @@ public class AdminUserServiceImpl implements AdminUserService {
328 if (deptId == null) { 285 if (deptId == null) {
329 return Collections.emptySet(); 286 return Collections.emptySet();
330 } 287 }
331 - Set<Long> deptIds = CollectionUtils.convertSet(deptService.getDeptsByParentIdFromCache( 288 + Set<Long> deptIds = convertSet(deptService.getDeptsByParentIdFromCache(
332 deptId, true), DeptDO::getId); 289 deptId, true), DeptDO::getId);
333 deptIds.add(deptId); // 包括自身 290 deptIds.add(deptId); // 包括自身
334 return deptIds; 291 return deptIds;
@@ -337,13 +294,13 @@ public class AdminUserServiceImpl implements AdminUserService { @@ -337,13 +294,13 @@ public class AdminUserServiceImpl implements AdminUserService {
337 private void checkCreateOrUpdate(Long id, String username, String mobile, String email, 294 private void checkCreateOrUpdate(Long id, String username, String mobile, String email,
338 Long deptId, Set<Long> postIds) { 295 Long deptId, Set<Long> postIds) {
339 // 校验用户存在 296 // 校验用户存在
340 - this.checkUserExists(id); 297 + checkUserExists(id);
341 // 校验用户名唯一 298 // 校验用户名唯一
342 - this.checkUsernameUnique(id, username); 299 + checkUsernameUnique(id, username);
343 // 校验手机号唯一 300 // 校验手机号唯一
344 - this.checkMobileUnique(id, mobile); 301 + checkMobileUnique(id, mobile);
345 // 校验邮箱唯一 302 // 校验邮箱唯一
346 - this.checkEmailUnique(id, email); 303 + checkEmailUnique(id, email);
347 // 校验部门处于开启状态 304 // 校验部门处于开启状态
348 deptService.validDepts(CollectionUtils.singleton(deptId)); 305 deptService.validDepts(CollectionUtils.singleton(deptId));
349 // 校验岗位处于开启状态 306 // 校验岗位处于开启状态
yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/service/user/UserServiceImplTest.java renamed to yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImplTest.java
@@ -7,21 +7,23 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult; @@ -7,21 +7,23 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult;
7 import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils; 7 import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils;
8 import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; 8 import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
9 import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; 9 import cn.iocoder.yudao.framework.common.util.object.ObjectUtils;
  10 +import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
10 import cn.iocoder.yudao.module.infra.api.file.FileApi; 11 import cn.iocoder.yudao.module.infra.api.file.FileApi;
11 import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdatePasswordReqVO; 12 import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdatePasswordReqVO;
12 import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdateReqVO; 13 import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdateReqVO;
13 import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.*; 14 import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.*;
14 import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO; 15 import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO;
15 import cn.iocoder.yudao.module.system.dal.dataobject.dept.PostDO; 16 import cn.iocoder.yudao.module.system.dal.dataobject.dept.PostDO;
  17 +import cn.iocoder.yudao.module.system.dal.dataobject.dept.UserPostDO;
16 import cn.iocoder.yudao.module.system.dal.dataobject.tenant.TenantDO; 18 import cn.iocoder.yudao.module.system.dal.dataobject.tenant.TenantDO;
17 import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; 19 import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
  20 +import cn.iocoder.yudao.module.system.dal.mysql.dept.UserPostMapper;
18 import cn.iocoder.yudao.module.system.dal.mysql.user.AdminUserMapper; 21 import cn.iocoder.yudao.module.system.dal.mysql.user.AdminUserMapper;
19 import cn.iocoder.yudao.module.system.enums.common.SexEnum; 22 import cn.iocoder.yudao.module.system.enums.common.SexEnum;
20 import cn.iocoder.yudao.module.system.service.dept.DeptService; 23 import cn.iocoder.yudao.module.system.service.dept.DeptService;
21 import cn.iocoder.yudao.module.system.service.dept.PostService; 24 import cn.iocoder.yudao.module.system.service.dept.PostService;
22 import cn.iocoder.yudao.module.system.service.permission.PermissionService; 25 import cn.iocoder.yudao.module.system.service.permission.PermissionService;
23 import cn.iocoder.yudao.module.system.service.tenant.TenantService; 26 import cn.iocoder.yudao.module.system.service.tenant.TenantService;
24 -import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;  
25 import org.junit.jupiter.api.Test; 27 import org.junit.jupiter.api.Test;
26 import org.mockito.stubbing.Answer; 28 import org.mockito.stubbing.Answer;
27 import org.springframework.boot.test.mock.mockito.MockBean; 29 import org.springframework.boot.test.mock.mockito.MockBean;
@@ -30,16 +32,19 @@ import org.springframework.security.crypto.password.PasswordEncoder; @@ -30,16 +32,19 @@ import org.springframework.security.crypto.password.PasswordEncoder;
30 32
31 import javax.annotation.Resource; 33 import javax.annotation.Resource;
32 import java.io.ByteArrayInputStream; 34 import java.io.ByteArrayInputStream;
  35 +import java.util.Collection;
33 import java.util.List; 36 import java.util.List;
34 import java.util.function.Consumer; 37 import java.util.function.Consumer;
35 38
36 import static cn.hutool.core.util.RandomUtil.randomBytes; 39 import static cn.hutool.core.util.RandomUtil.randomBytes;
37 import static cn.hutool.core.util.RandomUtil.randomEle; 40 import static cn.hutool.core.util.RandomUtil.randomEle;
  41 +import static cn.iocoder.yudao.framework.common.util.collection.SetUtils.asSet;
38 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.buildTime; 42 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.buildTime;
39 import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; 43 import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals;
40 import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; 44 import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException;
41 import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; 45 import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*;
42 import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; 46 import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*;
  47 +import static java.util.Collections.singleton;
43 import static org.assertj.core.util.Lists.newArrayList; 48 import static org.assertj.core.util.Lists.newArrayList;
44 import static org.junit.jupiter.api.Assertions.assertEquals; 49 import static org.junit.jupiter.api.Assertions.assertEquals;
45 import static org.junit.jupiter.api.Assertions.assertNull; 50 import static org.junit.jupiter.api.Assertions.assertNull;
@@ -47,13 +52,15 @@ import static org.mockito.ArgumentMatchers.*; @@ -47,13 +52,15 @@ import static org.mockito.ArgumentMatchers.*;
47 import static org.mockito.Mockito.*; 52 import static org.mockito.Mockito.*;
48 53
49 @Import(AdminUserServiceImpl.class) 54 @Import(AdminUserServiceImpl.class)
50 -public class UserServiceImplTest extends BaseDbUnitTest { 55 +public class AdminUserServiceImplTest extends BaseDbUnitTest {
51 56
52 @Resource 57 @Resource
53 private AdminUserServiceImpl userService; 58 private AdminUserServiceImpl userService;
54 59
55 @Resource 60 @Resource
56 private AdminUserMapper userMapper; 61 private AdminUserMapper userMapper;
  62 + @Resource
  63 + private UserPostMapper userPostMapper;
57 64
58 @MockBean 65 @MockBean
59 private DeptService deptService; 66 private DeptService deptService;
@@ -74,6 +81,7 @@ public class UserServiceImplTest extends BaseDbUnitTest { @@ -74,6 +81,7 @@ public class UserServiceImplTest extends BaseDbUnitTest {
74 UserCreateReqVO reqVO = randomPojo(UserCreateReqVO.class, o -> { 81 UserCreateReqVO reqVO = randomPojo(UserCreateReqVO.class, o -> {
75 o.setSex(RandomUtil.randomEle(SexEnum.values()).getSex()); 82 o.setSex(RandomUtil.randomEle(SexEnum.values()).getSex());
76 o.setMobile(randomString()); 83 o.setMobile(randomString());
  84 + o.setPostIds(asSet(1L, 2L));
77 }); 85 });
78 // mock 账户额度充足 86 // mock 账户额度充足
79 TenantDO tenant = randomPojo(TenantDO.class, o -> o.setAccountCount(1)); 87 TenantDO tenant = randomPojo(TenantDO.class, o -> o.setAccountCount(1));
@@ -104,6 +112,10 @@ public class UserServiceImplTest extends BaseDbUnitTest { @@ -104,6 +112,10 @@ public class UserServiceImplTest extends BaseDbUnitTest {
104 assertPojoEquals(reqVO, user, "password"); 112 assertPojoEquals(reqVO, user, "password");
105 assertEquals("yudaoyuanma", user.getPassword()); 113 assertEquals("yudaoyuanma", user.getPassword());
106 assertEquals(CommonStatusEnum.ENABLE.getStatus(), user.getStatus()); 114 assertEquals(CommonStatusEnum.ENABLE.getStatus(), user.getStatus());
  115 + // 断言关联岗位
  116 + List<UserPostDO> userPosts = userPostMapper.selectListByUserId(user.getId());
  117 + assertEquals(1L, userPosts.get(0).getPostId());
  118 + assertEquals(2L, userPosts.get(1).getPostId());
107 } 119 }
108 120
109 @Test 121 @Test
@@ -124,13 +136,16 @@ public class UserServiceImplTest extends BaseDbUnitTest { @@ -124,13 +136,16 @@ public class UserServiceImplTest extends BaseDbUnitTest {
124 @Test 136 @Test
125 public void testUpdateUser_success() { 137 public void testUpdateUser_success() {
126 // mock 数据 138 // mock 数据
127 - AdminUserDO dbUser = randomAdminUserDO(); 139 + AdminUserDO dbUser = randomAdminUserDO(o -> o.setPostIds(asSet(1L, 2L)));
128 userMapper.insert(dbUser); 140 userMapper.insert(dbUser);
  141 + userPostMapper.insert(new UserPostDO().setUserId(dbUser.getId()).setPostId(1L));
  142 + userPostMapper.insert(new UserPostDO().setUserId(dbUser.getId()).setPostId(2L));
129 // 准备参数 143 // 准备参数
130 UserUpdateReqVO reqVO = randomPojo(UserUpdateReqVO.class, o -> { 144 UserUpdateReqVO reqVO = randomPojo(UserUpdateReqVO.class, o -> {
131 o.setId(dbUser.getId()); 145 o.setId(dbUser.getId());
132 o.setSex(RandomUtil.randomEle(SexEnum.values()).getSex()); 146 o.setSex(RandomUtil.randomEle(SexEnum.values()).getSex());
133 o.setMobile(randomString()); 147 o.setMobile(randomString());
  148 + o.setPostIds(asSet(2L, 3L));
134 }); 149 });
135 // mock deptService 的方法 150 // mock deptService 的方法
136 DeptDO dept = randomPojo(DeptDO.class, o -> { 151 DeptDO dept = randomPojo(DeptDO.class, o -> {
@@ -151,6 +166,10 @@ public class UserServiceImplTest extends BaseDbUnitTest { @@ -151,6 +166,10 @@ public class UserServiceImplTest extends BaseDbUnitTest {
151 // 断言 166 // 断言
152 AdminUserDO user = userMapper.selectById(reqVO.getId()); 167 AdminUserDO user = userMapper.selectById(reqVO.getId());
153 assertPojoEquals(reqVO, user); 168 assertPojoEquals(reqVO, user);
  169 + // 断言关联岗位
  170 + List<UserPostDO> userPosts = userPostMapper.selectListByUserId(user.getId());
  171 + assertEquals(2L, userPosts.get(0).getPostId());
  172 + assertEquals(3L, userPosts.get(1).getPostId());
154 } 173 }
155 174
156 @Test 175 @Test
@@ -552,22 +571,26 @@ public class UserServiceImplTest extends BaseDbUnitTest { @@ -552,22 +571,26 @@ public class UserServiceImplTest extends BaseDbUnitTest {
552 verify(passwordEncoder, times(1)).matches(eq(oldPassword), eq(user.getPassword())); 571 verify(passwordEncoder, times(1)).matches(eq(oldPassword), eq(user.getPassword()));
553 } 572 }
554 573
555 -// @Test //TODO jason 已经移到userCoreService.getUsersByPostIds  
556 -// public void testUsersByPostIds() {  
557 -// // 准备参数  
558 -// Collection<Long> postIds = asSet(10L, 20L);  
559 -// // mock 方法  
560 -// AdminUserDO user1 = randomAdminUserDO(o -> o.setPostIds(asSet(10L, 30L)));  
561 -// userMapper.insert(user1);  
562 -// AdminUserDO user2 = randomAdminUserDO(o -> o.setPostIds(singleton(100L)));  
563 -// userMapper.insert(user2);  
564 -//  
565 -// // 调用  
566 -// List<AdminUserDO> result = userService.getUsersByPostIds(postIds);  
567 -// // 断言  
568 -// assertEquals(1, result.size());  
569 -// assertEquals(user1, result.get(0));  
570 -// } 574 + @Test
  575 + public void testUsersByPostIds() {
  576 + // 准备参数
  577 + Collection<Long> postIds = asSet(10L, 20L);
  578 + // mock user1 数据
  579 + AdminUserDO user1 = randomAdminUserDO(o -> o.setPostIds(asSet(10L, 30L)));
  580 + userMapper.insert(user1);
  581 + userPostMapper.insert(new UserPostDO().setUserId(user1.getId()).setPostId(10L));
  582 + userPostMapper.insert(new UserPostDO().setUserId(user1.getId()).setPostId(30L));
  583 + // mock user2 数据
  584 + AdminUserDO user2 = randomAdminUserDO(o -> o.setPostIds(singleton(100L)));
  585 + userMapper.insert(user2);
  586 + userPostMapper.insert(new UserPostDO().setUserId(user2.getId()).setPostId(100L));
  587 +
  588 + // 调用
  589 + List<AdminUserDO> result = userService.getUsersByPostIds(postIds);
  590 + // 断言
  591 + assertEquals(1, result.size());
  592 + assertEquals(user1, result.get(0));
  593 + }
571 594
572 // ========== 随机对象 ========== 595 // ========== 随机对象 ==========
573 596
yudao-module-system/yudao-module-system-biz/src/test/resources/sql/clean.sql
@@ -10,7 +10,7 @@ DELETE FROM &quot;system_user_session&quot;; @@ -10,7 +10,7 @@ DELETE FROM &quot;system_user_session&quot;;
10 DELETE FROM "system_post"; 10 DELETE FROM "system_post";
11 DELETE FROM "system_login_log"; 11 DELETE FROM "system_login_log";
12 DELETE FROM "system_operate_log"; 12 DELETE FROM "system_operate_log";
13 -DELETE FROM "system_user"; 13 +DELETE FROM "system_users";
14 DELETE FROM "system_sms_channel"; 14 DELETE FROM "system_sms_channel";
15 DELETE FROM "system_sms_template"; 15 DELETE FROM "system_sms_template";
16 DELETE FROM "system_sms_log"; 16 DELETE FROM "system_sms_log";
yudao-module-system/yudao-module-system-biz/src/test/resources/sql/create_tables.sql
@@ -225,7 +225,7 @@ CREATE TABLE IF NOT EXISTS `system_operate_log` ( @@ -225,7 +225,7 @@ CREATE TABLE IF NOT EXISTS `system_operate_log` (
225 PRIMARY KEY (`id`) 225 PRIMARY KEY (`id`)
226 ) COMMENT ='操作日志记录'; 226 ) COMMENT ='操作日志记录';
227 227
228 -CREATE TABLE IF NOT EXISTS "system_user" ( 228 +CREATE TABLE IF NOT EXISTS "system_users" (
229 "id" bigint not null GENERATED BY DEFAULT AS IDENTITY, 229 "id" bigint not null GENERATED BY DEFAULT AS IDENTITY,
230 "username" varchar(30) not null, 230 "username" varchar(30) not null,
231 "password" varchar(100) not null default '', 231 "password" varchar(100) not null default '',