Jelajahi Sumber

完善 DeptServiceImpl 单元测试

YunaiV 2 tahun lalu
induk
melakukan
1011de3278
11 mengubah file dengan 186 tambahan dan 126 penghapusan
  1. 2 2
      yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/BpmTaskAssignRuleServiceImpl.java
  2. 3 3
      yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/dept/DeptApi.java
  3. 4 4
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/dept/DeptApiImpl.java
  4. 2 2
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/DeptController.java
  5. 18 25
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/dept/DeptService.java
  6. 25 35
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/dept/DeptServiceImpl.java
  7. 1 1
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/permission/PermissionServiceImpl.java
  8. 2 2
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java
  9. 125 48
      yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/service/dept/DeptServiceImplTest.java
  10. 1 1
      yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/service/permission/PermissionServiceTest.java
  11. 3 3
      yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImplTest.java

+ 2 - 2
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/BpmTaskAssignRuleServiceImpl.java

@@ -216,7 +216,7 @@ public class BpmTaskAssignRuleServiceImpl implements BpmTaskAssignRuleService {
             roleApi.validRoles(options);
         } else if (ObjectUtils.equalsAny(type, BpmTaskAssignRuleTypeEnum.DEPT_MEMBER.getType(),
             BpmTaskAssignRuleTypeEnum.DEPT_LEADER.getType())) {
-            deptApi.validDepts(options);
+            deptApi.validateDeptList(options);
         } else if (Objects.equals(type, BpmTaskAssignRuleTypeEnum.POST.getType())) {
             postApi.validPosts(options);
         } else if (Objects.equals(type, BpmTaskAssignRuleTypeEnum.USER.getType())) {
@@ -293,7 +293,7 @@ public class BpmTaskAssignRuleServiceImpl implements BpmTaskAssignRuleService {
     }
 
     private Set<Long> calculateTaskCandidateUsersByDeptLeader(BpmTaskAssignRuleDO rule) {
-        List<DeptRespDTO> depts = deptApi.getDepts(rule.getOptions());
+        List<DeptRespDTO> depts = deptApi.getDeptList(rule.getOptions());
         return convertSet(depts, DeptRespDTO::getLeaderUserId);
     }
 

+ 3 - 3
yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/dept/DeptApi.java

@@ -29,7 +29,7 @@ public interface DeptApi {
      * @param ids 部门编号数组
      * @return 部门信息数组
      */
-    List<DeptRespDTO> getDepts(Collection<Long> ids);
+    List<DeptRespDTO> getDeptList(Collection<Long> ids);
 
     /**
      * 校验部门们是否有效。如下情况,视为无效:
@@ -38,7 +38,7 @@ public interface DeptApi {
      *
      * @param ids 角色编号数组
      */
-    void validDepts(Collection<Long> ids);
+    void validateDeptList(Collection<Long> ids);
 
     /**
      * 获得指定编号的部门 Map
@@ -47,7 +47,7 @@ public interface DeptApi {
      * @return 部门 Map
      */
     default Map<Long, DeptRespDTO> getDeptMap(Set<Long> ids) {
-        List<DeptRespDTO> list = getDepts(ids);
+        List<DeptRespDTO> list = getDeptList(ids);
         return CollectionUtils.convertMap(list, DeptRespDTO::getId);
     }
 

+ 4 - 4
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/dept/DeptApiImpl.java

@@ -28,14 +28,14 @@ public class DeptApiImpl implements DeptApi {
     }
 
     @Override
-    public List<DeptRespDTO> getDepts(Collection<Long> ids) {
-        List<DeptDO> depts = deptService.getDepts(ids);
+    public List<DeptRespDTO> getDeptList(Collection<Long> ids) {
+        List<DeptDO> depts = deptService.getDeptList(ids);
         return DeptConvert.INSTANCE.convertList03(depts);
     }
 
     @Override
-    public void validDepts(Collection<Long> ids) {
-        deptService.validDepts(ids);
+    public void validateDeptList(Collection<Long> ids) {
+        deptService.validateDeptList(ids);
     }
 
 }

+ 2 - 2
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/DeptController.java

@@ -58,7 +58,7 @@ public class DeptController {
     @ApiOperation("获取部门列表")
     @PreAuthorize("@ss.hasPermission('system:dept:query')")
     public CommonResult<List<DeptRespVO>> listDepts(DeptListReqVO reqVO) {
-        List<DeptDO> list = deptService.getSimpleDepts(reqVO);
+        List<DeptDO> list = deptService.getDeptList(reqVO);
         list.sort(Comparator.comparing(DeptDO::getSort));
         return success(DeptConvert.INSTANCE.convertList(list));
     }
@@ -69,7 +69,7 @@ public class DeptController {
         // 获得部门列表,只要开启状态的
         DeptListReqVO reqVO = new DeptListReqVO();
         reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus());
-        List<DeptDO> list = deptService.getSimpleDepts(reqVO);
+        List<DeptDO> list = deptService.getDeptList(reqVO);
         // 排序后,返回给前端
         list.sort(Comparator.comparing(DeptDO::getSort));
         return success(DeptConvert.INSTANCE.convertList02(list));

+ 18 - 25
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/dept/DeptService.java

@@ -52,7 +52,7 @@ public interface DeptService {
      * @param reqVO 筛选条件请求 VO
      * @return 部门列表
      */
-    List<DeptDO> getSimpleDepts(DeptListReqVO reqVO);
+    List<DeptDO> getDeptList(DeptListReqVO reqVO);
 
     /**
      * 获得所有子部门,从缓存中
@@ -61,7 +61,7 @@ public interface DeptService {
      * @param recursive 是否递归获取所有
      * @return 子部门列表
      */
-    List<DeptDO> getDeptsByParentIdFromCache(Long parentId, boolean recursive);
+    List<DeptDO> getDeptListByParentIdFromCache(Long parentId, boolean recursive);
 
     /**
      * 获得部门信息数组
@@ -69,7 +69,21 @@ public interface DeptService {
      * @param ids 部门编号数组
      * @return 部门信息数组
      */
-    List<DeptDO> getDepts(Collection<Long> ids);
+    List<DeptDO> getDeptList(Collection<Long> ids);
+
+    /**
+     * 获得指定编号的部门 Map
+     *
+     * @param ids 部门编号数组
+     * @return 部门 Map
+     */
+    default Map<Long, DeptDO> getDeptMap(Collection<Long> ids) {
+        if (CollUtil.isEmpty(ids)) {
+            return Collections.emptyMap();
+        }
+        List<DeptDO> list = getDeptList(ids);
+        return CollectionUtils.convertMap(list, DeptDO::getId);
+    }
 
     /**
      * 获得部门信息
@@ -86,27 +100,6 @@ public interface DeptService {
      *
      * @param ids 角色编号数组
      */
-    void validDepts(Collection<Long> ids);
+    void validateDeptList(Collection<Long> ids);
 
-    /**
-     * 获得指定编号的部门列表
-     *
-     * @param ids 部门编号数组
-     * @return 部门列表
-     */
-    List<DeptDO> getSimpleDepts(Collection<Long> ids);
-
-    /**
-     * 获得指定编号的部门 Map
-     *
-     * @param ids 部门编号数组
-     * @return 部门 Map
-     */
-    default Map<Long, DeptDO> getDeptMap(Collection<Long> ids) {
-        if (CollUtil.isEmpty(ids)) {
-            return Collections.emptyMap();
-        }
-        List<DeptDO> list = getSimpleDepts(ids);
-        return CollectionUtils.convertMap(list, DeptDO::getId);
-    }
 }

+ 25 - 35
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/dept/DeptServiceImpl.java

@@ -2,8 +2,6 @@ package cn.iocoder.yudao.module.system.service.dept;
 
 import cn.hutool.core.collection.CollUtil;
 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
-import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil;
-import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
 import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder;
 import cn.iocoder.yudao.framework.tenant.core.util.TenantUtils;
 import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptCreateReqVO;
@@ -19,13 +17,11 @@ import com.google.common.collect.ImmutableMultimap;
 import com.google.common.collect.Multimap;
 import lombok.Getter;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Service;
 import org.springframework.validation.annotation.Validated;
 
 import javax.annotation.PostConstruct;
 import javax.annotation.Resource;
-import java.time.LocalDateTime;
 import java.util.*;
 
 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
@@ -95,7 +91,7 @@ public class DeptServiceImpl implements DeptService {
         if (reqVO.getParentId() == null) {
             reqVO.setParentId(DeptIdEnum.ROOT.getId());
         }
-        checkCreateOrUpdate(null, reqVO.getParentId(), reqVO.getName());
+        validateForCreateOrUpdate(null, reqVO.getParentId(), reqVO.getName());
         // 插入部门
         DeptDO dept = DeptConvert.INSTANCE.convert(reqVO);
         deptMapper.insert(dept);
@@ -110,7 +106,7 @@ public class DeptServiceImpl implements DeptService {
         if (reqVO.getParentId() == null) {
             reqVO.setParentId(DeptIdEnum.ROOT.getId());
         }
-        checkCreateOrUpdate(reqVO.getId(), reqVO.getParentId(), reqVO.getName());
+        validateForCreateOrUpdate(reqVO.getId(), reqVO.getParentId(), reqVO.getName());
         // 更新部门
         DeptDO updateObj = DeptConvert.INSTANCE.convert(reqVO);
         deptMapper.updateById(updateObj);
@@ -121,10 +117,10 @@ public class DeptServiceImpl implements DeptService {
     @Override
     public void deleteDept(Long id) {
         // 校验是否存在
-        checkDeptExists(id);
+        validateDeptExists(id);
         // 校验是否有子部门
         if (deptMapper.selectCountByParentId(id) > 0) {
-            throw ServiceExceptionUtil.exception(DEPT_EXITS_CHILDREN);
+            throw exception(DEPT_EXITS_CHILDREN);
         }
         // 删除部门
         deptMapper.deleteById(id);
@@ -133,16 +129,16 @@ public class DeptServiceImpl implements DeptService {
     }
 
     @Override
-    public List<DeptDO> getSimpleDepts(DeptListReqVO reqVO) {
+    public List<DeptDO> getDeptList(DeptListReqVO reqVO) {
         return deptMapper.selectList(reqVO);
     }
 
     @Override
-    public List<DeptDO> getDeptsByParentIdFromCache(Long parentId, boolean recursive) {
+    public List<DeptDO> getDeptListByParentIdFromCache(Long parentId, boolean recursive) {
         if (parentId == null) {
             return Collections.emptyList();
         }
-        List<DeptDO> result = new ArrayList<>(); // TODO 芋艿:待优化,新增缓存,避免每次遍历的计算
+        List<DeptDO> result = new ArrayList<>();
         // 递归,简单粗暴
         this.getDeptsByParentIdFromCache(result, parentId,
                 recursive ? Integer.MAX_VALUE : 1, // 如果递归获取,则无限;否则,只递归 1 次
@@ -182,65 +178,65 @@ public class DeptServiceImpl implements DeptService {
                 recursiveCount - 1, parentDeptMap));
     }
 
-    private void checkCreateOrUpdate(Long id, Long parentId, String name) {
+    private void validateForCreateOrUpdate(Long id, Long parentId, String name) {
         // 校验自己存在
-        checkDeptExists(id);
+        validateDeptExists(id);
         // 校验父部门的有效性
-        checkParentDeptEnable(id, parentId);
+        validateParentDeptEnable(id, parentId);
         // 校验部门名的唯一性
-        checkDeptNameUnique(id, parentId, name);
+        validateDeptNameUnique(id, parentId, name);
     }
 
-    private void checkParentDeptEnable(Long id, Long parentId) {
+    private void validateParentDeptEnable(Long id, Long parentId) {
         if (parentId == null || DeptIdEnum.ROOT.getId().equals(parentId)) {
             return;
         }
         // 不能设置自己为父部门
         if (parentId.equals(id)) {
-            throw ServiceExceptionUtil.exception(DEPT_PARENT_ERROR);
+            throw exception(DEPT_PARENT_ERROR);
         }
         // 父岗位不存在
         DeptDO dept = deptMapper.selectById(parentId);
         if (dept == null) {
-            throw ServiceExceptionUtil.exception(DEPT_PARENT_NOT_EXITS);
+            throw exception(DEPT_PARENT_NOT_EXITS);
         }
         // 父部门被禁用
         if (!CommonStatusEnum.ENABLE.getStatus().equals(dept.getStatus())) {
-            throw ServiceExceptionUtil.exception(DEPT_NOT_ENABLE);
+            throw exception(DEPT_NOT_ENABLE);
         }
         // 父部门不能是原来的子部门
-        List<DeptDO> children = this.getDeptsByParentIdFromCache(id, true);
+        List<DeptDO> children = this.getDeptListByParentIdFromCache(id, true);
         if (children.stream().anyMatch(dept1 -> dept1.getId().equals(parentId))) {
-            throw ServiceExceptionUtil.exception(DEPT_PARENT_IS_CHILD);
+            throw exception(DEPT_PARENT_IS_CHILD);
         }
     }
 
-    private void checkDeptExists(Long id) {
+    private void validateDeptExists(Long id) {
         if (id == null) {
             return;
         }
         DeptDO dept = deptMapper.selectById(id);
         if (dept == null) {
-            throw ServiceExceptionUtil.exception(DEPT_NOT_FOUND);
+            throw exception(DEPT_NOT_FOUND);
         }
     }
 
-    private void checkDeptNameUnique(Long id, Long parentId, String name) {
+    private void validateDeptNameUnique(Long id, Long parentId, String name) {
         DeptDO menu = deptMapper.selectByParentIdAndName(parentId, name);
         if (menu == null) {
             return;
         }
         // 如果 id 为空,说明不用比较是否为相同 id 的岗位
         if (id == null) {
-            throw ServiceExceptionUtil.exception(DEPT_NAME_DUPLICATE);
+            throw exception(DEPT_NAME_DUPLICATE);
         }
         if (!menu.getId().equals(id)) {
-            throw ServiceExceptionUtil.exception(DEPT_NAME_DUPLICATE);
+            throw exception(DEPT_NAME_DUPLICATE);
         }
     }
 
     @Override
-    public List<DeptDO> getDepts(Collection<Long> ids) {
+    public List<DeptDO> getDeptList(Collection<Long> ids) {
         return deptMapper.selectBatchIds(ids);
     }
 
@@ -250,13 +246,12 @@ public class DeptServiceImpl implements DeptService {
     }
 
     @Override
-    public void validDepts(Collection<Long> ids) {
+    public void validateDeptList(Collection<Long> ids) {
         if (CollUtil.isEmpty(ids)) {
             return;
         }
         // 获得科室信息
-        List<DeptDO> depts = deptMapper.selectBatchIds(ids);
-        Map<Long, DeptDO> deptMap = CollectionUtils.convertMap(depts, DeptDO::getId);
+        Map<Long, DeptDO> deptMap = getDeptMap(ids);
         // 校验
         ids.forEach(id -> {
             DeptDO dept = deptMap.get(id);
@@ -269,9 +264,4 @@ public class DeptServiceImpl implements DeptService {
         });
     }
 
-    @Override
-    public List<DeptDO> getSimpleDepts(Collection<Long> ids) {
-        return deptMapper.selectBatchIds(ids);
-    }
-
 }

+ 1 - 1
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/permission/PermissionServiceImpl.java

@@ -418,7 +418,7 @@ public class PermissionServiceImpl implements PermissionService {
             }
             // 情况四,DEPT_DEPT_AND_CHILD
             if (Objects.equals(role.getDataScope(), DataScopeEnum.DEPT_AND_CHILD.getScope())) {
-                List<DeptDO> depts = deptService.getDeptsByParentIdFromCache(userDeptIdCache.get(), true);
+                List<DeptDO> depts = deptService.getDeptListByParentIdFromCache(userDeptIdCache.get(), true);
                 CollUtil.addAll(result.getDeptIds(), CollectionUtils.convertList(depts, DeptDO::getId));
                 // 添加本身部门编号
                 CollUtil.addAll(result.getDeptIds(), userDeptIdCache.get());

+ 2 - 2
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java

@@ -299,7 +299,7 @@ public class AdminUserServiceImpl implements AdminUserService {
         if (deptId == null) {
             return Collections.emptySet();
         }
-        Set<Long> deptIds = convertSet(deptService.getDeptsByParentIdFromCache(
+        Set<Long> deptIds = convertSet(deptService.getDeptListByParentIdFromCache(
                 deptId, true), DeptDO::getId);
         deptIds.add(deptId); // 包括自身
         return deptIds;
@@ -317,7 +317,7 @@ public class AdminUserServiceImpl implements AdminUserService {
         // 校验邮箱唯一
         checkEmailUnique(id, email);
         // 校验部门处于开启状态
-        deptService.validDepts(CollectionUtils.singleton(deptId));
+        deptService.validateDeptList(CollectionUtils.singleton(deptId));
         // 校验岗位处于开启状态
         postService.validPosts(postIds);
     }

+ 125 - 48
yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/service/dept/DeptServiceTest.java → yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/service/dept/DeptServiceImplTest.java

@@ -19,6 +19,7 @@ import org.springframework.boot.test.mock.mockito.MockBean;
 import org.springframework.context.annotation.Import;
 
 import javax.annotation.Resource;
+import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
 import java.util.function.Consumer;
@@ -28,8 +29,8 @@ import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEq
 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.module.system.enums.ErrorCodeConstants.*;
+import static java.util.Collections.singletonList;
 import static org.junit.jupiter.api.Assertions.*;
-import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 
 /**
@@ -38,7 +39,7 @@ import static org.mockito.Mockito.verify;
  * @author niudehua
  */
 @Import(DeptServiceImpl.class)
-public class DeptServiceTest extends BaseDbUnitTest {
+public class DeptServiceImplTest extends BaseDbUnitTest {
 
     @Resource
     private DeptServiceImpl deptService;
@@ -76,7 +77,7 @@ public class DeptServiceTest extends BaseDbUnitTest {
     }
 
     @Test
-    void testListDepts() {
+    public void testListDepts() {
         // mock 数据
         DeptDO dept = randomPojo(DeptDO.class, o -> { // 等会查询到
             o.setName("开发部");
@@ -91,21 +92,22 @@ public class DeptServiceTest extends BaseDbUnitTest {
         DeptListReqVO reqVO = new DeptListReqVO();
         reqVO.setName("开");
         reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus());
+
         // 调用
-        List<DeptDO> sysDeptDOS = deptService.getSimpleDepts(reqVO);
+        List<DeptDO> sysDeptDOS = deptService.getDeptList(reqVO);
         // 断言
         assertEquals(1, sysDeptDOS.size());
         assertPojoEquals(dept, sysDeptDOS.get(0));
     }
 
     @Test
-    void testCreateDept_success() {
+    public void testCreateDept_success() {
         // 准备参数
-        DeptCreateReqVO reqVO = randomPojo(DeptCreateReqVO.class,
-            o -> {
-                o.setParentId(DeptIdEnum.ROOT.getId());
-                o.setStatus(randomCommonStatus());
-            });
+        DeptCreateReqVO reqVO = randomPojo(DeptCreateReqVO.class, o -> {
+            o.setParentId(DeptIdEnum.ROOT.getId());
+            o.setStatus(randomCommonStatus());
+        });
+
         // 调用
         Long deptId = deptService.createDept(reqVO);
         // 断言
@@ -114,11 +116,11 @@ public class DeptServiceTest extends BaseDbUnitTest {
         DeptDO deptDO = deptMapper.selectById(deptId);
         assertPojoEquals(reqVO, deptDO);
         // 校验调用
-        verify(deptProducer, times(1)).sendDeptRefreshMessage();
+        verify(deptProducer).sendDeptRefreshMessage();
     }
 
     @Test
-    void testUpdateDept_success() {
+    public void testUpdateDept_success() {
         // mock 数据
         DeptDO dbDeptDO = randomPojo(DeptDO.class, o -> o.setStatus(randomCommonStatus()));
         deptMapper.insert(dbDeptDO);// @Sql: 先插入出一条存在的数据
@@ -129,28 +131,34 @@ public class DeptServiceTest extends BaseDbUnitTest {
             o.setId(dbDeptDO.getId());
             o.setStatus(randomCommonStatus());
         });
+
         // 调用
         deptService.updateDept(reqVO);
         // 校验是否更新正确
         DeptDO deptDO = deptMapper.selectById(reqVO.getId()); // 获取最新的
         assertPojoEquals(reqVO, deptDO);
+        // 校验调用
+        verify(deptProducer).sendDeptRefreshMessage();
     }
 
     @Test
-    void testDeleteDept_success() {
+    public void testDeleteDept_success() {
         // mock 数据
         DeptDO dbDeptDO = randomPojo(DeptDO.class, o -> o.setStatus(randomCommonStatus()));
         deptMapper.insert(dbDeptDO);// @Sql: 先插入出一条存在的数据
         // 准备参数
         Long id = dbDeptDO.getId();
+
         // 调用
         deptService.deleteDept(id);
         // 校验数据不存在了
         assertNull(deptMapper.selectById(id));
+        // 校验调用
+        verify(deptProducer).sendDeptRefreshMessage();
     }
 
     @Test
-    void testCheckDept_nameDuplicateForUpdate() {
+    public void testValidateDept_nameDuplicateForUpdate() {
         // mock 数据
         DeptDO deptDO = randomDeptDO();
         // 设置根节点部门
@@ -162,37 +170,40 @@ public class DeptServiceTest extends BaseDbUnitTest {
         nameDeptDO.setParentId(DeptIdEnum.ROOT.getId());
         deptMapper.insert(nameDeptDO);
         // 准备参数
-        DeptUpdateReqVO reqVO = randomPojo(DeptUpdateReqVO.class,
-            o -> {
-                // 设置根节点部门
-                o.setParentId(DeptIdEnum.ROOT.getId());
-                // 设置更新的 ID
-                o.setId(deptDO.getId());
-                // 模拟 name 重复
-                o.setName(nameDeptDO.getName());
-            });
+        DeptUpdateReqVO reqVO = randomPojo(DeptUpdateReqVO.class, o -> {
+            // 设置根节点部门
+            o.setParentId(DeptIdEnum.ROOT.getId());
+            // 设置更新的 ID
+            o.setId(deptDO.getId());
+            // 模拟 name 重复
+            o.setName(nameDeptDO.getName());
+        });
+
         // 调用, 并断言异常
         assertServiceException(() -> deptService.updateDept(reqVO), DEPT_NAME_DUPLICATE);
     }
 
     @Test
-    void testCheckDept_parentNotExitsForCreate() {
+    public void testValidateDept_parentNotExitsForCreate() {
+        // 准备参数
         DeptCreateReqVO reqVO = randomPojo(DeptCreateReqVO.class,
             o -> o.setStatus(randomCommonStatus()));
+
         // 调用,并断言异常
         assertServiceException(() -> deptService.createDept(reqVO), DEPT_PARENT_NOT_EXITS);
     }
 
     @Test
-    void testCheckDept_notFoundForDelete() {
+    public void testValidateDept_notFoundForDelete() {
         // 准备参数
         Long id = randomLongId();
+
         // 调用, 并断言异常
         assertServiceException(() -> deptService.deleteDept(id), DEPT_NOT_FOUND);
     }
 
     @Test
-    void testCheckDept_exitsChildrenForDelete() {
+   public void testValidateDept_exitsChildrenForDelete() {
         // mock 数据
         DeptDO parentDept = randomPojo(DeptDO.class, o -> o.setStatus(randomCommonStatus()));
         deptMapper.insert(parentDept);// @Sql: 先插入出一条存在的数据
@@ -208,39 +219,39 @@ public class DeptServiceTest extends BaseDbUnitTest {
     }
 
     @Test
-    void testCheckDept_parentErrorForUpdate() {
+    public void testValidateDept_parentErrorForUpdate() {
         // mock 数据
         DeptDO dbDeptDO = randomPojo(DeptDO.class, o -> o.setStatus(randomCommonStatus()));
         deptMapper.insert(dbDeptDO);
         // 准备参数
-        DeptUpdateReqVO reqVO = randomPojo(DeptUpdateReqVO.class,
-            o -> {
-                // 设置自己为父部门
-                o.setParentId(dbDeptDO.getId());
-                // 设置更新的 ID
-                o.setId(dbDeptDO.getId());
-            });
+        DeptUpdateReqVO reqVO = randomPojo(DeptUpdateReqVO.class, o -> {
+            // 设置自己为父部门
+            o.setParentId(dbDeptDO.getId());
+            // 设置更新的 ID
+            o.setId(dbDeptDO.getId());
+        });
+
         // 调用, 并断言异常
         assertServiceException(() -> deptService.updateDept(reqVO), DEPT_PARENT_ERROR);
     }
 
     @Test
-    void testCheckDept_notEnableForCreate() {
+    public void testValidateDept_notEnableForCreate() {
         // mock 数据
         DeptDO deptDO = randomPojo(DeptDO.class, o -> o.setStatus(CommonStatusEnum.DISABLE.getStatus()));
         deptMapper.insert(deptDO);
         // 准备参数
-        DeptCreateReqVO reqVO = randomPojo(DeptCreateReqVO.class,
-            o -> {
-                // 设置未启用的部门为副部门
-                o.setParentId(deptDO.getId());
-            });
+        DeptCreateReqVO reqVO = randomPojo(DeptCreateReqVO.class, o -> {
+            // 设置未启用的部门为父部门
+            o.setParentId(deptDO.getId());
+        });
+
         // 调用, 并断言异常
         assertServiceException(() -> deptService.createDept(reqVO), DEPT_NOT_ENABLE);
     }
 
     @Test
-    void testCheckDept_parentIsChildForUpdate() {
+    public void testCheckDept_parentIsChildForUpdate() {
         // mock 数据
         DeptDO parentDept = randomPojo(DeptDO.class, o -> o.setStatus(CommonStatusEnum.ENABLE.getStatus()));
         deptMapper.insert(parentDept);
@@ -251,18 +262,84 @@ public class DeptServiceTest extends BaseDbUnitTest {
         deptMapper.insert(childDept);
         // 初始化本地缓存
         deptService.initLocalCache();
+
         // 准备参数
-        DeptUpdateReqVO reqVO = randomPojo(DeptUpdateReqVO.class,
-            o -> {
-                // 设置自己的子部门为父部门
-                o.setParentId(childDept.getId());
-                // 设置更新的 ID
-                o.setId(parentDept.getId());
-            });
+        DeptUpdateReqVO reqVO = randomPojo(DeptUpdateReqVO.class, o -> {
+            // 设置自己的子部门为父部门
+            o.setParentId(childDept.getId());
+            // 设置更新的 ID
+            o.setId(parentDept.getId());
+        });
+
         // 调用, 并断言异常
         assertServiceException(() -> deptService.updateDept(reqVO), DEPT_PARENT_IS_CHILD);
     }
 
+    @Test
+    public void testGetDeptList() {
+        // mock 数据
+        DeptDO deptDO01 = randomDeptDO();
+        deptMapper.insert(deptDO01);
+        DeptDO deptDO02 = randomDeptDO();
+        deptMapper.insert(deptDO02);
+        // 准备参数
+        List<Long> ids = Arrays.asList(deptDO01.getId(), deptDO02.getId());
+
+        // 调用
+        List<DeptDO> deptDOList = deptService.getDeptList(ids);
+        // 断言
+        assertEquals(2, deptDOList.size());
+        assertEquals(deptDO01, deptDOList.get(0));
+        assertEquals(deptDO02, deptDOList.get(1));
+    }
+
+    @Test
+    public void testGetDept() {
+        // mock 数据
+        DeptDO deptDO = randomDeptDO();
+        deptMapper.insert(deptDO);
+        // 准备参数
+        Long id = deptDO.getId();
+
+        // 调用
+        DeptDO dbDept = deptService.getDept(id);
+        // 断言
+        assertEquals(deptDO, dbDept);
+    }
+
+    @Test
+    public void testValidateDeptList_success() {
+        // mock 数据
+        DeptDO deptDO = randomDeptDO().setStatus(CommonStatusEnum.ENABLE.getStatus());
+        deptMapper.insert(deptDO);
+        // 准备参数
+        List<Long> ids = singletonList(deptDO.getId());
+
+        // 调用,无需断言
+        deptService.validateDeptList(ids);
+    }
+
+    @Test
+    public void testValidateDeptList_notFound() {
+        // 准备参数
+        List<Long> ids = singletonList(randomLongId());
+
+        // 调用, 并断言异常
+        assertServiceException(() -> deptService.validateDeptList(ids), DEPT_NOT_FOUND);
+    }
+
+    @Test
+    public void testValidateDeptList_notEnable() {
+        // mock 数据
+        DeptDO deptDO = randomDeptDO().setStatus(CommonStatusEnum.DISABLE.getStatus());
+        deptMapper.insert(deptDO);
+        // 准备参数
+        List<Long> ids = singletonList(deptDO.getId());
+
+        // 调用, 并断言异常
+        assertServiceException(() -> deptService.validateDeptList(ids), DEPT_NOT_ENABLE);
+    }
+
     @SafeVarargs
     private static DeptDO randomDeptDO(Consumer<DeptDO>... consumers) {
         Consumer<DeptDO> consumer = (o) -> {

+ 1 - 1
yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/service/permission/PermissionServiceTest.java

@@ -509,7 +509,7 @@ public class PermissionServiceTest extends BaseDbUnitTest {
         when(userService.getUser(eq(1L))).thenReturn(new AdminUserDO().setDeptId(3L), null, null); // 最后返回 null 的目的,看看会不会重复调用
         // mock 方法(部门)
         DeptDO deptDO = randomPojo(DeptDO.class);
-        when(deptService.getDeptsByParentIdFromCache(eq(3L), eq(true)))
+        when(deptService.getDeptListByParentIdFromCache(eq(3L), eq(true)))
                 .thenReturn(singletonList(deptDO));
 
         // 调用

+ 3 - 3
yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImplTest.java

@@ -299,7 +299,7 @@ public class AdminUserServiceImplTest extends BaseDbUnitTest {
         reqVO.setDeptId(1L); // 其中,1L 是 2L 的父部门
         // mock 方法
         List<DeptDO> deptList = newArrayList(randomPojo(DeptDO.class, o -> o.setId(2L)));
-        when(deptService.getDeptsByParentIdFromCache(eq(reqVO.getDeptId()), eq(true))).thenReturn(deptList);
+        when(deptService.getDeptListByParentIdFromCache(eq(reqVO.getDeptId()), eq(true))).thenReturn(deptList);
 
         // 调用
         PageResult<AdminUserDO> pageResult = userService.getUserPage(reqVO);
@@ -322,7 +322,7 @@ public class AdminUserServiceImplTest extends BaseDbUnitTest {
         reqVO.setDeptId(1L); // 其中,1L 是 2L 的父部门
         // mock 方法
         List<DeptDO> deptList = newArrayList(randomPojo(DeptDO.class, o -> o.setId(2L)));
-        when(deptService.getDeptsByParentIdFromCache(eq(reqVO.getDeptId()), eq(true))).thenReturn(deptList);
+        when(deptService.getDeptListByParentIdFromCache(eq(reqVO.getDeptId()), eq(true))).thenReturn(deptList);
 
         // 调用
         List<AdminUserDO> list = userService.getUsers(reqVO);
@@ -366,7 +366,7 @@ public class AdminUserServiceImplTest extends BaseDbUnitTest {
         UserImportExcelVO importUser = randomPojo(UserImportExcelVO.class, o -> {
         });
         // mock 方法,模拟失败
-        doThrow(new ServiceException(DEPT_NOT_FOUND)).when(deptService).validDepts(any());
+        doThrow(new ServiceException(DEPT_NOT_FOUND)).when(deptService).validateDeptList(any());
 
         // 调用
         UserImportRespVO respVO = userService.importUsers(newArrayList(importUser), true);