package cn.iocoder.yudao.module.system.service.user; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.springframework.boot.test.mock.mockito.MockBean; import javax.annotation.Resource; import cn.iocoder.yudao.module.framework.test.core.ut.BaseDbUnitTest; import cn.iocoder.yudao.module.system.controller.admin.user.vo.*; import cn.iocoder.yudao.module.system.dal.dataobject.user.SystemUserDO; import cn.iocoder.yudao.module.system.dal.mysql.user.SystemUserMapper; import cn.iocoder.yudao.framework.common.pojo.PageResult; import javax.annotation.Resource; import org.springframework.context.annotation.Import; import java.util.*; import java.time.LocalDateTime; import static cn.hutool.core.util.RandomUtil.*; import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; import static cn.iocoder.yudao.module.framework.test.core.util.AssertUtils.*; import static cn.iocoder.yudao.module.framework.test.core.util.RandomUtils.*; import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.*; import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.*; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.*; import static org.junit.jupiter.api.Assertions.*; import static org.mockito.Mockito.*; /** * {@link SystemUserServiceImpl} 的单元测试类 * * @author 芋道源码 */ @Import(SystemUserServiceImpl.class) public class SystemUserServiceImplTest extends BaseDbUnitTest { @Resource private SystemUserServiceImpl userService; @Resource private SystemUserMapper userMapper; @Test public void testCreateUser_success() { // 准备参数 SystemUserCreateReqVO reqVO = randomPojo(SystemUserCreateReqVO.class); // 调用 Long userId = userService.createUser(reqVO); // 断言 assertNotNull(userId); // 校验记录的属性是否正确 SystemUserDO user = userMapper.selectById(userId); assertPojoEquals(reqVO, user); } @Test public void testUpdateUser_success() { // mock 数据 SystemUserDO dbUser = randomPojo(SystemUserDO.class); userMapper.insert(dbUser);// @Sql: 先插入出一条存在的数据 // 准备参数 SystemUserUpdateReqVO reqVO = randomPojo(SystemUserUpdateReqVO.class, o -> { o.setId(dbUser.getId()); // 设置更新的 ID }); // 调用 userService.updateUser(reqVO); // 校验是否更新正确 SystemUserDO user = userMapper.selectById(reqVO.getId()); // 获取最新的 assertPojoEquals(reqVO, user); } @Test public void testUpdateUser_notExists() { // 准备参数 SystemUserUpdateReqVO reqVO = randomPojo(SystemUserUpdateReqVO.class); // 调用, 并断言异常 assertServiceException(() -> userService.updateUser(reqVO), USER_NOT_EXISTS); } @Test public void testDeleteUser_success() { // mock 数据 SystemUserDO dbUser = randomPojo(SystemUserDO.class); userMapper.insert(dbUser);// @Sql: 先插入出一条存在的数据 // 准备参数 Long id = dbUser.getId(); // 调用 userService.deleteUser(id); // 校验数据不存在了 assertNull(userMapper.selectById(id)); } @Test public void testDeleteUser_notExists() { // 准备参数 Long id = randomLongId(); // 调用, 并断言异常 assertServiceException(() -> userService.deleteUser(id), USER_NOT_EXISTS); } @Test @Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解 public void testGetUserPage() { // mock 数据 SystemUserDO dbUser = randomPojo(SystemUserDO.class, o -> { // 等会查询到 o.setName(null); o.setSex1(null); o.setSex2(null); o.setSex3(null); o.setBirthday(null); o.setCreateTime(null); }); userMapper.insert(dbUser); // 测试 name 不匹配 userMapper.insert(cloneIgnoreId(dbUser, o -> o.setName(null))); // 测试 sex1 不匹配 userMapper.insert(cloneIgnoreId(dbUser, o -> o.setSex1(null))); // 测试 sex2 不匹配 userMapper.insert(cloneIgnoreId(dbUser, o -> o.setSex2(null))); // 测试 sex3 不匹配 userMapper.insert(cloneIgnoreId(dbUser, o -> o.setSex3(null))); // 测试 birthday 不匹配 userMapper.insert(cloneIgnoreId(dbUser, o -> o.setBirthday(null))); // 测试 createTime 不匹配 userMapper.insert(cloneIgnoreId(dbUser, o -> o.setCreateTime(null))); // 准备参数 SystemUserPageReqVO reqVO = new SystemUserPageReqVO(); reqVO.setName(null); reqVO.setSex1(null); reqVO.setSex2(null); reqVO.setSex3(null); reqVO.setBirthday(null); reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); // 调用 PageResult pageResult = userService.getUserPage(reqVO); // 断言 assertEquals(1, pageResult.getTotal()); assertEquals(1, pageResult.getList().size()); assertPojoEquals(dbUser, pageResult.getList().get(0)); } @Test @Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解 public void testGetUserList() { // mock 数据 SystemUserDO dbUser = randomPojo(SystemUserDO.class, o -> { // 等会查询到 o.setName(null); o.setSex1(null); o.setSex2(null); o.setSex3(null); o.setBirthday(null); o.setCreateTime(null); }); userMapper.insert(dbUser); // 测试 name 不匹配 userMapper.insert(cloneIgnoreId(dbUser, o -> o.setName(null))); // 测试 sex1 不匹配 userMapper.insert(cloneIgnoreId(dbUser, o -> o.setSex1(null))); // 测试 sex2 不匹配 userMapper.insert(cloneIgnoreId(dbUser, o -> o.setSex2(null))); // 测试 sex3 不匹配 userMapper.insert(cloneIgnoreId(dbUser, o -> o.setSex3(null))); // 测试 birthday 不匹配 userMapper.insert(cloneIgnoreId(dbUser, o -> o.setBirthday(null))); // 测试 createTime 不匹配 userMapper.insert(cloneIgnoreId(dbUser, o -> o.setCreateTime(null))); // 准备参数 SystemUserExportReqVO reqVO = new SystemUserExportReqVO(); reqVO.setName(null); reqVO.setSex1(null); reqVO.setSex2(null); reqVO.setSex3(null); reqVO.setBirthday(null); reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); // 调用 List list = userService.getUserList(reqVO); // 断言 assertEquals(1, list.size()); assertPojoEquals(dbUser, list.get(0)); } }