From 6de15528a3ba8f9c87d9aaffe895e69fdcdc9026 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期五, 16 十月 2026 21:28:43 +0800
Subject: [PATCH] fix(system): 修复用户导入「覆盖」分支不可达,导入测试对齐新模板列
---
yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImplTest.java | 117 +++++++++++++++++++++++----------------
yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java | 13 ++-
2 files changed, 77 insertions(+), 53 deletions(-)
diff --git a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java
index 6a832ad..fc11221 100644
--- a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java
+++ b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java
@@ -542,13 +542,13 @@
UserSaveReqVO saveReqVO = BeanUtils.toBean(importUser, UserSaveReqVO.class)
.setUsername(username).setDeptId(deptId).setPostIds(postIds).setPassword(password);
validateUserImportRow(saveReqVO, password);
- // 2.1.3 鏍¢獙鐢ㄦ埛璐﹀彿銆佹墜鏈哄彿銆侀偖绠卞敮涓�锛屼互鍙婇儴闂ㄣ�佸矖浣嶅彲鐢�
- validateUserForCreateOrUpdate(null, username, saveReqVO.getMobile(), saveReqVO.getEmail(),
- deptId, postIds);
- // 2.2.1 鍒ゆ柇濡傛灉涓嶅瓨鍦紝鍦ㄨ繘琛屾彃鍏�
+ // 2.2.1 鍒ゆ柇濡傛灉涓嶅瓨鍦紝杩涜鎻掑叆
AdminUserDO existUser = userMapper.selectByUsername(username);
if (existUser == null) {
+ // 2.2.2 鏍¢獙鐢ㄦ埛璐﹀彿銆佹墜鏈哄彿銆侀偖绠卞敮涓�锛屼互鍙婇儴闂ㄣ�佸矖浣嶅彲鐢�
+ validateUserForCreateOrUpdate(null, username, saveReqVO.getMobile(), saveReqVO.getEmail(),
+ deptId, postIds);
AdminUserDO user = BeanUtils.toBean(saveReqVO, AdminUserDO.class)
.setPassword(encodePassword(password))
.setStatus(ObjUtil.defaultIfNull(importUser.getStatus(),
@@ -558,11 +558,14 @@
respVO.getCreateUsernames().add(username);
return;
}
- // 2.2.2 濡傛灉瀛樺湪锛屽垽鏂槸鍚﹀厑璁告洿鏂�
+ // 2.2.3 濡傛灉瀛樺湪锛屽垽鏂槸鍚﹀厑璁告洿鏂�
if (!isUpdateSupport) {
throw new ServiceException(USER_USERNAME_EXISTS.getCode(),
"鐢ㄦ埛璐﹀彿宸插瓨鍦ㄣ�傚闇�瑕嗙洊杩欎釜鐢ㄦ埛锛岃鍕鹃�夈�屾槸鍚﹁鐩栥�嶅悗閲嶆柊瀵煎叆锛涘惁鍒欒淇敼 Excel 涓殑鐢ㄦ埛璐﹀彿");
}
+ // 2.2.4 瑕嗙洊鏃舵寜鏇存柊鏍¢獙锛堝甫涓婄敤鎴风紪鍙凤紝鍞竴鎬ф牎楠屼細璺宠繃杩欎釜鐢ㄦ埛鑷繁锛�
+ validateUserForCreateOrUpdate(existUser.getId(), username, saveReqVO.getMobile(),
+ saveReqVO.getEmail(), deptId, postIds);
AdminUserDO updateUser = BeanUtils.toBean(saveReqVO, AdminUserDO.class)
.setId(existUser.getId()).setPassword(null) // 瑕嗙洊鏃朵笉鏀瑰瘑鐮侊紝閬垮厤鎶婂湪鐢ㄨ处鍙风殑瀵嗙爜鏀规帀
.setStatus(importUser.getStatus()); //銆岃处鍙风姸鎬併�嶇暀绌烘椂淇濇寔鍘熺姸鎬�
diff --git a/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImplTest.java b/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImplTest.java
index 68c8510..804e510 100644
--- a/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImplTest.java
+++ b/yudao-module-system/src/test/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImplTest.java
@@ -9,6 +9,7 @@
import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
import cn.iocoder.yudao.module.infra.api.config.ConfigApi;
import cn.iocoder.yudao.module.infra.api.file.FileApi;
+import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptListReqVO;
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.user.UserImportExcelVO;
@@ -37,6 +38,7 @@
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.test.context.bean.override.mockito.MockitoBean;
+import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
@@ -417,20 +419,20 @@
@Test
public void testImportUserList_01() {
// 鍑嗗鍙傛暟
- UserImportExcelVO importUser = randomPojo(UserImportExcelVO.class, o -> {
- o.setEmail(randomEmail());
- o.setMobile(randomMobile());
- });
+ UserImportExcelVO importUser = randomImportUser(o -> o.setUsername(randomString()));
+ // mock 閮ㄩ棬銆佸矖浣嶏紝璁┿�岄儴闂ㄣ�嶃�屽矖浣嶃�嶄袱鍒楄兘瑙f瀽鍒�
+ mockDeptAndPostList("鐮斿彂閮�", "鏅�氬憳宸�");
// mock 鏂规硶锛屾ā鎷熷け璐�
doThrow(new ServiceException(DEPT_NOT_FOUND)).when(deptService).validateDeptList(any());
// 璋冪敤
UserImportRespVO respVO = userService.importUserList(newArrayList(importUser), true);
- // 鏂█
+ // 鏂█锛氬け璐ユ槑缁嗙殑 key 瀹氫綅鍒板叿浣撹
assertEquals(0, respVO.getCreateUsernames().size());
assertEquals(0, respVO.getUpdateUsernames().size());
assertEquals(1, respVO.getFailureUsernames().size());
- assertEquals(DEPT_NOT_FOUND.getMsg(), respVO.getFailureUsernames().get(importUser.getUsername()));
+ assertEquals(DEPT_NOT_FOUND.getMsg(),
+ respVO.getFailureUsernames().get(buildRowKey(1, importUser.getUsername())));
}
/**
@@ -439,18 +441,9 @@
@Test
public void testImportUserList_02() {
// 鍑嗗鍙傛暟
- UserImportExcelVO importUser = randomPojo(UserImportExcelVO.class, o -> {
- o.setStatus(randomEle(CommonStatusEnum.values()).getStatus()); // 淇濊瘉 status 鐨勮寖鍥�
- o.setSex(randomEle(SexEnum.values()).getSex()); // 淇濊瘉 sex 鐨勮寖鍥�
- o.setEmail(randomEmail());
- o.setMobile(randomMobile());
- });
- // mock deptService 鐨勬柟娉�
- DeptDO dept = randomPojo(DeptDO.class, o -> {
- o.setId(importUser.getDeptId());
- o.setStatus(CommonStatusEnum.ENABLE.getStatus());
- });
- when(deptService.getDept(eq(dept.getId()))).thenReturn(dept);
+ UserImportExcelVO importUser = randomImportUser(o -> o.setUsername(randomString()));
+ // mock 閮ㄩ棬銆佸矖浣�
+ Long deptId = mockDeptAndPostList("鐮斿彂閮�", "鏅�氬憳宸�");
// mock passwordEncoder 鐨勬柟娉�
when(passwordEncoder.encode(eq("yudaoyuanma"))).thenReturn("java");
@@ -459,8 +452,10 @@
// 鏂█
assertEquals(1, respVO.getCreateUsernames().size());
AdminUserDO user = userMapper.selectByUsername(respVO.getCreateUsernames().get(0));
- assertPojoEquals(importUser, user);
+ assertPojoEquals(importUser, user, "dept", "post", "password"); // dept銆乸ost 鍦ㄥ簱閲屽瓨鐨勬槸缂栧彿
assertEquals("java", user.getPassword());
+ assertEquals(deptId, user.getDeptId()); //銆岄儴闂ㄣ�嶅垪濉殑鍚嶇О缈昏瘧鎴愪簡閮ㄩ棬缂栧彿
+ assertEquals(1, userPostMapper.selectListByUserId(user.getId()).size()); //銆屽矖浣嶃�嶅垪鍚屾鍐欏叆浜嗙敤鎴�-宀椾綅鍏宠仈
assertEquals(0, respVO.getUpdateUsernames().size());
assertEquals(0, respVO.getFailureUsernames().size());
}
@@ -474,27 +469,20 @@
AdminUserDO dbUser = randomAdminUserDO();
userMapper.insert(dbUser);
// 鍑嗗鍙傛暟
- UserImportExcelVO importUser = randomPojo(UserImportExcelVO.class, o -> {
- o.setStatus(randomEle(CommonStatusEnum.values()).getStatus()); // 淇濊瘉 status 鐨勮寖鍥�
- o.setSex(randomEle(SexEnum.values()).getSex()); // 淇濊瘉 sex 鐨勮寖鍥�
- o.setUsername(dbUser.getUsername());
- o.setEmail(randomEmail());
- o.setMobile(randomMobile());
- });
- // mock deptService 鐨勬柟娉�
- DeptDO dept = randomPojo(DeptDO.class, o -> {
- o.setId(importUser.getDeptId());
- o.setStatus(CommonStatusEnum.ENABLE.getStatus());
- });
- when(deptService.getDept(eq(dept.getId()))).thenReturn(dept);
+ UserImportExcelVO importUser = randomImportUser(o -> o.setUsername(dbUser.getUsername()));
+ // mock 閮ㄩ棬銆佸矖浣�
+ mockDeptAndPostList("鐮斿彂閮�", "鏅�氬憳宸�");
// 璋冪敤
UserImportRespVO respVO = userService.importUserList(newArrayList(importUser), false);
- // 鏂█
+ // 鏂█锛氭彁绀洪噷瑕佸憡璇夌敤鎴锋�庝箞鏀癸紙鍕鹃�夎鐩栨垨鎹㈣处鍙凤級
assertEquals(0, respVO.getCreateUsernames().size());
assertEquals(0, respVO.getUpdateUsernames().size());
assertEquals(1, respVO.getFailureUsernames().size());
- assertEquals(USER_USERNAME_EXISTS.getMsg(), respVO.getFailureUsernames().get(importUser.getUsername()));
+ String failureMessage = respVO.getFailureUsernames().get(buildRowKey(1, dbUser.getUsername()));
+ assertNotNull(failureMessage);
+ assertTrue(failureMessage.startsWith("鐢ㄦ埛璐﹀彿宸插瓨鍦�"));
+ assertTrue(failureMessage.contains("鏄惁瑕嗙洊"));
}
/**
@@ -506,19 +494,9 @@
AdminUserDO dbUser = randomAdminUserDO();
userMapper.insert(dbUser);
// 鍑嗗鍙傛暟
- UserImportExcelVO importUser = randomPojo(UserImportExcelVO.class, o -> {
- o.setStatus(randomEle(CommonStatusEnum.values()).getStatus()); // 淇濊瘉 status 鐨勮寖鍥�
- o.setSex(randomEle(SexEnum.values()).getSex()); // 淇濊瘉 sex 鐨勮寖鍥�
- o.setUsername(dbUser.getUsername());
- o.setEmail(randomEmail());
- o.setMobile(randomMobile());
- });
- // mock deptService 鐨勬柟娉�
- DeptDO dept = randomPojo(DeptDO.class, o -> {
- o.setId(importUser.getDeptId());
- o.setStatus(CommonStatusEnum.ENABLE.getStatus());
- });
- when(deptService.getDept(eq(dept.getId()))).thenReturn(dept);
+ UserImportExcelVO importUser = randomImportUser(o -> o.setUsername(dbUser.getUsername()));
+ // mock 閮ㄩ棬銆佸矖浣�
+ Long deptId = mockDeptAndPostList("鐮斿彂閮�", "鏅�氬憳宸�");
// 璋冪敤
UserImportRespVO respVO = userService.importUserList(newArrayList(importUser), true);
@@ -526,10 +504,53 @@
assertEquals(0, respVO.getCreateUsernames().size());
assertEquals(1, respVO.getUpdateUsernames().size());
AdminUserDO user = userMapper.selectByUsername(respVO.getUpdateUsernames().get(0));
- assertPojoEquals(importUser, user);
+ assertPojoEquals(importUser, user, "dept", "post", "password"); // dept銆乸ost 鍦ㄥ簱閲屽瓨鐨勬槸缂栧彿
+ assertEquals(deptId, user.getDeptId());
+ assertEquals(dbUser.getPassword(), user.getPassword()); // 瑕嗙洊鏃朵笉鑳芥妸鍦ㄧ敤璐﹀彿鐨勫瘑鐮佹敼鎺�
+ assertEquals(1, userPostMapper.selectListByUserId(user.getId()).size());
assertEquals(0, respVO.getFailureUsernames().size());
}
+ /**
+ * 鐢熸垚涓�涓�岄儴闂ㄣ�佸矖浣嶃�佸瘑鐮併�嶉兘濉ソ鐨勫鍏ヨ锛�
+ * 閮ㄩ棬銆佸矖浣嶅~鐨勬槸鍚嶇О锛堢敤浜庢牎楠屽悕绉扮炕璇戞垚缂栧彿锛夛紝瀵嗙爜鐣欑┖锛堢敤浜庢牎楠岃蛋绯荤粺閰嶇疆鐨勫垵濮嬪瘑鐮侊級
+ */
+ private UserImportExcelVO randomImportUser(Consumer<UserImportExcelVO> consumer) {
+ return randomPojo(UserImportExcelVO.class, o -> {
+ o.setStatus(randomEle(CommonStatusEnum.values()).getStatus()); // 淇濊瘉 status 鐨勮寖鍥�
+ o.setSex(randomEle(SexEnum.values()).getSex()); // 淇濊瘉 sex 鐨勮寖鍥�
+ o.setEmail(randomEmail());
+ o.setMobile(randomMobile());
+ o.setDept("鐮斿彂閮�");
+ o.setPost("鏅�氬憳宸�");
+ o.setPassword(null);
+ consumer.accept(o);
+ });
+ }
+
+ /** mock 閮ㄩ棬銆佸矖浣嶇殑鍒楄〃鏌ヨ锛岃銆岄儴闂ㄣ�嶃�屽矖浣嶃�嶄袱鍒楀~鍐欑殑鍚嶇О鑳借В鏋愬埌锛涜繑鍥為儴闂ㄧ殑缂栧彿 */
+ private Long mockDeptAndPostList(String deptName, String... postNames) {
+ DeptDO dept = randomPojo(DeptDO.class, o -> {
+ o.setName(deptName);
+ o.setStatus(CommonStatusEnum.ENABLE.getStatus());
+ });
+ when(deptService.getDeptList(any(DeptListReqVO.class))).thenReturn(newArrayList(dept));
+ List<PostDO> posts = new ArrayList<>();
+ for (String postName : postNames) {
+ posts.add(randomPojo(PostDO.class, o -> {
+ o.setName(postName);
+ o.setStatus(CommonStatusEnum.ENABLE.getStatus());
+ }));
+ }
+ when(postService.getPostList(any(), any())).thenReturn(posts);
+ return dept.getId();
+ }
+
+ /** 澶辫触鏄庣粏鐨� key锛氫笌 AdminUserServiceImpl#importUserList 閲屾嫾鐨勮鍙锋枃妗堜繚鎸佷竴鑷� */
+ private String buildRowKey(int rowIndex, String username) {
+ return "绗� " + rowIndex + " 琛屻��" + username + "銆�";
+ }
+
@Test
public void testValidateUserExists_notExists() {
assertServiceException(() -> userService.validateUserExists(randomLongId()), USER_NOT_EXISTS);
--
Gitblit v1.9.3