package cn.trboy.ytly.module.system.service.user;
import cn.hutool.core.util.RandomUtil;
import cn.trboy.ytly.framework.common.enums.CommonStatusEnum;
import cn.trboy.ytly.framework.common.exception.ServiceException;
import cn.trboy.ytly.framework.common.pojo.PageResult;
import cn.trboy.ytly.framework.common.util.collection.ArrayUtils;
import cn.trboy.ytly.framework.common.util.collection.CollectionUtils;
import cn.trboy.ytly.framework.test.core.ut.BaseDbUnitTest;
import cn.trboy.ytly.module.infra.api.config.ConfigApi;
import cn.trboy.ytly.module.infra.api.file.FileApi;
import cn.trboy.ytly.module.system.controller.admin.user.vo.profile.UserProfileUpdatePasswordReqVO;
import cn.trboy.ytly.module.system.controller.admin.user.vo.profile.UserProfileUpdateReqVO;
import cn.trboy.ytly.module.system.controller.admin.user.vo.user.*;
import cn.trboy.ytly.module.system.dal.dataobject.dept.DeptDO;
import cn.trboy.ytly.module.system.dal.dataobject.dept.PostDO;
import cn.trboy.ytly.module.system.dal.dataobject.dept.UserPostDO;
import cn.trboy.ytly.module.system.dal.dataobject.tenant.TenantDO;
import cn.trboy.ytly.module.system.dal.dataobject.user.AdminUserDO;
import cn.trboy.ytly.module.system.dal.mysql.dept.UserPostMapper;
import cn.trboy.ytly.module.system.dal.mysql.user.AdminUserMapper;
import cn.trboy.ytly.module.system.enums.common.SexEnum;
import cn.trboy.ytly.module.system.service.dept.DeptService;
import cn.trboy.ytly.module.system.service.dept.PostService;
import cn.trboy.ytly.module.system.service.permission.PermissionService;
import cn.trboy.ytly.module.system.service.tenant.TenantService;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.stubbing.Answer;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.context.annotation.Import;
import org.springframework.security.crypto.password.PasswordEncoder;
import javax.annotation.Resource;
import java.io.ByteArrayInputStream;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.function.Consumer;
import static cn.hutool.core.util.RandomUtil.randomBytes;
import static cn.hutool.core.util.RandomUtil.randomEle;
import static cn.trboy.ytly.framework.common.util.collection.SetUtils.asSet;
import static cn.trboy.ytly.framework.common.util.date.LocalDateTimeUtils.buildBetweenTime;
import static cn.trboy.ytly.framework.common.util.date.LocalDateTimeUtils.buildTime;
import static cn.trboy.ytly.framework.common.util.object.ObjectUtils.cloneIgnoreId;
import static cn.trboy.ytly.framework.test.core.util.AssertUtils.assertPojoEquals;
import static cn.trboy.ytly.framework.test.core.util.AssertUtils.assertServiceException;
import static cn.trboy.ytly.framework.test.core.util.RandomUtils.*;
import static cn.trboy.ytly.module.system.enums.ErrorCodeConstants.*;
import static cn.trboy.ytly.module.system.service.user.AdminUserServiceImpl.USER_INIT_PASSWORD_KEY;
import static java.util.Collections.singleton;
import static java.util.Collections.singletonList;
import static org.assertj.core.util.Lists.newArrayList;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.ArgumentMatchers.*;
import static org.mockito.Mockito.*;
@Import(AdminUserServiceImpl.class)
public class AdminUserServiceImplTest extends BaseDbUnitTest {
@Resource
private AdminUserServiceImpl userService;
@Resource
private AdminUserMapper userMapper;
@Resource
private UserPostMapper userPostMapper;
@MockBean
private DeptService deptService;
@MockBean
private PostService postService;
@MockBean
private PermissionService permissionService;
@MockBean
private PasswordEncoder passwordEncoder;
@MockBean
private TenantService tenantService;
@MockBean
private FileApi fileApi;
@MockBean
private ConfigApi configApi;
@BeforeEach
public void before() {
// mock 初始化密码
when(configApi.getConfigValueByKey(USER_INIT_PASSWORD_KEY)).thenReturn("ytlyyuanma");
}
@Test
public void testCreatUser_success() {
// 准备参数
UserSaveReqVO reqVO = randomPojo(UserSaveReqVO.class, o -> {
o.setSex(RandomUtil.randomEle(SexEnum.values()).getSex());
o.setMobile(randomString());
o.setPostIds(asSet(1L, 2L));
}).setId(null); // 避免 id 被赋值
// mock 账户额度充足
TenantDO tenant = randomPojo(TenantDO.class, o -> o.setAccountCount(1));
doNothing().when(tenantService).handleTenantInfo(argThat(handler -> {
handler.handle(tenant);
return true;
}));
// mock deptService 的方法
DeptDO dept = randomPojo(DeptDO.class, o -> {
o.setId(reqVO.getDeptId());
o.setStatus(CommonStatusEnum.ENABLE.getStatus());
});
when(deptService.getDept(eq(dept.getId()))).thenReturn(dept);
// mock postService 的方法
List<PostDO> posts = CollectionUtils.convertList(reqVO.getPostIds(), postId ->
randomPojo(PostDO.class, o -> {
o.setId(postId);
o.setStatus(CommonStatusEnum.ENABLE.getStatus());
}));
when(postService.getPostList(eq(reqVO.getPostIds()), isNull())).thenReturn(posts);
// mock passwordEncoder 的方法
when(passwordEncoder.encode(eq(reqVO.getPassword()))).thenReturn("ytlyyuanma");
// 调用
Long userId = userService.createUser(reqVO);
// 断言
AdminUserDO user = userMapper.selectById(userId);
assertPojoEquals(reqVO, user, "password", "id");
assertEquals("ytlyyuanma", user.getPassword());
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
public void testCreatUser_max() {
// 准备参数
UserSaveReqVO reqVO = randomPojo(UserSaveReqVO.class);
// mock 账户额度不足
TenantDO tenant = randomPojo(TenantDO.class, o -> o.setAccountCount(-1));
doNothing().when(tenantService).handleTenantInfo(argThat(handler -> {
handler.handle(tenant);
return true;
}));
// 调用,并断言异常
assertServiceException(() -> userService.createUser(reqVO), USER_COUNT_MAX, -1);
}
@Test
public void testUpdateUser_success() {
// mock 数据
AdminUserDO dbUser = randomAdminUserDO(o -> o.setPostIds(asSet(1L, 2L)));
userMapper.insert(dbUser);
userPostMapper.insert(new UserPostDO().setUserId(dbUser.getId()).setPostId(1L));
userPostMapper.insert(new UserPostDO().setUserId(dbUser.getId()).setPostId(2L));
// 准备参数
UserSaveReqVO reqVO = randomPojo(UserSaveReqVO.class, o -> {
o.setId(dbUser.getId());
o.setSex(RandomUtil.randomEle(SexEnum.values()).getSex());
o.setMobile(randomString());
o.setPostIds(asSet(2L, 3L));
});
// mock deptService 的方法
DeptDO dept = randomPojo(DeptDO.class, o -> {
o.setId(reqVO.getDeptId());
o.setStatus(CommonStatusEnum.ENABLE.getStatus());
});
when(deptService.getDept(eq(dept.getId()))).thenReturn(dept);
// mock postService 的方法
List<PostDO> posts = CollectionUtils.convertList(reqVO.getPostIds(), postId ->
randomPojo(PostDO.class, o -> {
o.setId(postId);
o.setStatus(CommonStatusEnum.ENABLE.getStatus());
}));
when(postService.getPostList(eq(reqVO.getPostIds()), isNull())).thenReturn(posts);
// 调用
userService.updateUser(reqVO);
// 断言
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
该项目是一款基于Java语言的台球系统设计源码,共计1363个文件,包括964个Java源文件、36个VM文件、35个PNG图片文件、32个XML配置文件、23个Markdown文件、18个HTTP相关文件、14个JSON文件、12个导入语句文件、6个SQL文件、5个YAML配置文件。系统功能完善,旨在为用户提供便捷的台球管理服务。
资源推荐
资源详情
资源评论











收起资源包目录





































































































共 1364 条
- 1
- 2
- 3
- 4
- 5
- 6
- 14
资源评论


froginwe11
- 粉丝: 1566
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 【Android应用源码】网上绝无仅有的Log分析教程及例子.zip
- 【Android应用源码】微博客户端源代码.zip
- 【Android应用源码】网易新闻.zip
- 【Android应用源码】文本框可输入字符数量源码.zip
- 【Android应用源码】文件管理器源码,文件拖曳,list弹性,root ,zip压缩解.zip
- 【Android应用源码】我也模仿了Path效果,效果更接近iphone.zip
- 【Android应用源码】无线点餐系统.zip
- 【Android应用源码】五种不同的Toast效果.zip
- 【Android应用源码】五种效果的Toast.zip
- 【Android应用源码】物理传感器游戏-小球快跑源码.zip
- 【Android应用源码】系统原理与开 发要点详解_培训课件.zip
- 【Android应用源码】下拉刷新2.zip
- 【Android应用源码】下拉刷新.zip
- 【Android应用源码】下的加密信息客户端 WhisperSystems-TextSecure.zip
- 溴化锂吸收制冷技术中单效与双效系统的模拟研究及其应用
- 基于组态王与西门子S7-200 PLC的六层电梯控制系统设计与实现
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



安全验证
文档复制为VIP权益,开通VIP直接复制
