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

pull/2/head
YunaiV 2022-05-02 15:59:38 +08:00
parent c845f3f012
commit cf3cfdd2d6
6 changed files with 85 additions and 100 deletions

View File

@ -1,7 +1,7 @@
package cn.iocoder.yudao.module.system.dal.dataobject.dept; package cn.iocoder.yudao.module.system.dal.dataobject.dept;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import com.baomidou.mybatisplus.annotation.DbType; import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
import com.baomidou.mybatisplus.annotation.KeySequence; import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
@ -14,6 +14,7 @@ import lombok.EqualsAndHashCode;
* @author ruoyi * @author ruoyi
*/ */
@TableName("system_user_post") @TableName("system_user_post")
@KeySequence("system_user_post_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
@Data @Data
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
public class UserPostDO extends BaseDO { public class UserPostDO extends BaseDO {
@ -25,10 +26,14 @@ public class UserPostDO extends BaseDO {
private Long id; private Long id;
/** /**
* ID * ID
*
* {@link AdminUserDO#getId()}
*/ */
private Long userId; private Long userId;
/** /**
* ID * ID
*
* {@link PostDO#getId()}
*/ */
private Long postId; private Long postId;

View File

@ -12,9 +12,9 @@ import java.util.List;
@Mapper @Mapper
public interface UserPostMapper extends BaseMapperX<UserPostDO> { public interface UserPostMapper extends BaseMapperX<UserPostDO> {
default List<UserPostDO> selectIdList(Long id) { default List<UserPostDO> selectListByUserId(Long userId) {
return selectList(new LambdaQueryWrapperX<UserPostDO>() return selectList(new LambdaQueryWrapperX<UserPostDO>()
.eq(UserPostDO::getUserId, id)); .eq(UserPostDO::getUserId, userId));
} }
default void deleteByUserIdAndPostId(Long userId, Collection<Long> postIds) { default void deleteByUserIdAndPostId(Long userId, Collection<Long> postIds) {

View File

@ -11,12 +11,7 @@ import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
import cn.iocoder.yudao.module.infra.api.file.FileApi; import cn.iocoder.yudao.module.infra.api.file.FileApi;
import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdatePasswordReqVO; import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdatePasswordReqVO;
import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdateReqVO; import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdateReqVO;
import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserCreateReqVO; import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.*;
import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserExportReqVO;
import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserImportExcelVO;
import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserImportRespVO;
import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserPageReqVO;
import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserUpdateReqVO;
import cn.iocoder.yudao.module.system.convert.user.UserConvert; import cn.iocoder.yudao.module.system.convert.user.UserConvert;
import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO; import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO;
import cn.iocoder.yudao.module.system.dal.dataobject.dept.UserPostDO; import cn.iocoder.yudao.module.system.dal.dataobject.dept.UserPostDO;
@ -36,25 +31,12 @@ import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.io.InputStream; import java.io.InputStream;
import java.util.ArrayList; import java.util.*;
import java.util.Collection;
import java.util.Collections;
import java.util.Date;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.USER_COUNT_MAX; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList;
import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.USER_EMAIL_EXISTS; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.USER_IMPORT_LIST_IS_EMPTY; import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*;
import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.USER_IS_DISABLE;
import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.USER_MOBILE_EXISTS;
import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.USER_NOT_EXISTS;
import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.USER_PASSWORD_FAILED;
import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.USER_USERNAME_EXISTS;
/** /**
* Service * Service
@ -98,22 +80,17 @@ public class AdminUserServiceImpl implements AdminUserService {
} }
}); });
// 校验正确性 // 校验正确性
this.checkCreateOrUpdate(null, reqVO.getUsername(), reqVO.getMobile(), reqVO.getEmail(), checkCreateOrUpdate(null, reqVO.getUsername(), reqVO.getMobile(), reqVO.getEmail(),
reqVO.getDeptId(), reqVO.getPostIds()); reqVO.getDeptId(), reqVO.getPostIds());
// 插入用户 // 插入用户
AdminUserDO user = UserConvert.INSTANCE.convert(reqVO); AdminUserDO user = UserConvert.INSTANCE.convert(reqVO);
user.setStatus(CommonStatusEnum.ENABLE.getStatus()); // 默认开启 user.setStatus(CommonStatusEnum.ENABLE.getStatus()); // 默认开启
user.setPassword(passwordEncoder.encode(reqVO.getPassword())); // 加密密码 user.setPassword(passwordEncoder.encode(reqVO.getPassword())); // 加密密码
userMapper.insert(user); userMapper.insert(user);
Set<Long> postIds = user.getPostIds(); // 插入关联岗位
if (CollectionUtil.isNotEmpty(postIds)) { if (CollectionUtil.isNotEmpty(user.getPostIds())) {
List<UserPostDO> insertUserPostList = CollectionUtils.convertList(postIds, postId -> { userPostMapper.insertBatch(convertList(user.getPostIds(),
UserPostDO entity = new UserPostDO(); postId -> new UserPostDO().setUserId(user.getId()).setPostId(postId)));
entity.setUserId(user.getId());
entity.setPostId(postId);
return entity;
});
userPostMapper.insertBatch(insertUserPostList);
} }
return user.getId(); return user.getId();
} }
@ -122,48 +99,32 @@ public class AdminUserServiceImpl implements AdminUserService {
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void updateUser(UserUpdateReqVO reqVO) { public void updateUser(UserUpdateReqVO reqVO) {
// 校验正确性 // 校验正确性
this.checkCreateOrUpdate(reqVO.getId(), reqVO.getUsername(), reqVO.getMobile(), reqVO.getEmail(), checkCreateOrUpdate(reqVO.getId(), reqVO.getUsername(), reqVO.getMobile(), reqVO.getEmail(),
reqVO.getDeptId(), reqVO.getPostIds()); reqVO.getDeptId(), reqVO.getPostIds());
// 更新用户 // 更新用户
AdminUserDO updateObj = UserConvert.INSTANCE.convert(reqVO); AdminUserDO updateObj = UserConvert.INSTANCE.convert(reqVO);
userMapper.updateById(updateObj); userMapper.updateById(updateObj);
// 更新岗位 // 更新岗位
updateUserPost(reqVO, updateObj); updateUserPost(reqVO, updateObj);
} }
private void updateUserPost(UserUpdateReqVO reqVO, AdminUserDO updateObj) { private void updateUserPost(UserUpdateReqVO reqVO, AdminUserDO updateObj) {
Set<Long> postIds = updateObj.getPostIds();
Long userId = reqVO.getId(); Long userId = reqVO.getId();
List<Long> dbPostIds = userPostMapper.selectIdList(userId) Set<Long> dbPostIds = convertSet(userPostMapper.selectListByUserId(userId), UserPostDO::getPostId);
.stream()
.map(UserPostDO::getPostId)
.collect(Collectors.toList());
// 计算新增和删除的岗位编号 // 计算新增和删除的岗位编号
Set<Long> postIds = updateObj.getPostIds();
Collection<Long> createPostIds = CollUtil.subtract(postIds, dbPostIds); Collection<Long> createPostIds = CollUtil.subtract(postIds, dbPostIds);
Collection<Long> deletePostIds = CollUtil.subtract(dbPostIds, postIds); Collection<Long> deletePostIds = CollUtil.subtract(dbPostIds, postIds);
// 执行新增和删除。对于已经授权的菜单,不用做任何处理 // 执行新增和删除。对于已经授权的菜单,不用做任何处理
if (!CollectionUtil.isEmpty(createPostIds)) { if (!CollectionUtil.isEmpty(createPostIds)) {
List<UserPostDO> list = createUserPost(userId, createPostIds); userPostMapper.insertBatch(convertList(createPostIds,
userPostMapper.insertBatch(list); postId -> new UserPostDO().setUserId(userId).setPostId(postId)));
} }
if (!CollectionUtil.isEmpty(deletePostIds)) { if (!CollectionUtil.isEmpty(deletePostIds)) {
userPostMapper.deleteByUserIdAndPostId(userId, deletePostIds); userPostMapper.deleteByUserIdAndPostId(userId, deletePostIds);
} }
} }
private List<UserPostDO> createUserPost(Long userId, Collection<Long> createPostIds) {
return createPostIds
.stream()
.map(postId -> {
UserPostDO entity = new UserPostDO();
entity.setUserId(userId);
entity.setPostId(postId);
return entity;
})
.collect(Collectors.toList());
}
@Override @Override
public void updateUserLogin(Long id, String loginIp) { public void updateUserLogin(Long id, String loginIp) {
userMapper.updateById(new AdminUserDO().setId(id).setLoginIp(loginIp).setLoginDate(new Date())); userMapper.updateById(new AdminUserDO().setId(id).setLoginIp(loginIp).setLoginDate(new Date()));
@ -172,9 +133,9 @@ public class AdminUserServiceImpl implements AdminUserService {
@Override @Override
public void updateUserProfile(Long id, UserProfileUpdateReqVO reqVO) { public void updateUserProfile(Long id, UserProfileUpdateReqVO reqVO) {
// 校验正确性 // 校验正确性
this.checkUserExists(id); checkUserExists(id);
this.checkEmailUnique(id, reqVO.getEmail()); checkEmailUnique(id, reqVO.getEmail());
this.checkMobileUnique(id, reqVO.getMobile()); checkMobileUnique(id, reqVO.getMobile());
// 执行更新 // 执行更新
userMapper.updateById(UserConvert.INSTANCE.convert(reqVO).setId(id)); userMapper.updateById(UserConvert.INSTANCE.convert(reqVO).setId(id));
} }
@ -182,7 +143,7 @@ public class AdminUserServiceImpl implements AdminUserService {
@Override @Override
public void updateUserPassword(Long id, UserProfileUpdatePasswordReqVO reqVO) { public void updateUserPassword(Long id, UserProfileUpdatePasswordReqVO reqVO) {
// 校验旧密码密码 // 校验旧密码密码
this.checkOldPassword(id, reqVO.getOldPassword()); checkOldPassword(id, reqVO.getOldPassword());
// 执行更新 // 执行更新
AdminUserDO updateObj = new AdminUserDO().setId(id); AdminUserDO updateObj = new AdminUserDO().setId(id);
updateObj.setPassword(passwordEncoder.encode(reqVO.getNewPassword())); // 加密密码 updateObj.setPassword(passwordEncoder.encode(reqVO.getNewPassword())); // 加密密码
@ -191,7 +152,7 @@ public class AdminUserServiceImpl implements AdminUserService {
@Override @Override
public String updateUserAvatar(Long id, InputStream avatarFile) throws Exception { public String updateUserAvatar(Long id, InputStream avatarFile) throws Exception {
this.checkUserExists(id); checkUserExists(id);
// 存储文件 // 存储文件
String avatar = fileApi.createFile(IoUtil.readBytes(avatarFile)); String avatar = fileApi.createFile(IoUtil.readBytes(avatarFile));
// 更新路径 // 更新路径
@ -205,7 +166,7 @@ public class AdminUserServiceImpl implements AdminUserService {
@Override @Override
public void updateUserPassword(Long id, String password) { public void updateUserPassword(Long id, String password) {
// 校验用户存在 // 校验用户存在
this.checkUserExists(id); checkUserExists(id);
// 更新密码 // 更新密码
AdminUserDO updateObj = new AdminUserDO(); AdminUserDO updateObj = new AdminUserDO();
updateObj.setId(id); updateObj.setId(id);
@ -216,7 +177,7 @@ public class AdminUserServiceImpl implements AdminUserService {
@Override @Override
public void updateUserStatus(Long id, Integer status) { public void updateUserStatus(Long id, Integer status) {
// 校验用户存在 // 校验用户存在
this.checkUserExists(id); checkUserExists(id);
// 更新状态 // 更新状态
AdminUserDO updateObj = new AdminUserDO(); AdminUserDO updateObj = new AdminUserDO();
updateObj.setId(id); updateObj.setId(id);
@ -228,7 +189,7 @@ public class AdminUserServiceImpl implements AdminUserService {
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void deleteUser(Long id) { public void deleteUser(Long id) {
// 校验用户存在 // 校验用户存在
this.checkUserExists(id); checkUserExists(id);
// 删除用户 // 删除用户
userMapper.deleteById(id); userMapper.deleteById(id);
// 删除用户关联数据 // 删除用户关联数据
@ -244,7 +205,7 @@ public class AdminUserServiceImpl implements AdminUserService {
@Override @Override
public PageResult<AdminUserDO> getUserPage(UserPageReqVO reqVO) { public PageResult<AdminUserDO> getUserPage(UserPageReqVO reqVO) {
return userMapper.selectPage(reqVO, this.getDeptCondition(reqVO.getDeptId())); return userMapper.selectPage(reqVO, getDeptCondition(reqVO.getDeptId()));
} }
@Override @Override
@ -265,15 +226,11 @@ public class AdminUserServiceImpl implements AdminUserService {
if (CollUtil.isEmpty(postIds)) { if (CollUtil.isEmpty(postIds)) {
return Collections.emptyList(); return Collections.emptyList();
} }
List<Long> userIdList = userPostMapper.selectListByPostIds(postIds) Set<Long> userIds = convertSet(userPostMapper.selectListByPostIds(postIds), UserPostDO::getUserId);
.stream() if (CollUtil.isEmpty(userIds)) {
.map(UserPostDO::getUserId)
.distinct()
.collect(Collectors.toList());;
if (userIdList.isEmpty()) {
return Collections.emptyList(); return Collections.emptyList();
} }
return userMapper.selectBatchIds(userIdList); return userMapper.selectBatchIds(userIds);
} }
@Override @Override
@ -306,7 +263,7 @@ public class AdminUserServiceImpl implements AdminUserService {
@Override @Override
public List<AdminUserDO> getUsers(UserExportReqVO reqVO) { public List<AdminUserDO> getUsers(UserExportReqVO reqVO) {
return userMapper.selectList(reqVO, this.getDeptCondition(reqVO.getDeptId())); return userMapper.selectList(reqVO, getDeptCondition(reqVO.getDeptId()));
} }
@Override @Override
@ -328,7 +285,7 @@ public class AdminUserServiceImpl implements AdminUserService {
if (deptId == null) { if (deptId == null) {
return Collections.emptySet(); return Collections.emptySet();
} }
Set<Long> deptIds = CollectionUtils.convertSet(deptService.getDeptsByParentIdFromCache( Set<Long> deptIds = convertSet(deptService.getDeptsByParentIdFromCache(
deptId, true), DeptDO::getId); deptId, true), DeptDO::getId);
deptIds.add(deptId); // 包括自身 deptIds.add(deptId); // 包括自身
return deptIds; return deptIds;
@ -337,13 +294,13 @@ public class AdminUserServiceImpl implements AdminUserService {
private void checkCreateOrUpdate(Long id, String username, String mobile, String email, private void checkCreateOrUpdate(Long id, String username, String mobile, String email,
Long deptId, Set<Long> postIds) { Long deptId, Set<Long> postIds) {
// 校验用户存在 // 校验用户存在
this.checkUserExists(id); checkUserExists(id);
// 校验用户名唯一 // 校验用户名唯一
this.checkUsernameUnique(id, username); checkUsernameUnique(id, username);
// 校验手机号唯一 // 校验手机号唯一
this.checkMobileUnique(id, mobile); checkMobileUnique(id, mobile);
// 校验邮箱唯一 // 校验邮箱唯一
this.checkEmailUnique(id, email); checkEmailUnique(id, email);
// 校验部门处于开启状态 // 校验部门处于开启状态
deptService.validDepts(CollectionUtils.singleton(deptId)); deptService.validDepts(CollectionUtils.singleton(deptId));
// 校验岗位处于开启状态 // 校验岗位处于开启状态

View File

@ -7,21 +7,23 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils; import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils;
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; import cn.iocoder.yudao.framework.common.util.object.ObjectUtils;
import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
import cn.iocoder.yudao.module.infra.api.file.FileApi; import cn.iocoder.yudao.module.infra.api.file.FileApi;
import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdatePasswordReqVO; import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdatePasswordReqVO;
import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdateReqVO; import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdateReqVO;
import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.*; import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.*;
import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO; import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO;
import cn.iocoder.yudao.module.system.dal.dataobject.dept.PostDO; import cn.iocoder.yudao.module.system.dal.dataobject.dept.PostDO;
import cn.iocoder.yudao.module.system.dal.dataobject.dept.UserPostDO;
import cn.iocoder.yudao.module.system.dal.dataobject.tenant.TenantDO; import cn.iocoder.yudao.module.system.dal.dataobject.tenant.TenantDO;
import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
import cn.iocoder.yudao.module.system.dal.mysql.dept.UserPostMapper;
import cn.iocoder.yudao.module.system.dal.mysql.user.AdminUserMapper; import cn.iocoder.yudao.module.system.dal.mysql.user.AdminUserMapper;
import cn.iocoder.yudao.module.system.enums.common.SexEnum; import cn.iocoder.yudao.module.system.enums.common.SexEnum;
import cn.iocoder.yudao.module.system.service.dept.DeptService; import cn.iocoder.yudao.module.system.service.dept.DeptService;
import cn.iocoder.yudao.module.system.service.dept.PostService; import cn.iocoder.yudao.module.system.service.dept.PostService;
import cn.iocoder.yudao.module.system.service.permission.PermissionService; import cn.iocoder.yudao.module.system.service.permission.PermissionService;
import cn.iocoder.yudao.module.system.service.tenant.TenantService; import cn.iocoder.yudao.module.system.service.tenant.TenantService;
import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.mockito.stubbing.Answer; import org.mockito.stubbing.Answer;
import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.boot.test.mock.mockito.MockBean;
@ -30,16 +32,19 @@ import org.springframework.security.crypto.password.PasswordEncoder;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.io.ByteArrayInputStream; import java.io.ByteArrayInputStream;
import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.function.Consumer; import java.util.function.Consumer;
import static cn.hutool.core.util.RandomUtil.randomBytes; import static cn.hutool.core.util.RandomUtil.randomBytes;
import static cn.hutool.core.util.RandomUtil.randomEle; import static cn.hutool.core.util.RandomUtil.randomEle;
import static cn.iocoder.yudao.framework.common.util.collection.SetUtils.asSet;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.buildTime; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.buildTime;
import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals;
import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException;
import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*;
import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*;
import static java.util.Collections.singleton;
import static org.assertj.core.util.Lists.newArrayList; import static org.assertj.core.util.Lists.newArrayList;
import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertNull;
@ -47,13 +52,15 @@ import static org.mockito.ArgumentMatchers.*;
import static org.mockito.Mockito.*; import static org.mockito.Mockito.*;
@Import(AdminUserServiceImpl.class) @Import(AdminUserServiceImpl.class)
public class UserServiceImplTest extends BaseDbUnitTest { public class AdminUserServiceImplTest extends BaseDbUnitTest {
@Resource @Resource
private AdminUserServiceImpl userService; private AdminUserServiceImpl userService;
@Resource @Resource
private AdminUserMapper userMapper; private AdminUserMapper userMapper;
@Resource
private UserPostMapper userPostMapper;
@MockBean @MockBean
private DeptService deptService; private DeptService deptService;
@ -74,6 +81,7 @@ public class UserServiceImplTest extends BaseDbUnitTest {
UserCreateReqVO reqVO = randomPojo(UserCreateReqVO.class, o -> { UserCreateReqVO reqVO = randomPojo(UserCreateReqVO.class, o -> {
o.setSex(RandomUtil.randomEle(SexEnum.values()).getSex()); o.setSex(RandomUtil.randomEle(SexEnum.values()).getSex());
o.setMobile(randomString()); o.setMobile(randomString());
o.setPostIds(asSet(1L, 2L));
}); });
// mock 账户额度充足 // mock 账户额度充足
TenantDO tenant = randomPojo(TenantDO.class, o -> o.setAccountCount(1)); TenantDO tenant = randomPojo(TenantDO.class, o -> o.setAccountCount(1));
@ -104,6 +112,10 @@ public class UserServiceImplTest extends BaseDbUnitTest {
assertPojoEquals(reqVO, user, "password"); assertPojoEquals(reqVO, user, "password");
assertEquals("yudaoyuanma", user.getPassword()); assertEquals("yudaoyuanma", user.getPassword());
assertEquals(CommonStatusEnum.ENABLE.getStatus(), user.getStatus()); assertEquals(CommonStatusEnum.ENABLE.getStatus(), user.getStatus());
// 断言关联岗位
List<UserPostDO> userPosts = userPostMapper.selectListByUserId(user.getId());
assertEquals(1L, userPosts.get(0).getPostId());
assertEquals(2L, userPosts.get(1).getPostId());
} }
@Test @Test
@ -124,13 +136,16 @@ public class UserServiceImplTest extends BaseDbUnitTest {
@Test @Test
public void testUpdateUser_success() { public void testUpdateUser_success() {
// mock 数据 // mock 数据
AdminUserDO dbUser = randomAdminUserDO(); AdminUserDO dbUser = randomAdminUserDO(o -> o.setPostIds(asSet(1L, 2L)));
userMapper.insert(dbUser); userMapper.insert(dbUser);
userPostMapper.insert(new UserPostDO().setUserId(dbUser.getId()).setPostId(1L));
userPostMapper.insert(new UserPostDO().setUserId(dbUser.getId()).setPostId(2L));
// 准备参数 // 准备参数
UserUpdateReqVO reqVO = randomPojo(UserUpdateReqVO.class, o -> { UserUpdateReqVO reqVO = randomPojo(UserUpdateReqVO.class, o -> {
o.setId(dbUser.getId()); o.setId(dbUser.getId());
o.setSex(RandomUtil.randomEle(SexEnum.values()).getSex()); o.setSex(RandomUtil.randomEle(SexEnum.values()).getSex());
o.setMobile(randomString()); o.setMobile(randomString());
o.setPostIds(asSet(2L, 3L));
}); });
// mock deptService 的方法 // mock deptService 的方法
DeptDO dept = randomPojo(DeptDO.class, o -> { DeptDO dept = randomPojo(DeptDO.class, o -> {
@ -151,6 +166,10 @@ public class UserServiceImplTest extends BaseDbUnitTest {
// 断言 // 断言
AdminUserDO user = userMapper.selectById(reqVO.getId()); AdminUserDO user = userMapper.selectById(reqVO.getId());
assertPojoEquals(reqVO, user); assertPojoEquals(reqVO, user);
// 断言关联岗位
List<UserPostDO> userPosts = userPostMapper.selectListByUserId(user.getId());
assertEquals(2L, userPosts.get(0).getPostId());
assertEquals(3L, userPosts.get(1).getPostId());
} }
@Test @Test
@ -552,22 +571,26 @@ public class UserServiceImplTest extends BaseDbUnitTest {
verify(passwordEncoder, times(1)).matches(eq(oldPassword), eq(user.getPassword())); verify(passwordEncoder, times(1)).matches(eq(oldPassword), eq(user.getPassword()));
} }
// @Test //TODO jason 已经移到userCoreService.getUsersByPostIds @Test
// public void testUsersByPostIds() { public void testUsersByPostIds() {
// // 准备参数 // 准备参数
// Collection<Long> postIds = asSet(10L, 20L); Collection<Long> postIds = asSet(10L, 20L);
// // mock 方法 // mock user1 数据
// AdminUserDO user1 = randomAdminUserDO(o -> o.setPostIds(asSet(10L, 30L))); AdminUserDO user1 = randomAdminUserDO(o -> o.setPostIds(asSet(10L, 30L)));
// userMapper.insert(user1); userMapper.insert(user1);
// AdminUserDO user2 = randomAdminUserDO(o -> o.setPostIds(singleton(100L))); userPostMapper.insert(new UserPostDO().setUserId(user1.getId()).setPostId(10L));
// userMapper.insert(user2); userPostMapper.insert(new UserPostDO().setUserId(user1.getId()).setPostId(30L));
// // mock user2 数据
// // 调用 AdminUserDO user2 = randomAdminUserDO(o -> o.setPostIds(singleton(100L)));
// List<AdminUserDO> result = userService.getUsersByPostIds(postIds); userMapper.insert(user2);
// // 断言 userPostMapper.insert(new UserPostDO().setUserId(user2.getId()).setPostId(100L));
// assertEquals(1, result.size());
// assertEquals(user1, result.get(0)); // 调用
// } List<AdminUserDO> result = userService.getUsersByPostIds(postIds);
// 断言
assertEquals(1, result.size());
assertEquals(user1, result.get(0));
}
// ========== 随机对象 ========== // ========== 随机对象 ==========

View File

@ -10,7 +10,7 @@ DELETE FROM "system_user_session";
DELETE FROM "system_post"; DELETE FROM "system_post";
DELETE FROM "system_login_log"; DELETE FROM "system_login_log";
DELETE FROM "system_operate_log"; DELETE FROM "system_operate_log";
DELETE FROM "system_user"; DELETE FROM "system_users";
DELETE FROM "system_sms_channel"; DELETE FROM "system_sms_channel";
DELETE FROM "system_sms_template"; DELETE FROM "system_sms_template";
DELETE FROM "system_sms_log"; DELETE FROM "system_sms_log";

View File

@ -225,7 +225,7 @@ CREATE TABLE IF NOT EXISTS `system_operate_log` (
PRIMARY KEY (`id`) PRIMARY KEY (`id`)
) COMMENT =''; ) COMMENT ='';
CREATE TABLE IF NOT EXISTS "system_user" ( CREATE TABLE IF NOT EXISTS "system_users" (
"id" bigint not null GENERATED BY DEFAULT AS IDENTITY, "id" bigint not null GENERATED BY DEFAULT AS IDENTITY,
"username" varchar(30) not null, "username" varchar(30) not null,
"password" varchar(100) not null default '', "password" varchar(100) not null default '',