mirror of
				https://gitee.com/hhyykk/ipms-sjy.git
				synced 2025-11-04 12:18:42 +08:00 
			
		
		
		
	完成部分 SysUserServiceImplTest 单元测试
This commit is contained in:
		@@ -149,9 +149,9 @@ public class SysUserController {
 | 
			
		||||
        // 手动创建导出 demo
 | 
			
		||||
        List<SysUserImportExcelVO> list = Arrays.asList(
 | 
			
		||||
                SysUserImportExcelVO.builder().username("yudao").deptId(1L).email("yudao@iocoder.cn").mobile("15601691300")
 | 
			
		||||
                        .nickname("芋道").status(CommonStatusEnum.ENABLE.getStatus()).sex(SysSexEnum.MALE.getSEX()).build(),
 | 
			
		||||
                        .nickname("芋道").status(CommonStatusEnum.ENABLE.getStatus()).sex(SysSexEnum.MALE.getSex()).build(),
 | 
			
		||||
                SysUserImportExcelVO.builder().username("yuanma").deptId(2L).email("yuanma@iocoder.cn").mobile("15601701300")
 | 
			
		||||
                        .nickname("源码").status(CommonStatusEnum.DISABLE.getStatus()).sex(SysSexEnum.FEMALE.getSEX()).build()
 | 
			
		||||
                        .nickname("源码").status(CommonStatusEnum.DISABLE.getStatus()).sex(SysSexEnum.FEMALE.getSex()).build()
 | 
			
		||||
        );
 | 
			
		||||
 | 
			
		||||
        // 输出
 | 
			
		||||
 
 | 
			
		||||
@@ -3,9 +3,9 @@ package cn.iocoder.dashboard.modules.system.controller.user.vo.profile;
 | 
			
		||||
import io.swagger.annotations.ApiModel;
 | 
			
		||||
import io.swagger.annotations.ApiModelProperty;
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
import org.hibernate.validator.constraints.Length;
 | 
			
		||||
 | 
			
		||||
import javax.validation.constraints.Email;
 | 
			
		||||
import javax.validation.constraints.Pattern;
 | 
			
		||||
import javax.validation.constraints.Size;
 | 
			
		||||
 | 
			
		||||
@ApiModel("用户个人信息更新 Request VO")
 | 
			
		||||
@@ -22,7 +22,7 @@ public class SysUserProfileUpdateReqVO {
 | 
			
		||||
    private String email;
 | 
			
		||||
 | 
			
		||||
    @ApiModelProperty(value = "手机号码", example = "15601691300")
 | 
			
		||||
    @Pattern(regexp = "^1(3|4|5|7|8)\\d{9}$",message = "手机号码格式错误")
 | 
			
		||||
    @Length(min = 11, max = 11, message = "手机号长度必须 11 位")
 | 
			
		||||
    private String mobile;
 | 
			
		||||
 | 
			
		||||
    @ApiModelProperty(value = "用户性别", example = "1", notes = "参见 SysSexEnum 枚举类")
 | 
			
		||||
 
 | 
			
		||||
@@ -2,10 +2,10 @@ package cn.iocoder.dashboard.modules.system.controller.user.vo.user;
 | 
			
		||||
 | 
			
		||||
import io.swagger.annotations.ApiModelProperty;
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
import org.hibernate.validator.constraints.Length;
 | 
			
		||||
 | 
			
		||||
import javax.validation.constraints.Email;
 | 
			
		||||
import javax.validation.constraints.NotBlank;
 | 
			
		||||
import javax.validation.constraints.Pattern;
 | 
			
		||||
import javax.validation.constraints.Size;
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
 | 
			
		||||
@@ -40,7 +40,7 @@ public class SysUserBaseVO {
 | 
			
		||||
    private String email;
 | 
			
		||||
 | 
			
		||||
    @ApiModelProperty(value = "手机号码", example = "15601691300")
 | 
			
		||||
    @Pattern(regexp = "^1(3|4|5|7|8)\\d{9}$",message = "手机号码格式错误")
 | 
			
		||||
    @Length(min = 11, max = 11, message = "手机号长度必须 11 位")
 | 
			
		||||
    private String mobile;
 | 
			
		||||
 | 
			
		||||
    @ApiModelProperty(value = "用户性别", example = "1", notes = "参见 SysSexEnum 枚举类")
 | 
			
		||||
 
 | 
			
		||||
@@ -3,6 +3,11 @@ package cn.iocoder.dashboard.modules.system.enums.common;
 | 
			
		||||
import lombok.AllArgsConstructor;
 | 
			
		||||
import lombok.Getter;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 性别的枚举值
 | 
			
		||||
 *
 | 
			
		||||
 * @author 芋道源码
 | 
			
		||||
 */
 | 
			
		||||
@Getter
 | 
			
		||||
@AllArgsConstructor
 | 
			
		||||
public enum SysSexEnum {
 | 
			
		||||
@@ -10,6 +15,9 @@ public enum SysSexEnum {
 | 
			
		||||
    MALE(1), // 男
 | 
			
		||||
    FEMALE(2); // 女
 | 
			
		||||
 | 
			
		||||
    private final Integer SEX;
 | 
			
		||||
    /**
 | 
			
		||||
     * 性别
 | 
			
		||||
     */
 | 
			
		||||
    private final Integer sex;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -6,17 +6,11 @@ import cn.hutool.core.util.IdUtil;
 | 
			
		||||
import cn.hutool.core.util.StrUtil;
 | 
			
		||||
import cn.iocoder.dashboard.common.enums.CommonStatusEnum;
 | 
			
		||||
import cn.iocoder.dashboard.common.exception.ServiceException;
 | 
			
		||||
import cn.iocoder.dashboard.common.exception.util.ServiceExceptionUtil;
 | 
			
		||||
import cn.iocoder.dashboard.common.pojo.PageResult;
 | 
			
		||||
import cn.iocoder.dashboard.modules.infra.service.file.InfFileService;
 | 
			
		||||
import cn.iocoder.dashboard.modules.system.controller.user.vo.profile.SysUserProfileUpdatePasswordReqVO;
 | 
			
		||||
import cn.iocoder.dashboard.modules.system.controller.user.vo.profile.SysUserProfileUpdateReqVO;
 | 
			
		||||
import cn.iocoder.dashboard.modules.system.controller.user.vo.user.SysUserCreateReqVO;
 | 
			
		||||
import cn.iocoder.dashboard.modules.system.controller.user.vo.user.SysUserExportReqVO;
 | 
			
		||||
import cn.iocoder.dashboard.modules.system.controller.user.vo.user.SysUserImportExcelVO;
 | 
			
		||||
import cn.iocoder.dashboard.modules.system.controller.user.vo.user.SysUserImportRespVO;
 | 
			
		||||
import cn.iocoder.dashboard.modules.system.controller.user.vo.user.SysUserPageReqVO;
 | 
			
		||||
import cn.iocoder.dashboard.modules.system.controller.user.vo.user.SysUserUpdateReqVO;
 | 
			
		||||
import cn.iocoder.dashboard.modules.system.controller.user.vo.user.*;
 | 
			
		||||
import cn.iocoder.dashboard.modules.system.convert.user.SysUserConvert;
 | 
			
		||||
import cn.iocoder.dashboard.modules.system.dal.dataobject.dept.SysDeptDO;
 | 
			
		||||
import cn.iocoder.dashboard.modules.system.dal.dataobject.dept.SysPostDO;
 | 
			
		||||
@@ -33,14 +27,9 @@ import org.springframework.transaction.annotation.Transactional;
 | 
			
		||||
 | 
			
		||||
import javax.annotation.Resource;
 | 
			
		||||
import java.io.InputStream;
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.Collection;
 | 
			
		||||
import java.util.Collections;
 | 
			
		||||
import java.util.LinkedHashMap;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
import java.util.*;
 | 
			
		||||
 | 
			
		||||
import static cn.iocoder.dashboard.common.exception.util.ServiceExceptionUtil.exception;
 | 
			
		||||
import static cn.iocoder.dashboard.modules.system.enums.SysErrorCodeConstants.*;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -142,8 +131,6 @@ public class SysUserServiceImpl implements SysUserService {
 | 
			
		||||
        updateObj.setId(id);
 | 
			
		||||
        updateObj.setStatus(status);
 | 
			
		||||
        userMapper.updateById(updateObj);
 | 
			
		||||
        // 删除用户关联数据
 | 
			
		||||
        permissionService.processUserDeleted(id);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
@@ -152,6 +139,8 @@ public class SysUserServiceImpl implements SysUserService {
 | 
			
		||||
        this.checkUserExists(id);
 | 
			
		||||
        // 删除用户
 | 
			
		||||
        userMapper.deleteById(id);
 | 
			
		||||
        // 删除用户关联数据
 | 
			
		||||
        permissionService.processUserDeleted(id);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
@@ -227,7 +216,7 @@ public class SysUserServiceImpl implements SysUserService {
 | 
			
		||||
        }
 | 
			
		||||
        SysUserDO user = userMapper.selectById(id);
 | 
			
		||||
        if (user == null) {
 | 
			
		||||
            throw ServiceExceptionUtil.exception(USER_NOT_EXISTS);
 | 
			
		||||
            throw exception(USER_NOT_EXISTS);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -241,10 +230,10 @@ public class SysUserServiceImpl implements SysUserService {
 | 
			
		||||
        }
 | 
			
		||||
        // 如果 id 为空,说明不用比较是否为相同 id 的用户
 | 
			
		||||
        if (id == null) {
 | 
			
		||||
            throw ServiceExceptionUtil.exception(USER_USERNAME_EXISTS);
 | 
			
		||||
            throw exception(USER_USERNAME_EXISTS);
 | 
			
		||||
        }
 | 
			
		||||
        if (!user.getId().equals(id)) {
 | 
			
		||||
            throw ServiceExceptionUtil.exception(USER_USERNAME_EXISTS);
 | 
			
		||||
            throw exception(USER_USERNAME_EXISTS);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -258,10 +247,10 @@ public class SysUserServiceImpl implements SysUserService {
 | 
			
		||||
        }
 | 
			
		||||
        // 如果 id 为空,说明不用比较是否为相同 id 的用户
 | 
			
		||||
        if (id == null) {
 | 
			
		||||
            throw ServiceExceptionUtil.exception(USER_EMAIL_EXISTS);
 | 
			
		||||
            throw exception(USER_EMAIL_EXISTS);
 | 
			
		||||
        }
 | 
			
		||||
        if (!user.getId().equals(id)) {
 | 
			
		||||
            throw ServiceExceptionUtil.exception(USER_EMAIL_EXISTS);
 | 
			
		||||
            throw exception(USER_EMAIL_EXISTS);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -275,10 +264,10 @@ public class SysUserServiceImpl implements SysUserService {
 | 
			
		||||
        }
 | 
			
		||||
        // 如果 id 为空,说明不用比较是否为相同 id 的用户
 | 
			
		||||
        if (id == null) {
 | 
			
		||||
            throw ServiceExceptionUtil.exception(USER_MOBILE_EXISTS);
 | 
			
		||||
            throw exception(USER_MOBILE_EXISTS);
 | 
			
		||||
        }
 | 
			
		||||
        if (!user.getId().equals(id)) {
 | 
			
		||||
            throw ServiceExceptionUtil.exception(USER_MOBILE_EXISTS);
 | 
			
		||||
            throw exception(USER_MOBILE_EXISTS);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -288,10 +277,10 @@ public class SysUserServiceImpl implements SysUserService {
 | 
			
		||||
        }
 | 
			
		||||
        SysDeptDO dept = deptService.getDept(deptId);
 | 
			
		||||
        if (dept == null) {
 | 
			
		||||
            throw ServiceExceptionUtil.exception(DEPT_NOT_FOUND);
 | 
			
		||||
            throw exception(DEPT_NOT_FOUND);
 | 
			
		||||
        }
 | 
			
		||||
        if (!CommonStatusEnum.ENABLE.getStatus().equals(dept.getStatus())) {
 | 
			
		||||
            throw ServiceExceptionUtil.exception(DEPT_NOT_ENABLE);
 | 
			
		||||
            throw exception(DEPT_NOT_ENABLE);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -301,16 +290,16 @@ public class SysUserServiceImpl implements SysUserService {
 | 
			
		||||
        }
 | 
			
		||||
        List<SysPostDO> posts = postService.getPosts(postIds, null);
 | 
			
		||||
        if (CollUtil.isEmpty(posts)) {
 | 
			
		||||
            throw ServiceExceptionUtil.exception(POST_NOT_FOUND);
 | 
			
		||||
            throw exception(POST_NOT_FOUND);
 | 
			
		||||
        }
 | 
			
		||||
        Map<Long, SysPostDO> postMap = CollectionUtils.convertMap(posts, SysPostDO::getId);
 | 
			
		||||
        postIds.forEach(postId -> {
 | 
			
		||||
            SysPostDO post = postMap.get(postId);
 | 
			
		||||
            if (post == null) {
 | 
			
		||||
                throw ServiceExceptionUtil.exception(POST_NOT_FOUND);
 | 
			
		||||
                throw exception(POST_NOT_FOUND);
 | 
			
		||||
            }
 | 
			
		||||
            if (!CommonStatusEnum.ENABLE.getStatus().equals(post.getStatus())) {
 | 
			
		||||
                throw ServiceExceptionUtil.exception(POST_NOT_ENABLE, post.getName());
 | 
			
		||||
                throw exception(POST_NOT_ENABLE, post.getName());
 | 
			
		||||
            }
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
@@ -324,10 +313,10 @@ public class SysUserServiceImpl implements SysUserService {
 | 
			
		||||
    private void checkOldPassword(Long id, String oldPassword) {
 | 
			
		||||
        SysUserDO user = userMapper.selectById(id);
 | 
			
		||||
        if (user == null) {
 | 
			
		||||
            throw ServiceExceptionUtil.exception(USER_NOT_EXISTS);
 | 
			
		||||
            throw exception(USER_NOT_EXISTS);
 | 
			
		||||
        }
 | 
			
		||||
        if (!passwordEncoder.matches(oldPassword, user.getPassword())) {
 | 
			
		||||
            throw ServiceExceptionUtil.exception(USER_PASSWORD_FAILED);
 | 
			
		||||
            throw exception(USER_PASSWORD_FAILED);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -335,7 +324,7 @@ public class SysUserServiceImpl implements SysUserService {
 | 
			
		||||
    @Transactional(rollbackFor = Exception.class) // 添加事务,异常则回滚所有导入
 | 
			
		||||
    public SysUserImportRespVO importUsers(List<SysUserImportExcelVO> importUsers, boolean isUpdateSupport) {
 | 
			
		||||
        if (CollUtil.isEmpty(importUsers)) {
 | 
			
		||||
            throw ServiceExceptionUtil.exception(USER_IMPORT_LIST_IS_EMPTY);
 | 
			
		||||
            throw exception(USER_IMPORT_LIST_IS_EMPTY);
 | 
			
		||||
        }
 | 
			
		||||
        SysUserImportRespVO respVO = SysUserImportRespVO.builder().createUsernames(new ArrayList<>())
 | 
			
		||||
            .updateUsernames(new ArrayList<>()).failureUsernames(new LinkedHashMap<>()).build();
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,6 @@
 | 
			
		||||
package cn.iocoder.dashboard.modules.system.service.auth;
 | 
			
		||||
 | 
			
		||||
import static cn.hutool.core.util.RandomUtil.randomEle;
 | 
			
		||||
import static cn.iocoder.dashboard.modules.system.dal.redis.SysRedisKeyConstants.LOGIN_USER;
 | 
			
		||||
import static cn.iocoder.dashboard.util.AssertUtils.assertPojoEquals;
 | 
			
		||||
import static cn.iocoder.dashboard.util.RandomUtils.randomDate;
 | 
			
		||||
import static cn.iocoder.dashboard.util.RandomUtils.randomLongId;
 | 
			
		||||
@@ -25,7 +24,6 @@ import javax.annotation.Resource;
 | 
			
		||||
import org.junit.jupiter.api.Test;
 | 
			
		||||
import org.springframework.boot.test.mock.mockito.MockBean;
 | 
			
		||||
import org.springframework.context.annotation.Import;
 | 
			
		||||
import org.springframework.data.redis.core.StringRedisTemplate;
 | 
			
		||||
 | 
			
		||||
import cn.hutool.core.date.DateUtil;
 | 
			
		||||
import cn.iocoder.dashboard.BaseDbAndRedisUnitTest;
 | 
			
		||||
@@ -33,10 +31,6 @@ import cn.iocoder.dashboard.common.enums.CommonStatusEnum;
 | 
			
		||||
import cn.iocoder.dashboard.common.pojo.PageResult;
 | 
			
		||||
import cn.iocoder.dashboard.framework.security.config.SecurityProperties;
 | 
			
		||||
import cn.iocoder.dashboard.framework.security.core.LoginUser;
 | 
			
		||||
import cn.iocoder.dashboard.modules.infra.controller.job.vo.job.InfJobPageReqVO;
 | 
			
		||||
import cn.iocoder.dashboard.modules.infra.dal.dataobject.job.InfJobDO;
 | 
			
		||||
import cn.iocoder.dashboard.modules.infra.enums.config.InfConfigTypeEnum;
 | 
			
		||||
import cn.iocoder.dashboard.modules.infra.enums.job.InfJobStatusEnum;
 | 
			
		||||
import cn.iocoder.dashboard.modules.system.controller.auth.vo.session.SysUserSessionPageReqVO;
 | 
			
		||||
import cn.iocoder.dashboard.modules.system.dal.dataobject.auth.SysUserSessionDO;
 | 
			
		||||
import cn.iocoder.dashboard.modules.system.dal.dataobject.user.SysUserDO;
 | 
			
		||||
@@ -50,7 +44,6 @@ import cn.iocoder.dashboard.modules.system.service.logger.impl.SysLoginLogServic
 | 
			
		||||
import cn.iocoder.dashboard.modules.system.service.user.SysUserServiceImpl;
 | 
			
		||||
import cn.iocoder.dashboard.util.AssertUtils;
 | 
			
		||||
import cn.iocoder.dashboard.util.RandomUtils;
 | 
			
		||||
import cn.iocoder.dashboard.util.json.JsonUtils;
 | 
			
		||||
import cn.iocoder.dashboard.util.object.ObjectUtils;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -167,12 +160,12 @@ public class SysUserSessionServiceImplTest extends BaseDbAndRedisUnitTest {
 | 
			
		||||
        String userIp = randomString();
 | 
			
		||||
        SysUserDO dbUser1 = randomPojo(SysUserDO.class, o -> {
 | 
			
		||||
            o.setUsername("testUsername1");
 | 
			
		||||
            o.setSex(randomEle(SysSexEnum.values()).getSEX());
 | 
			
		||||
            o.setSex(randomEle(SysSexEnum.values()).getSex());
 | 
			
		||||
            o.setStatus(CommonStatusEnum.ENABLE.getStatus());
 | 
			
		||||
        });
 | 
			
		||||
        SysUserDO dbUser2 = randomPojo(SysUserDO.class, o -> {
 | 
			
		||||
            o.setUsername("testUsername2");
 | 
			
		||||
            o.setSex(randomEle(SysSexEnum.values()).getSEX());
 | 
			
		||||
            o.setSex(randomEle(SysSexEnum.values()).getSex());
 | 
			
		||||
            o.setStatus(CommonStatusEnum.ENABLE.getStatus());
 | 
			
		||||
        });
 | 
			
		||||
        SysUserSessionDO dbSession = randomPojo(SysUserSessionDO.class, o -> {
 | 
			
		||||
 
 | 
			
		||||
@@ -68,7 +68,7 @@ public class SysOperateLogServiceImplTest extends BaseDbUnitTest {
 | 
			
		||||
        // 先构造用户
 | 
			
		||||
        SysUserDO user = RandomUtils.randomPojo(SysUserDO.class, o -> {
 | 
			
		||||
            o.setNickname("wangkai");
 | 
			
		||||
            o.setSex(SysSexEnum.MALE.getSEX());
 | 
			
		||||
            o.setSex(SysSexEnum.MALE.getSex());
 | 
			
		||||
            o.setStatus(CommonStatusEnum.ENABLE.getStatus());
 | 
			
		||||
        });
 | 
			
		||||
        when(userService.getUsersByNickname("wangkai")).thenReturn(Collections.singletonList(user));
 | 
			
		||||
@@ -119,7 +119,7 @@ public class SysOperateLogServiceImplTest extends BaseDbUnitTest {
 | 
			
		||||
        // 先构造用户
 | 
			
		||||
        SysUserDO user = RandomUtils.randomPojo(SysUserDO.class, o -> {
 | 
			
		||||
            o.setNickname("wangkai");
 | 
			
		||||
            o.setSex(SysSexEnum.MALE.getSEX());
 | 
			
		||||
            o.setSex(SysSexEnum.MALE.getSex());
 | 
			
		||||
            o.setStatus(CommonStatusEnum.ENABLE.getStatus());
 | 
			
		||||
        });
 | 
			
		||||
        when(userService.getUsersByNickname("wangkai")).thenReturn(Collections.singletonList(user));
 | 
			
		||||
 
 | 
			
		||||
@@ -56,7 +56,7 @@ public class SysSmsChannelServiceTest extends BaseDbUnitTest {
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void testInitLocalCache_success() {
 | 
			
		||||
        // mock 数据s
 | 
			
		||||
        // mock 数据
 | 
			
		||||
        SysSmsChannelDO smsChannelDO01 = randomSmsChannelDO();
 | 
			
		||||
        smsChannelMapper.insert(smsChannelDO01);
 | 
			
		||||
        SysSmsChannelDO smsChannelDO02 = randomSmsChannelDO();
 | 
			
		||||
 
 | 
			
		||||
@@ -1,128 +1,259 @@
 | 
			
		||||
package cn.iocoder.dashboard.modules.system.service.user;
 | 
			
		||||
 | 
			
		||||
import cn.hutool.core.util.RandomUtil;
 | 
			
		||||
import cn.iocoder.dashboard.BaseSpringBootUnitTest;
 | 
			
		||||
import cn.iocoder.dashboard.BaseDbUnitTest;
 | 
			
		||||
import cn.iocoder.dashboard.common.enums.CommonStatusEnum;
 | 
			
		||||
import cn.iocoder.dashboard.modules.infra.service.file.InfFileService;
 | 
			
		||||
import cn.iocoder.dashboard.modules.system.controller.user.vo.profile.SysUserProfileUpdatePasswordReqVO;
 | 
			
		||||
import cn.iocoder.dashboard.modules.system.controller.user.vo.profile.SysUserProfileUpdateReqVO;
 | 
			
		||||
import cn.iocoder.dashboard.modules.system.controller.user.vo.user.SysUserCreateReqVO;
 | 
			
		||||
import cn.iocoder.dashboard.modules.system.controller.user.vo.user.SysUserImportExcelVO;
 | 
			
		||||
import cn.iocoder.dashboard.modules.system.controller.user.vo.user.SysUserImportRespVO;
 | 
			
		||||
import cn.iocoder.dashboard.modules.system.controller.user.vo.user.SysUserUpdateReqVO;
 | 
			
		||||
import cn.iocoder.dashboard.modules.system.dal.dataobject.dept.SysDeptDO;
 | 
			
		||||
import cn.iocoder.dashboard.modules.system.dal.mysql.dept.SysDeptMapper;
 | 
			
		||||
import cn.iocoder.dashboard.modules.system.dal.dataobject.dept.SysPostDO;
 | 
			
		||||
import cn.iocoder.dashboard.modules.system.dal.dataobject.user.SysUserDO;
 | 
			
		||||
import cn.iocoder.dashboard.modules.system.dal.mysql.user.SysUserMapper;
 | 
			
		||||
import cn.iocoder.dashboard.modules.system.enums.common.SysSexEnum;
 | 
			
		||||
import cn.iocoder.dashboard.modules.system.service.dept.SysDeptService;
 | 
			
		||||
import cn.iocoder.dashboard.util.RandomUtils;
 | 
			
		||||
import cn.iocoder.dashboard.modules.system.service.dept.SysPostService;
 | 
			
		||||
import cn.iocoder.dashboard.modules.system.service.permission.SysPermissionService;
 | 
			
		||||
import cn.iocoder.dashboard.util.collection.ArrayUtils;
 | 
			
		||||
import cn.iocoder.dashboard.util.collection.CollectionUtils;
 | 
			
		||||
import org.junit.jupiter.api.Test;
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
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.ArrayList;
 | 
			
		||||
import java.util.Collections;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.function.Consumer;
 | 
			
		||||
 | 
			
		||||
import static cn.iocoder.dashboard.util.RandomUtils.randomPojo;
 | 
			
		||||
import static cn.iocoder.dashboard.util.RandomUtils.randomString;
 | 
			
		||||
import static org.junit.jupiter.api.Assertions.*;
 | 
			
		||||
import static cn.hutool.core.util.RandomUtil.randomBytes;
 | 
			
		||||
import static cn.hutool.core.util.RandomUtil.randomEle;
 | 
			
		||||
import static cn.iocoder.dashboard.util.AssertUtils.assertPojoEquals;
 | 
			
		||||
import static cn.iocoder.dashboard.util.RandomUtils.*;
 | 
			
		||||
import static org.junit.jupiter.api.Assertions.assertEquals;
 | 
			
		||||
import static org.junit.jupiter.api.Assertions.assertNull;
 | 
			
		||||
import static org.mockito.ArgumentMatchers.*;
 | 
			
		||||
import static org.mockito.Mockito.*;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @Author zxl
 | 
			
		||||
 * @Date 2021/3/6 14:28
 | 
			
		||||
 * @Desc
 | 
			
		||||
 * {@link SysUserService} 的单元测试类
 | 
			
		||||
 *
 | 
			
		||||
 * @author zxl
 | 
			
		||||
 */
 | 
			
		||||
@Import(PasswordEncoder.class)
 | 
			
		||||
public class SysUserServiceImplTest  extends BaseSpringBootUnitTest {
 | 
			
		||||
@Import(SysUserServiceImpl.class)
 | 
			
		||||
public class SysUserServiceImplTest extends BaseDbUnitTest {
 | 
			
		||||
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private SysUserService userService;
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private PasswordEncoder passwordEncoder;
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private SysDeptService deptService;
 | 
			
		||||
    @Resource
 | 
			
		||||
    private SysDeptMapper deptMapper;
 | 
			
		||||
    private SysUserServiceImpl userService;
 | 
			
		||||
 | 
			
		||||
    @Resource
 | 
			
		||||
    private SysUserMapper userMapper;
 | 
			
		||||
 | 
			
		||||
    @MockBean
 | 
			
		||||
    private SysDeptService deptService;
 | 
			
		||||
    @MockBean
 | 
			
		||||
    private SysPostService postService;
 | 
			
		||||
    @MockBean
 | 
			
		||||
    private SysPermissionService permissionService;
 | 
			
		||||
    @MockBean
 | 
			
		||||
    private PasswordEncoder passwordEncoder;
 | 
			
		||||
    @MockBean
 | 
			
		||||
    private InfFileService fileService;
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void test_creatUser(){
 | 
			
		||||
    public void testCreatUser_success() {
 | 
			
		||||
        // 准备参数
 | 
			
		||||
        SysUserCreateReqVO reqVO = randomPojo(SysUserCreateReqVO.class,o->{
 | 
			
		||||
            o.setDeptId(null);
 | 
			
		||||
            o.setPostIds(Collections.emptySet());
 | 
			
		||||
            o.setSex(1);
 | 
			
		||||
            o.setPassword(randomString());
 | 
			
		||||
        SysUserCreateReqVO reqVO = randomPojo(SysUserCreateReqVO.class, o -> {
 | 
			
		||||
            o.setSex(RandomUtil.randomEle(SysSexEnum.values()).getSex());
 | 
			
		||||
            o.setMobile(randomString());
 | 
			
		||||
        });
 | 
			
		||||
        // 调用方法
 | 
			
		||||
        Long  userId = userService.createUser(reqVO);
 | 
			
		||||
        // 校验数据是否存在
 | 
			
		||||
        assertNotNull(userService.getUser(userId));
 | 
			
		||||
        // mock deptService 的方法
 | 
			
		||||
        SysDeptDO dept = randomPojo(SysDeptDO.class, o -> {
 | 
			
		||||
            o.setId(reqVO.getDeptId());
 | 
			
		||||
            o.setStatus(CommonStatusEnum.ENABLE.getStatus());
 | 
			
		||||
        });
 | 
			
		||||
        when(deptService.getDept(eq(dept.getId()))).thenReturn(dept);
 | 
			
		||||
        // mock postService 的方法
 | 
			
		||||
        List<SysPostDO> posts = CollectionUtils.convertList(reqVO.getPostIds(), postId ->
 | 
			
		||||
                randomPojo(SysPostDO.class, o -> {
 | 
			
		||||
                    o.setId(postId);
 | 
			
		||||
                    o.setStatus(CommonStatusEnum.ENABLE.getStatus());
 | 
			
		||||
                }));
 | 
			
		||||
        when(postService.getPosts(eq(reqVO.getPostIds()), isNull())).thenReturn(posts);
 | 
			
		||||
        // mock passwordEncoder 的方法
 | 
			
		||||
        when(passwordEncoder.encode(eq(reqVO.getPassword()))).thenReturn("yudaoyuanma");
 | 
			
		||||
 | 
			
		||||
        // 调用
 | 
			
		||||
        Long userId = userService.createUser(reqVO);
 | 
			
		||||
        // 断言
 | 
			
		||||
        SysUserDO user = userMapper.selectById(userId);
 | 
			
		||||
        assertPojoEquals(reqVO, user, "password");
 | 
			
		||||
        assertEquals("yudaoyuanma", user.getPassword());
 | 
			
		||||
        assertEquals(CommonStatusEnum.ENABLE.getStatus(), user.getStatus());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void test_updateUser(){
 | 
			
		||||
    public void testUpdateUser_success() {
 | 
			
		||||
        // mock 数据
 | 
			
		||||
        SysUserDO dbUser = randomSysUserDO();
 | 
			
		||||
        userMapper.insert(dbUser);
 | 
			
		||||
        // 准备参数
 | 
			
		||||
        SysUserCreateReqVO reqVO = randomPojo(SysUserCreateReqVO.class,o->{
 | 
			
		||||
            o.setDeptId(null);
 | 
			
		||||
            o.setPostIds(Collections.emptySet());
 | 
			
		||||
            o.setSex(1);
 | 
			
		||||
            o.setPassword(randomString());
 | 
			
		||||
        SysUserUpdateReqVO reqVO = randomPojo(SysUserUpdateReqVO.class, o -> {
 | 
			
		||||
            o.setId(dbUser.getId());
 | 
			
		||||
            o.setSex(RandomUtil.randomEle(SysSexEnum.values()).getSex());
 | 
			
		||||
            o.setMobile(randomString());
 | 
			
		||||
        });
 | 
			
		||||
        // 先插入一条
 | 
			
		||||
        Long userId = userService.createUser(reqVO);
 | 
			
		||||
        // 准备更新参数:更新手机号
 | 
			
		||||
        SysUserUpdateReqVO updateVo = new SysUserUpdateReqVO();
 | 
			
		||||
        updateVo.setId(userId);
 | 
			
		||||
        updateVo.setMobile(RandomUtil.randomNumbers(11));
 | 
			
		||||
        // 调用方法、
 | 
			
		||||
        userService.updateUser(updateVo);
 | 
			
		||||
        // 校验结果
 | 
			
		||||
        assertEquals(userService.getUser(userId).getMobile(),updateVo.getMobile());
 | 
			
		||||
        // mock deptService 的方法
 | 
			
		||||
        SysDeptDO dept = randomPojo(SysDeptDO.class, o -> {
 | 
			
		||||
            o.setId(reqVO.getDeptId());
 | 
			
		||||
            o.setStatus(CommonStatusEnum.ENABLE.getStatus());
 | 
			
		||||
        });
 | 
			
		||||
        when(deptService.getDept(eq(dept.getId()))).thenReturn(dept);
 | 
			
		||||
        // mock postService 的方法
 | 
			
		||||
        List<SysPostDO> posts = CollectionUtils.convertList(reqVO.getPostIds(), postId ->
 | 
			
		||||
                randomPojo(SysPostDO.class, o -> {
 | 
			
		||||
                    o.setId(postId);
 | 
			
		||||
                    o.setStatus(CommonStatusEnum.ENABLE.getStatus());
 | 
			
		||||
                }));
 | 
			
		||||
        when(postService.getPosts(eq(reqVO.getPostIds()), isNull())).thenReturn(posts);
 | 
			
		||||
 | 
			
		||||
        // 调用
 | 
			
		||||
        userService.updateUser(reqVO);
 | 
			
		||||
        // 断言
 | 
			
		||||
        SysUserDO user = userMapper.selectById(reqVO.getId());
 | 
			
		||||
        assertPojoEquals(reqVO, user);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void test_deleteUser(){
 | 
			
		||||
    public void testUpdateUserProfile_success() {
 | 
			
		||||
        // mock 数据
 | 
			
		||||
        SysUserDO dbUser = randomSysUserDO();
 | 
			
		||||
        userMapper.insert(dbUser);
 | 
			
		||||
        // 准备参数
 | 
			
		||||
        SysUserCreateReqVO reqVO = randomPojo(SysUserCreateReqVO.class,o->{
 | 
			
		||||
            o.setDeptId(null);
 | 
			
		||||
            o.setPostIds(Collections.emptySet());
 | 
			
		||||
            o.setSex(1);
 | 
			
		||||
            o.setPassword(randomString());
 | 
			
		||||
        Long userId = dbUser.getId();
 | 
			
		||||
        SysUserProfileUpdateReqVO reqVO = randomPojo(SysUserProfileUpdateReqVO.class, o -> {
 | 
			
		||||
            o.setMobile(randomString());
 | 
			
		||||
            o.setSex(RandomUtil.randomEle(SysSexEnum.values()).getSex());
 | 
			
		||||
        });
 | 
			
		||||
        // 先插入一条
 | 
			
		||||
        Long userId = userService.createUser(reqVO);
 | 
			
		||||
 | 
			
		||||
        // 调用
 | 
			
		||||
        userService.updateUserProfile(userId, reqVO);
 | 
			
		||||
        // 断言
 | 
			
		||||
        SysUserDO user = userMapper.selectById(userId);
 | 
			
		||||
        assertPojoEquals(reqVO, user);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void testUpdateUserPassword_success() {
 | 
			
		||||
        // mock 数据
 | 
			
		||||
        SysUserDO dbUser = randomSysUserDO(o -> o.setPassword("encode:yudao"));
 | 
			
		||||
        userMapper.insert(dbUser);
 | 
			
		||||
        // 准备参数
 | 
			
		||||
        Long userId = dbUser.getId();
 | 
			
		||||
        SysUserProfileUpdatePasswordReqVO reqVO = randomPojo(SysUserProfileUpdatePasswordReqVO.class, o -> {
 | 
			
		||||
            o.setOldPassword("yudao");
 | 
			
		||||
            o.setNewPassword("yuanma");
 | 
			
		||||
        });
 | 
			
		||||
        // mock 方法
 | 
			
		||||
        when(passwordEncoder.encode(anyString())).then(
 | 
			
		||||
                (Answer<String>) invocationOnMock -> "encode:" + invocationOnMock.getArgument(0));
 | 
			
		||||
        when(passwordEncoder.matches(eq(reqVO.getOldPassword()), eq(dbUser.getPassword()))).thenReturn(true);
 | 
			
		||||
 | 
			
		||||
        // 调用
 | 
			
		||||
        userService.updateUserPassword(userId, reqVO);
 | 
			
		||||
        // 断言
 | 
			
		||||
        SysUserDO user = userMapper.selectById(userId);
 | 
			
		||||
        assertEquals("encode:yuanma", user.getPassword());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void testUpdateUserAvatar_success() {
 | 
			
		||||
        // mock 数据
 | 
			
		||||
        SysUserDO dbUser = randomSysUserDO();
 | 
			
		||||
        userMapper.insert(dbUser);
 | 
			
		||||
        // 准备参数
 | 
			
		||||
        Long userId = dbUser.getId();
 | 
			
		||||
        byte[] avatarFileBytes = randomBytes(10);
 | 
			
		||||
        ByteArrayInputStream avatarFile = new ByteArrayInputStream(avatarFileBytes);
 | 
			
		||||
        // mock 方法
 | 
			
		||||
        String avatar = randomString();
 | 
			
		||||
        when(fileService.createFile(anyString(), eq(avatarFileBytes))).thenReturn(avatar);
 | 
			
		||||
 | 
			
		||||
        // 调用
 | 
			
		||||
        userService.updateUserAvatar(userId, avatarFile);
 | 
			
		||||
        // 断言
 | 
			
		||||
        SysUserDO user = userMapper.selectById(userId);
 | 
			
		||||
        assertEquals(avatar, user.getAvatar());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void testUpdateUserPassword02_success() {
 | 
			
		||||
        // mock 数据
 | 
			
		||||
        SysUserDO dbUser = randomSysUserDO();
 | 
			
		||||
        userMapper.insert(dbUser);
 | 
			
		||||
        // 准备参数
 | 
			
		||||
        Long userId = dbUser.getId();
 | 
			
		||||
        String password = "yudao";
 | 
			
		||||
        // mock 方法
 | 
			
		||||
        when(passwordEncoder.encode(anyString())).then(
 | 
			
		||||
                (Answer<String>) invocationOnMock -> "encode:" + invocationOnMock.getArgument(0));
 | 
			
		||||
 | 
			
		||||
        // 调用
 | 
			
		||||
        userService.updateUserPassword(userId, password);
 | 
			
		||||
        // 断言
 | 
			
		||||
        SysUserDO user = userMapper.selectById(userId);
 | 
			
		||||
        assertEquals("encode:" + password, user.getPassword());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void testUpdateUserStatus() {
 | 
			
		||||
        // mock 数据
 | 
			
		||||
        SysUserDO dbUser = randomSysUserDO();
 | 
			
		||||
        userMapper.insert(dbUser);
 | 
			
		||||
        // 准备参数
 | 
			
		||||
        Long userId = dbUser.getId();
 | 
			
		||||
        Integer status = randomCommonStatus();
 | 
			
		||||
 | 
			
		||||
        // 调用
 | 
			
		||||
        userService.updateUserStatus(userId, status);
 | 
			
		||||
        // 断言
 | 
			
		||||
        SysUserDO user = userMapper.selectById(userId);
 | 
			
		||||
        assertEquals(status, user.getStatus());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void testDeleteUser(){
 | 
			
		||||
        // mock 数据
 | 
			
		||||
        SysUserDO dbUser = randomSysUserDO();
 | 
			
		||||
        userMapper.insert(dbUser);
 | 
			
		||||
        // 准备参数
 | 
			
		||||
        Long userId = dbUser.getId();
 | 
			
		||||
 | 
			
		||||
        // 调用数据
 | 
			
		||||
        userService.deleteUser(userId);
 | 
			
		||||
        // 校验结果
 | 
			
		||||
        assertNull(userService.getUser(userId));
 | 
			
		||||
        // 校验调用次数
 | 
			
		||||
        verify(permissionService, times(1)).processUserDeleted(eq(userId));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void test_updateUserPassword(){
 | 
			
		||||
        // 准备参数
 | 
			
		||||
        SysUserCreateReqVO reqVO = randomPojo(SysUserCreateReqVO.class,o->{
 | 
			
		||||
            o.setDeptId(null);
 | 
			
		||||
            o.setPostIds(Collections.emptySet());
 | 
			
		||||
            o.setSex(1);
 | 
			
		||||
            o.setPassword("123");
 | 
			
		||||
        });
 | 
			
		||||
        // 先插入一条
 | 
			
		||||
        Long userId = userService.createUser(reqVO);
 | 
			
		||||
        String newPassword = RandomUtils.randomString();
 | 
			
		||||
        // 调用
 | 
			
		||||
        userService.updateUserPassword(userId,newPassword);
 | 
			
		||||
        // 校验结果
 | 
			
		||||
        assertNotEquals(passwordEncoder.encode(newPassword),userService.getUser(userId).getPassword());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void test_importUsers(){
 | 
			
		||||
        SysDeptDO dept = randomPojo(SysDeptDO.class, o -> { // 等会查询到
 | 
			
		||||
            o.setName("开发部");
 | 
			
		||||
            o.setSort("1");
 | 
			
		||||
            o.setSort(1);
 | 
			
		||||
            o.setStatus(CommonStatusEnum.ENABLE.getStatus());
 | 
			
		||||
        });
 | 
			
		||||
        int depId = deptMapper.insert(dept);
 | 
			
		||||
//        int depId = deptMapper.insert(dept);
 | 
			
		||||
        int depId = 0;
 | 
			
		||||
        // 准备参数
 | 
			
		||||
        List<SysUserImportExcelVO> list = new ArrayList<>();
 | 
			
		||||
        list.add(randomPojo(SysUserImportExcelVO.class, o->{
 | 
			
		||||
@@ -153,18 +284,15 @@ public class SysUserServiceImplTest  extends BaseSpringBootUnitTest {
 | 
			
		||||
        assertEquals(respVOUpdate.getUpdateUsernames().size(),3);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public SysUserCreateReqVO randomUserVO(){
 | 
			
		||||
 | 
			
		||||
        SysUserCreateReqVO userVO = new SysUserCreateReqVO();
 | 
			
		||||
        userVO.setUsername(RandomUtils.randomString());
 | 
			
		||||
        userVO.setNickname(RandomUtils.randomString());
 | 
			
		||||
        userVO.setMobile(RandomUtil.randomNumbers(11));
 | 
			
		||||
        userVO.setEmail(RandomUtils.randomString()+"@ruoyi.com");
 | 
			
		||||
        userVO.setDeptId(null);
 | 
			
		||||
        userVO.setPostIds(Collections.emptySet());
 | 
			
		||||
 | 
			
		||||
        userVO.setPassword(RandomUtils.randomString());
 | 
			
		||||
        return userVO;
 | 
			
		||||
    // ========== 随机对象 ==========
 | 
			
		||||
 | 
			
		||||
    @SafeVarargs
 | 
			
		||||
    private static SysUserDO randomSysUserDO(Consumer<SysUserDO>... consumers) {
 | 
			
		||||
        Consumer<SysUserDO> consumer = (o) -> {
 | 
			
		||||
            o.setStatus(randomEle(CommonStatusEnum.values()).getStatus()); // 保证 status 的范围
 | 
			
		||||
            o.setSex(randomEle(SysSexEnum.values()).getSex()); // 保证 sex 的范围
 | 
			
		||||
        };
 | 
			
		||||
        return randomPojo(SysUserDO.class, ArrayUtils.append(consumer, consumers));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user