Commit 40c9449f3922b141d589991b4eed9ff57c55a1d3

Authored by YunaiV
1 parent 5998e7f9

fix: 优化对 JDK8 的兼容性

Showing 18 changed files with 226 additions and 207 deletions
yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/controller/admin/face/ImFacePackController.java
1 1 package cn.iocoder.yudao.module.im.controller.admin.face;
2 2  
  3 +import cn.hutool.core.collection.ListUtil;
3 4 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
4 5 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
5 6 import cn.iocoder.yudao.module.im.controller.admin.face.vo.pack.ImFacePackUserRespVO;
... ... @@ -39,7 +40,7 @@ public class ImFacePackController {
39 40 // 1.1 拉所有启用表情包
40 41 List<ImFacePackDO> packs = facePackService.getEnabledFacePackList();
41 42 if (packs.isEmpty()) {
42   - return success(List.of());
  43 + return success(ListUtil.of());
43 44 }
44 45 // 1.2 拉这些包下所有启用表情,按 packId 分组
45 46 List<ImFacePackItemDO> items = facePackItemService.getEnabledItemListByPackIds(
... ... @@ -49,7 +50,7 @@ public class ImFacePackController {
49 50 // 2. 拼装:BeanUtils 把 pack 字段映射 + 自己塞 items
50 51 List<ImFacePackUserRespVO> result = convertList(packs, pack -> {
51 52 ImFacePackUserRespVO vo = BeanUtils.toBean(pack, ImFacePackUserRespVO.class);
52   - vo.setItems(BeanUtils.toBean(itemsByPackId.getOrDefault(pack.getId(), List.of()), ImFacePackUserRespVO.Item.class));
  53 + vo.setItems(BeanUtils.toBean(itemsByPackId.getOrDefault(pack.getId(), ListUtil.of()), ImFacePackUserRespVO.Item.class));
53 54 return vo;
54 55 });
55 56 return success(result);
... ...
yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/enums/message/ImMessageTypeEnum.java
1 1 package cn.iocoder.yudao.module.im.enums.message;
2 2  
  3 +import cn.hutool.core.collection.CollUtil;
3 4 import cn.hutool.core.lang.Assert;
4 5 import cn.hutool.core.util.ArrayUtil;
5 6 import cn.iocoder.yudao.framework.common.core.ArrayValuable;
... ... @@ -340,7 +341,7 @@ public enum ImMessageTypeEnum implements ArrayValuable&lt;Integer&gt; {
340 341  
341 342 public static final Integer[] ARRAYS = Arrays.stream(values()).map(ImMessageTypeEnum::getType).toArray(Integer[]::new);
342 343  
343   - private static final Set<Integer> FRIEND_NOTIFICATION_TYPES = Set.of(
  344 + private static final Set<Integer> FRIEND_NOTIFICATION_TYPES = CollUtil.newHashSet(
344 345 FRIEND_REQUEST_APPROVED.type,
345 346 FRIEND_REQUEST_REJECTED.type,
346 347 FRIEND_REQUEST_RECEIVED.type,
... ... @@ -351,12 +352,12 @@ public enum ImMessageTypeEnum implements ArrayValuable&lt;Integer&gt; {
351 352 FRIEND_INFO_UPDATED.type,
352 353 FRIEND_UPDATE.type);
353 354  
354   - private static final Set<Integer> GROUP_REQUEST_NOTIFICATION_TYPES = Set.of(
  355 + private static final Set<Integer> GROUP_REQUEST_NOTIFICATION_TYPES = CollUtil.newHashSet(
355 356 GROUP_REQUEST_RECEIVED.type,
356 357 GROUP_REQUEST_APPROVED.type,
357 358 GROUP_REQUEST_REJECTED.type);
358 359  
359   - private static final Set<Integer> RTC_NOTIFICATION_TYPES = Set.of(
  360 + private static final Set<Integer> RTC_NOTIFICATION_TYPES = CollUtil.newHashSet(
360 361 RTC_CALL.type,
361 362 RTC_PARTICIPANT_CONNECTED.type,
362 363 RTC_PARTICIPANT_DISCONNECTED.type);
... ...
yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/service/friend/ImFriendRequestServiceImpl.java
1 1 package cn.iocoder.yudao.module.im.service.friend;
2 2  
  3 +import cn.hutool.core.collection.ListUtil;
3 4 import cn.hutool.core.util.BooleanUtil;
4 5 import cn.hutool.core.util.ObjUtil;
5 6 import cn.hutool.extra.spring.SpringUtil;
... ... @@ -172,7 +173,7 @@ public class ImFriendRequestServiceImpl implements ImFriendRequestService {
172 173 // 1.1 校验申请存在、未处理、操作人是接收方
173 174 ImFriendRequestDO request = validateRequestForHandle(userId, requestId);
174 175 // 1.2 复验双方用户有效
175   - adminUserApi.validateUserList(List.of(request.getFromUserId(), request.getToUserId()));
  176 + adminUserApi.validateUserList(ListUtil.of(request.getFromUserId(), request.getToUserId()));
176 177  
177 178 // 2. 乐观锁更新申请处理结果
178 179 ImFriendRequestDO updateObj = new ImFriendRequestDO()
... ... @@ -224,7 +225,7 @@ public class ImFriendRequestServiceImpl implements ImFriendRequestService {
224 225 public List<ImFriendRequestDO> getMyFriendRequestList(Long userId, Long maxId, Integer limit) {
225 226 ImFriendRequestDO maxRequest = maxId != null ? friendRequestMapper.selectById(maxId) : null;
226 227 if (maxId != null && maxRequest == null) {
227   - return List.of();
  228 + return ListUtil.of();
228 229 }
229 230 return friendRequestMapper.selectMyList(userId,
230 231 maxRequest != null ? maxRequest.getUpdateTime() : null,
... ...
yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/service/group/ImGroupMemberServiceImpl.java
1 1 package cn.iocoder.yudao.module.im.service.group;
2 2  
3 3 import cn.hutool.core.collection.CollUtil;
  4 +import cn.hutool.core.collection.ListUtil;
4 5 import cn.hutool.core.util.ObjUtil;
5 6 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
6 7 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
... ... @@ -78,7 +79,7 @@ public class ImGroupMemberServiceImpl implements ImGroupMemberService {
78 79 public List<ImGroupMemberDO> getGroupMemberListByOwnerAndAdmin(Long groupId) {
79 80 // TODO DONE @AI:把条件往下传;这样减少加载数据量!
80 81 return groupMemberMapper.selectListByGroupIdAndStatusAndRoles(groupId, CommonStatusEnum.ENABLE.getStatus(),
81   - List.of(ImGroupMemberRoleEnum.OWNER.getRole(), ImGroupMemberRoleEnum.ADMIN.getRole()));
  82 + ListUtil.of(ImGroupMemberRoleEnum.OWNER.getRole(), ImGroupMemberRoleEnum.ADMIN.getRole()));
82 83 }
83 84  
84 85 /**
... ... @@ -270,7 +271,7 @@ public class ImGroupMemberServiceImpl implements ImGroupMemberService {
270 271 boolean groupRemarkChanged = updateReqVO.getGroupRemark() != null
271 272 && ObjUtil.notEqual(updateReqVO.getGroupRemark(), member.getGroupRemark());
272 273 if (silentChanged || groupRemarkChanged) {
273   - groupMessageService.sendGroupMessage(userId, List.of(userId), ImGroupMessageSendDTO.ofGroupMemberSettingUpdate(
  274 + groupMessageService.sendGroupMessage(userId, ListUtil.of(userId), ImGroupMessageSendDTO.ofGroupMemberSettingUpdate(
274 275 groupId, userId, updateReqVO.getSilent(), updateReqVO.getGroupRemark()));
275 276 }
276 277 }
... ...
yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/service/group/ImGroupServiceImpl.java
... ... @@ -28,10 +28,10 @@ import cn.iocoder.yudao.module.im.dal.dataobject.group.ImGroupMemberDO;
28 28 import cn.iocoder.yudao.module.im.dal.dataobject.message.ImGroupMessageDO;
29 29 import cn.iocoder.yudao.module.im.dal.mysql.group.ImGroupMapper;
30 30 import cn.iocoder.yudao.module.im.enums.group.ImGroupAddSourceEnum;
31   -import cn.iocoder.yudao.module.im.framework.config.ImProperties;
32 31 import cn.iocoder.yudao.module.im.enums.group.ImGroupMemberRoleEnum;
33 32 import cn.iocoder.yudao.module.im.enums.message.ImMessageStatusEnum;
34 33 import cn.iocoder.yudao.module.im.enums.message.ImMessageTypeEnum;
  34 +import cn.iocoder.yudao.module.im.framework.config.ImProperties;
35 35 import cn.iocoder.yudao.module.im.service.friend.ImFriendService;
36 36 import cn.iocoder.yudao.module.im.service.message.ImGroupMessageService;
37 37 import cn.iocoder.yudao.module.im.service.message.dto.ImGroupMessageSendDTO;
... ... @@ -413,12 +413,12 @@ public class ImGroupServiceImpl implements ImGroupService {
413 413 ImGroupMemberDO newOwner = groupMemberService.validateMemberInGroup(groupId, newOwnerUserId);
414 414  
415 415 // 2.1 更新成员角色
416   - int newOwnerAffected = groupMemberService.updateGroupMemberRole(groupId, Set.of(newOwner.getUserId()),
  416 + int newOwnerAffected = groupMemberService.updateGroupMemberRole(groupId, CollUtil.newHashSet(newOwner.getUserId()),
417 417 ImGroupMemberRoleEnum.OWNER.getRole());
418 418 if (newOwnerAffected != 1) {
419 419 throw exception(GROUP_MEMBER_NOT_IN_GROUP);
420 420 }
421   - int oldOwnerAffected = groupMemberService.updateGroupMemberRole(groupId, Set.of(userId),
  421 + int oldOwnerAffected = groupMemberService.updateGroupMemberRole(groupId, CollUtil.newHashSet(userId),
422 422 ImGroupMemberRoleEnum.NORMAL.getRole());
423 423 if (oldOwnerAffected != 1) {
424 424 throw exception(GROUP_MEMBER_NOT_IN_GROUP);
... ...
yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/service/message/ImGroupMessageServiceImpl.java
... ... @@ -41,6 +41,7 @@ import org.springframework.validation.annotation.Validated;
41 41  
42 42 import java.time.LocalDateTime;
43 43 import java.util.*;
  44 +import java.util.stream.Collectors;
44 45  
45 46 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
46 47 import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.*;
... ... @@ -295,7 +296,7 @@ public class ImGroupMessageServiceImpl implements ImGroupMessageService {
295 296 .filter(msg -> isMessageVisible(msg, memberMap.get(msg.getGroupId()), userId))
296 297 .sorted(Comparator.comparing(ImGroupMessageDO::getId))
297 298 .limit(size)
298   - .toList();
  299 + .collect(Collectors.toList());
299 300 }
300 301  
301 302 /**
... ...
yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/util/ImMessageUtils.java
... ... @@ -87,12 +87,15 @@ public class ImMessageUtils {
87 87 validateNotBlank(getString(map, "name"));
88 88 }
89 89  
  90 + @SuppressWarnings("PatternVariableCanBeUsed")
90 91 private static void validateMergeContent(Map<String, Object> map) {
91 92 validateNotBlank(getString(map, "title"));
92 93 Object messages = map.get("messages");
93   - if (!(messages instanceof Collection<?> messageList)
94   - || CollUtil.isEmpty(messageList)
95   - || messageList.size() > MERGE_MESSAGE_MAX_COUNT) {
  94 + if (!(messages instanceof Collection)) {
  95 + throw exception(MESSAGE_CONTENT_INVALID);
  96 + }
  97 + Collection<?> messageList = (Collection<?>) messages;
  98 + if (CollUtil.isEmpty(messageList) || messageList.size() > MERGE_MESSAGE_MAX_COUNT) {
96 99 throw exception(MESSAGE_CONTENT_INVALID);
97 100 }
98 101 }
... ...
yudao-module-im/src/test/java/cn/iocoder/yudao/module/im/dal/mysql/message/ImGroupMessageMapperTest.java
... ... @@ -10,6 +10,7 @@ import org.junit.jupiter.api.Test;
10 10 import java.time.LocalDateTime;
11 11 import java.util.List;
12 12  
  13 +import static cn.iocoder.yudao.module.im.util.ImTestCollectionUtils.*;
13 14 import static org.junit.jupiter.api.Assertions.*;
14 15  
15 16 /**
... ... @@ -35,7 +36,7 @@ public class ImGroupMessageMapperTest extends BaseDbUnitTest {
35 36 mapper.insert(msg20);
36 37  
37 38 // 调用:只查群 10
38   - List<ImGroupMessageDO> result = mapper.selectListByMinId(List.of(10L), 0L, FAR_PAST, 100);
  39 + List<ImGroupMessageDO> result = mapper.selectListByMinId(listOf(10L), 0L, FAR_PAST, 100);
39 40  
40 41 // 断言:只有 msg10
41 42 assertEquals(1, result.size());
... ... @@ -50,7 +51,7 @@ public class ImGroupMessageMapperTest extends BaseDbUnitTest {
50 51 ImGroupMessageDO recalled = buildMessage(10L, 1L, ImMessageStatusEnum.RECALL);
51 52 mapper.insert(recalled);
52 53  
53   - List<ImGroupMessageDO> result = mapper.selectListByMinId(List.of(10L), 0L, FAR_PAST, 100);
  54 + List<ImGroupMessageDO> result = mapper.selectListByMinId(listOf(10L), 0L, FAR_PAST, 100);
54 55  
55 56 // 断言:撤回消息一并返回,由客户端按 status 切换渲染
56 57 assertEquals(2, result.size());
... ... @@ -66,7 +67,7 @@ public class ImGroupMessageMapperTest extends BaseDbUnitTest {
66 67 outWindow.setSendTime(LocalDateTime.now().minusDays(40));
67 68 mapper.insert(outWindow);
68 69  
69   - List<ImGroupMessageDO> result = mapper.selectListByMinId(List.of(10L), 0L,
  70 + List<ImGroupMessageDO> result = mapper.selectListByMinId(listOf(10L), 0L,
70 71 LocalDateTime.now().minusDays(30), 100);
71 72  
72 73 assertEquals(1, result.size());
... ... @@ -84,7 +85,7 @@ public class ImGroupMessageMapperTest extends BaseDbUnitTest {
84 85 mapper.insert(m3);
85 86  
86 87 // 调用:size=2,返回 id 最小的 2 条
87   - List<ImGroupMessageDO> result = mapper.selectListByMinId(List.of(10L), 0L, FAR_PAST, 2);
  88 + List<ImGroupMessageDO> result = mapper.selectListByMinId(listOf(10L), 0L, FAR_PAST, 2);
88 89  
89 90 assertEquals(2, result.size());
90 91 assertTrue(result.get(0).getId() < result.get(1).getId());
... ...
yudao-module-im/src/test/java/cn/iocoder/yudao/module/im/service/friend/ImFriendRequestServiceImplTest.java
... ... @@ -24,6 +24,7 @@ import java.time.LocalDateTime;
24 24 import java.util.List;
25 25  
26 26 import static cn.iocoder.yudao.module.im.enums.ErrorCodeConstants.*;
  27 +import static cn.iocoder.yudao.module.im.util.ImTestCollectionUtils.*;
27 28 import static org.junit.jupiter.api.Assertions.*;
28 29 import static org.mockito.ArgumentMatchers.any;
29 30 import static org.mockito.ArgumentMatchers.anyInt;
... ... @@ -228,7 +229,7 @@ public class ImFriendRequestServiceImplTest extends BaseMockitoUnitTest {
228 229 friendRequestService.agreeFriendRequest(2L, 100L);
229 230  
230 231 // 断言:双向建立好友 + 推 APPROVED 给发起方
231   - verify(adminUserApi).validateUserList(List.of(1L, 2L));
  232 + verify(adminUserApi).validateUserList(listOf(1L, 2L));
232 233 verify(friendService).becomeFriends(request);
233 234 verify(websocketService).sendPrivateMessageAsync(eq(1L), any(ImPrivateMessageDTO.class));
234 235 }
... ...
yudao-module-im/src/test/java/cn/iocoder/yudao/module/im/service/friend/ImFriendServiceImplTest.java
... ... @@ -22,6 +22,7 @@ import java.util.Collections;
22 22 import java.util.List;
23 23  
24 24 import static cn.iocoder.yudao.module.im.enums.ErrorCodeConstants.FRIEND_NOT_FRIEND;
  25 +import static cn.iocoder.yudao.module.im.util.ImTestCollectionUtils.*;
25 26 import static org.junit.jupiter.api.Assertions.*;
26 27 import static org.mockito.ArgumentMatchers.*;
27 28 import static org.mockito.Mockito.never;
... ... @@ -248,7 +249,7 @@ public class ImFriendServiceImplTest extends BaseMockitoUnitTest {
248 249  
249 250 @Test
250 251 public void testGetFriendList() {
251   - List<ImFriendDO> list = List.of(
  252 + List<ImFriendDO> list = listOf(
252 253 ImFriendDO.builder().id(1L).userId(1L).friendUserId(2L)
253 254 .status(CommonStatusEnum.ENABLE.getStatus()).build(),
254 255 ImFriendDO.builder().id(2L).userId(1L).friendUserId(3L)
... ... @@ -276,9 +277,9 @@ public class ImFriendServiceImplTest extends BaseMockitoUnitTest {
276 277 ImFriendDO friend3 = ImFriendDO.builder().id(2L).userId(1L).friendUserId(3L)
277 278 .status(CommonStatusEnum.ENABLE.getStatus()).build();
278 279 when(imFriendMapper.selectListByUserIdAndStatus(1L, CommonStatusEnum.ENABLE.getStatus()))
279   - .thenReturn(List.of(friend2, friend3));
  280 + .thenReturn(listOf(friend2, friend3));
280 281 when(imFriendMapper.selectListByUserIdsAndFriendUserIdAndStatus(anyCollection(), eq(1L),
281   - eq(CommonStatusEnum.ENABLE.getStatus()))).thenReturn(List.of(
  282 + eq(CommonStatusEnum.ENABLE.getStatus()))).thenReturn(listOf(
282 283 ImFriendDO.builder().userId(2L).friendUserId(1L)
283 284 .status(CommonStatusEnum.ENABLE.getStatus()).build()));
284 285  
... ...
yudao-module-im/src/test/java/cn/iocoder/yudao/module/im/service/group/ImGroupMemberServiceImplTest.java
... ... @@ -18,6 +18,7 @@ import org.springframework.dao.DuplicateKeyException;
18 18 import java.util.List;
19 19  
20 20 import static cn.iocoder.yudao.module.im.enums.ErrorCodeConstants.GROUP_MEMBER_NOT_IN_GROUP;
  21 +import static cn.iocoder.yudao.module.im.util.ImTestCollectionUtils.*;
21 22 import static org.junit.jupiter.api.Assertions.*;
22 23 import static org.mockito.ArgumentMatchers.*;
23 24 import static org.mockito.Mockito.*;
... ... @@ -116,10 +117,10 @@ public class ImGroupMemberServiceImplTest extends BaseMockitoUnitTest {
116 117 ImGroupMemberDO exist4 = ImGroupMemberDO.builder().id(40L).groupId(10L).userId(4L)
117 118 .status(CommonStatusEnum.ENABLE.getStatus()).build();
118 119 when(groupMemberMapper.selectListByGroupIdAndUserIds(eq(10L), anyCollection()))
119   - .thenReturn(List.of(exist3, exist4));
  120 + .thenReturn(listOf(exist3, exist4));
120 121  
121 122 // 调用
122   - groupMemberService.addGroupMembers(10L, List.of(2L, 3L, 4L));
  123 + groupMemberService.addGroupMembers(10L, listOf(2L, 3L, 4L));
123 124  
124 125 // 断言:updates 只有用户 3;inserts 只有用户 2
125 126 verify(groupMemberMapper).updateRejoinFields(eq(30L), eq(CommonStatusEnum.ENABLE.getStatus()),
... ... @@ -131,7 +132,7 @@ public class ImGroupMemberServiceImplTest extends BaseMockitoUnitTest {
131 132 @Test
132 133 public void testAddGroupMembers_allExisting_onlyUpdates() {
133 134 // 准备:传入的 3 个用户都已有记录(全部 DISABLE) → 只做 update,不做 insert
134   - List<ImGroupMemberDO> existing = List.of(
  135 + List<ImGroupMemberDO> existing = listOf(
135 136 ImGroupMemberDO.builder().id(1L).groupId(10L).userId(2L)
136 137 .status(CommonStatusEnum.DISABLE.getStatus()).build(),
137 138 ImGroupMemberDO.builder().id(2L).groupId(10L).userId(3L)
... ... @@ -140,7 +141,7 @@ public class ImGroupMemberServiceImplTest extends BaseMockitoUnitTest {
140 141 when(groupMemberMapper.selectListByGroupIdAndUserIds(eq(10L), anyCollection()))
141 142 .thenReturn(existing);
142 143  
143   - groupMemberService.addGroupMembers(10L, List.of(2L, 3L));
  144 + groupMemberService.addGroupMembers(10L, listOf(2L, 3L));
144 145  
145 146 verify(groupMemberMapper, times(2)).updateRejoinFields(anyLong(), eq(CommonStatusEnum.ENABLE.getStatus()),
146 147 any(), eq(ImGroupMemberRoleEnum.NORMAL.getRole()), isNull(), isNull());
... ... @@ -151,9 +152,9 @@ public class ImGroupMemberServiceImplTest extends BaseMockitoUnitTest {
151 152 public void testAddGroupMembers_allNew_onlyInserts() {
152 153 // 准备:都不存在 → 只做 insert
153 154 when(groupMemberMapper.selectListByGroupIdAndUserIds(eq(10L), anyCollection()))
154   - .thenReturn(List.of());
  155 + .thenReturn(listOf());
155 156  
156   - groupMemberService.addGroupMembers(10L, List.of(2L, 3L));
  157 + groupMemberService.addGroupMembers(10L, listOf(2L, 3L));
157 158  
158 159 verify(groupMemberMapper, never()).updateRejoinFields(anyLong(), anyInt(), any(), anyInt(), any(), any());
159 160 verify(groupMemberMapper).insertBatch(anyList());
... ... @@ -162,14 +163,14 @@ public class ImGroupMemberServiceImplTest extends BaseMockitoUnitTest {
162 163 @Test
163 164 public void testAddGroupMembers_allExistingEnabled_nothingHappens() {
164 165 // 准备:都已存在且 ENABLE → 既不 update 也不 insert
165   - List<ImGroupMemberDO> existing = List.of(
  166 + List<ImGroupMemberDO> existing = listOf(
166 167 ImGroupMemberDO.builder().id(1L).groupId(10L).userId(2L)
167 168 .status(CommonStatusEnum.ENABLE.getStatus()).build()
168 169 );
169 170 when(groupMemberMapper.selectListByGroupIdAndUserIds(eq(10L), anyCollection()))
170 171 .thenReturn(existing);
171 172  
172   - groupMemberService.addGroupMembers(10L, List.of(2L));
  173 + groupMemberService.addGroupMembers(10L, listOf(2L));
173 174  
174 175 verify(groupMemberMapper, never()).updateRejoinFields(anyLong(), anyInt(), any(), anyInt(), any(), any());
175 176 verify(groupMemberMapper, never()).insertBatch(anyList());
... ... @@ -179,14 +180,14 @@ public class ImGroupMemberServiceImplTest extends BaseMockitoUnitTest {
179 180 public void testAddGroupMembers_batchInsertDuplicateFallback() {
180 181 // 准备:两个新增成员,批量插入失败时降级为逐个 addGroupMember
181 182 when(groupMemberMapper.selectListByGroupIdAndUserIds(eq(10L), anyCollection()))
182   - .thenReturn(List.of());
  183 + .thenReturn(listOf());
183 184 doThrow(new DuplicateKeyException("concurrent batch insert"))
184 185 .when(groupMemberMapper).insertBatch(anyList());
185 186 // addGroupMember 单条兜底逻辑
186 187 when(groupMemberMapper.selectByGroupIdAndUserId(eq(10L), anyLong())).thenReturn(null);
187 188  
188 189 // 调用
189   - groupMemberService.addGroupMembers(10L, List.of(2L, 3L));
  190 + groupMemberService.addGroupMembers(10L, listOf(2L, 3L));
190 191  
191 192 // 断言:降级为逐条调用 insert
192 193 verify(groupMemberMapper, times(2)).insert(any(ImGroupMemberDO.class));
... ... @@ -244,7 +245,7 @@ public class ImGroupMemberServiceImplTest extends BaseMockitoUnitTest {
244 245 // 公开字段昵称变化 → 全员广播 GROUP_MEMBER_NICKNAME_UPDATE
245 246 verify(groupMessageService).sendGroupMessage(eq(1L), any(cn.iocoder.yudao.module.im.service.message.dto.ImGroupMessageSendDTO.class));
246 247 // 个人字段 silent 变化 → 仅自己多端同步 GROUP_MEMBER_SETTING_UPDATE
247   - verify(groupMessageService).sendGroupMessage(eq(1L), eq(java.util.List.of(1L)),
  248 + verify(groupMessageService).sendGroupMessage(eq(1L), eq(listOf(1L)),
248 249 any(cn.iocoder.yudao.module.im.service.message.dto.ImGroupMessageSendDTO.class));
249 250 }
250 251  
... ... @@ -278,7 +279,7 @@ public class ImGroupMemberServiceImplTest extends BaseMockitoUnitTest {
278 279  
279 280 @Test
280 281 public void testRemoveGroupMembers_batch() {
281   - groupMemberService.removeGroupMembers(10L, List.of(2L, 3L));
  282 + groupMemberService.removeGroupMembers(10L, listOf(2L, 3L));
282 283  
283 284 ArgumentCaptor<ImGroupMemberDO> captor = ArgumentCaptor.forClass(ImGroupMemberDO.class);
284 285 verify(groupMemberMapper).updateByGroupIdAndUserIdsAndStatus(eq(10L), anyCollection(),
... ... @@ -303,7 +304,7 @@ public class ImGroupMemberServiceImplTest extends BaseMockitoUnitTest {
303 304 @Test
304 305 public void testGetActiveGroupMemberUserIdsByGroupId_extractsUserIds() {
305 306 // 准备:3 个 ENABLE 成员
306   - List<ImGroupMemberDO> members = List.of(
  307 + List<ImGroupMemberDO> members = listOf(
307 308 ImGroupMemberDO.builder().groupId(10L).userId(1L)
308 309 .status(CommonStatusEnum.ENABLE.getStatus()).build(),
309 310 ImGroupMemberDO.builder().groupId(10L).userId(2L)
... ... @@ -318,13 +319,13 @@ public class ImGroupMemberServiceImplTest extends BaseMockitoUnitTest {
318 319 List<Long> userIds = groupMemberService.getActiveGroupMemberUserIdsByGroupId(10L);
319 320  
320 321 // 断言:只返回 userId、顺序保留
321   - assertEquals(List.of(1L, 2L, 3L), userIds);
  322 + assertEquals(listOf(1L, 2L, 3L), userIds);
322 323 }
323 324  
324 325 @Test
325 326 public void testGetActiveGroupMemberUserIdsByGroupId_emptyList() {
326 327 when(groupMemberMapper.selectListByGroupIdAndStatus(
327   - 10L, CommonStatusEnum.ENABLE.getStatus())).thenReturn(List.of());
  328 + 10L, CommonStatusEnum.ENABLE.getStatus())).thenReturn(listOf());
328 329  
329 330 List<Long> userIds = groupMemberService.getActiveGroupMemberUserIdsByGroupId(10L);
330 331  
... ... @@ -333,8 +334,8 @@ public class ImGroupMemberServiceImplTest extends BaseMockitoUnitTest {
333 334  
334 335 @Test
335 336 public void testGetGroupMemberListByOwnerAndAdmin_passesRoles() {
336   - List<Integer> roles = List.of(ImGroupMemberRoleEnum.OWNER.getRole(), ImGroupMemberRoleEnum.ADMIN.getRole());
337   - List<ImGroupMemberDO> members = List.of(ImGroupMemberDO.builder().groupId(10L).userId(1L).build());
  337 + List<Integer> roles = listOf(ImGroupMemberRoleEnum.OWNER.getRole(), ImGroupMemberRoleEnum.ADMIN.getRole());
  338 + List<ImGroupMemberDO> members = listOf(ImGroupMemberDO.builder().groupId(10L).userId(1L).build());
338 339 when(groupMemberMapper.selectListByGroupIdAndStatusAndRoles(10L, CommonStatusEnum.ENABLE.getStatus(), roles))
339 340 .thenReturn(members);
340 341  
... ...
yudao-module-im/src/test/java/cn/iocoder/yudao/module/im/service/group/ImGroupRequestServiceImplTest.java
... ... @@ -28,6 +28,7 @@ import java.util.Collection;
28 28 import java.util.List;
29 29  
30 30 import static cn.iocoder.yudao.module.im.enums.ErrorCodeConstants.*;
  31 +import static cn.iocoder.yudao.module.im.util.ImTestCollectionUtils.*;
31 32 import static org.junit.jupiter.api.Assertions.*;
32 33 import static org.mockito.ArgumentMatchers.*;
33 34 import static org.mockito.Mockito.*;
... ... @@ -93,7 +94,7 @@ public class ImGroupRequestServiceImplTest extends BaseMockitoUnitTest {
93 94 .status(CommonStatusEnum.ENABLE.getStatus()).build();
94 95 when(groupService.validateGroupExists(10L)).thenReturn(group);
95 96 // 群里有 owner + 一个 admin,作为 1503 推送目标
96   - when(groupMemberService.getGroupMemberListByOwnerAndAdmin(10L)).thenReturn(List.of(
  97 + when(groupMemberService.getGroupMemberListByOwnerAndAdmin(10L)).thenReturn(listOf(
97 98 ImGroupMemberDO.builder().groupId(10L).userId(99L)
98 99 .role(ImGroupMemberRoleEnum.OWNER.getRole())
99 100 .status(CommonStatusEnum.ENABLE.getStatus()).build(),
... ... @@ -125,7 +126,7 @@ public class ImGroupRequestServiceImplTest extends BaseMockitoUnitTest {
125 126 .joinApproval(true)
126 127 .status(CommonStatusEnum.ENABLE.getStatus()).build();
127 128 when(groupService.validateGroupExists(10L)).thenReturn(group);
128   - when(groupMemberService.getGroupMemberListByOwnerAndAdmin(10L)).thenReturn(List.of(
  129 + when(groupMemberService.getGroupMemberListByOwnerAndAdmin(10L)).thenReturn(listOf(
129 130 ImGroupMemberDO.builder().groupId(10L).userId(99L)
130 131 .role(ImGroupMemberRoleEnum.OWNER.getRole())
131 132 .status(CommonStatusEnum.ENABLE.getStatus()).build()));
... ... @@ -190,7 +191,7 @@ public class ImGroupRequestServiceImplTest extends BaseMockitoUnitTest {
190 191 ImGroupDO group = ImGroupDO.builder().id(10L).ownerUserId(99L)
191 192 .status(CommonStatusEnum.ENABLE.getStatus()).build();
192 193 when(groupService.getGroup(10L)).thenReturn(group);
193   - when(groupMemberService.getGroupMemberListByOwnerAndAdmin(10L)).thenReturn(List.of(
  194 + when(groupMemberService.getGroupMemberListByOwnerAndAdmin(10L)).thenReturn(listOf(
194 195 ImGroupMemberDO.builder().groupId(10L).userId(99L)
195 196 .role(ImGroupMemberRoleEnum.OWNER.getRole())
196 197 .status(CommonStatusEnum.ENABLE.getStatus()).build()));
... ... @@ -268,7 +269,7 @@ public class ImGroupRequestServiceImplTest extends BaseMockitoUnitTest {
268 269 ImGroupDO group = ImGroupDO.builder().id(10L).ownerUserId(1L)
269 270 .status(CommonStatusEnum.ENABLE.getStatus()).build();
270 271 when(groupService.getGroup(10L)).thenReturn(group);
271   - when(groupMemberService.getGroupMemberListByOwnerAndAdmin(10L)).thenReturn(List.of(
  272 + when(groupMemberService.getGroupMemberListByOwnerAndAdmin(10L)).thenReturn(listOf(
272 273 ImGroupMemberDO.builder().groupId(10L).userId(1L)
273 274 .role(ImGroupMemberRoleEnum.OWNER.getRole())
274 275 .status(CommonStatusEnum.ENABLE.getStatus()).build()));
... ... @@ -289,16 +290,16 @@ public class ImGroupRequestServiceImplTest extends BaseMockitoUnitTest {
289 290 .status(CommonStatusEnum.ENABLE.getStatus()).build();
290 291 when(groupService.validateGroupExists(10L)).thenReturn(group);
291 292 when(groupRequestMapper.selectByGroupIdAndUserId(eq(10L), anyLong())).thenReturn(null);
292   - when(groupMemberService.getGroupMemberListByOwnerAndAdmin(10L)).thenReturn(List.of(
  293 + when(groupMemberService.getGroupMemberListByOwnerAndAdmin(10L)).thenReturn(listOf(
293 294 ImGroupMemberDO.builder().groupId(10L).userId(99L)
294 295 .role(ImGroupMemberRoleEnum.OWNER.getRole())
295 296 .status(CommonStatusEnum.ENABLE.getStatus()).build()));
296   - when(adminUserApi.getUserMap(anyCollection())).thenReturn(java.util.Map.of(
  297 + when(adminUserApi.getUserMap(anyCollection())).thenReturn(mapOf(
297 298 2L, buildUser(2L, "用户A"),
298 299 3L, buildUser(3L, "用户B")));
299 300  
300 301 // 调用:邀请人 1L 邀请 2L、3L(都没有旧记录)
301   - groupRequestService.createInviteRequestList(10L, 1L, List.of(2L, 3L));
  302 + groupRequestService.createInviteRequestList(10L, 1L, listOf(2L, 3L));
302 303  
303 304 // 断言:插入 2 条 + 推 1503 给 owner(每条 1 帧)共 2 帧
304 305 ArgumentCaptor<ImGroupRequestDO> captor = ArgumentCaptor.forClass(ImGroupRequestDO.class);
... ... @@ -323,14 +324,14 @@ public class ImGroupRequestServiceImplTest extends BaseMockitoUnitTest {
323 324 .setHandleResult(ImGroupRequestHandleResultEnum.REFUSED.getResult());
324 325 when(groupRequestMapper.selectByGroupIdAndUserId(10L, 2L)).thenReturn(null, old);
325 326 when(groupRequestMapper.insert(any(ImGroupRequestDO.class))).thenThrow(new DuplicateKeyException("dup"));
326   - when(groupMemberService.getGroupMemberListByOwnerAndAdmin(10L)).thenReturn(List.of(
  327 + when(groupMemberService.getGroupMemberListByOwnerAndAdmin(10L)).thenReturn(listOf(
327 328 ImGroupMemberDO.builder().groupId(10L).userId(99L)
328 329 .role(ImGroupMemberRoleEnum.OWNER.getRole())
329 330 .status(CommonStatusEnum.ENABLE.getStatus()).build()));
330   - when(adminUserApi.getUserMap(anyCollection())).thenReturn(java.util.Map.of(2L, buildUser(2L, "用户A")));
  331 + when(adminUserApi.getUserMap(anyCollection())).thenReturn(mapOf(2L, buildUser(2L, "用户A")));
331 332  
332 333 // 调用
333   - groupRequestService.createInviteRequestList(10L, 1L, List.of(2L));
  334 + groupRequestService.createInviteRequestList(10L, 1L, listOf(2L));
334 335  
335 336 // 断言:复用并重置旧邀请申请
336 337 verify(groupRequestMapper).updateInviteByIdReset(eq(50L), eq(1L),
... ...
yudao-module-im/src/test/java/cn/iocoder/yudao/module/im/service/group/ImGroupServiceImplTest.java
... ... @@ -43,6 +43,7 @@ import java.util.Map;
43 43 import java.util.Set;
44 44  
45 45 import static cn.iocoder.yudao.module.im.enums.ErrorCodeConstants.*;
  46 +import static cn.iocoder.yudao.module.im.util.ImTestCollectionUtils.*;
46 47 import static org.junit.jupiter.api.Assertions.*;
47 48 import static org.mockito.ArgumentMatchers.*;
48 49 import static org.mockito.Mockito.*;
... ... @@ -108,13 +109,13 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest {
108 109 // 准备:创建者 + 2 个初始成员,都是好友
109 110 ImGroupCreateReqVO reqVO = new ImGroupCreateReqVO();
110 111 reqVO.setName("测试群");
111   - reqVO.setMemberUserIds(new ArrayList<>(List.of(2L, 3L)));
  112 + reqVO.setMemberUserIds(new ArrayList<>(listOf(2L, 3L)));
112 113 when(groupMapper.insert(any(ImGroupDO.class))).thenAnswer(invocation -> {
113 114 ImGroupDO group = invocation.getArgument(0);
114 115 group.setId(100L);
115 116 return 1;
116 117 });
117   - when(friendService.getActiveFriendList(eq(1L), anyCollection())).thenReturn(List.of(
  118 + when(friendService.getActiveFriendList(eq(1L), anyCollection())).thenReturn(listOf(
118 119 ImFriendDO.builder().userId(1L).friendUserId(2L)
119 120 .status(CommonStatusEnum.ENABLE.getStatus()).build(),
120 121 ImFriendDO.builder().userId(1L).friendUserId(3L)
... ... @@ -140,15 +141,15 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest {
140 141 // 准备:初始成员里有非好友
141 142 ImGroupCreateReqVO reqVO = new ImGroupCreateReqVO();
142 143 reqVO.setName("测试群");
143   - reqVO.setMemberUserIds(new ArrayList<>(List.of(2L, 3L)));
  144 + reqVO.setMemberUserIds(new ArrayList<>(listOf(2L, 3L)));
144 145 // 只有 2 是好友,3 不是
145   - when(friendService.getActiveFriendList(eq(1L), anyCollection())).thenReturn(List.of(
  146 + when(friendService.getActiveFriendList(eq(1L), anyCollection())).thenReturn(listOf(
146 147 ImFriendDO.builder().userId(1L).friendUserId(2L)
147 148 .status(CommonStatusEnum.ENABLE.getStatus()).build()));
148 149 AdminUserRespDTO u3 = new AdminUserRespDTO();
149 150 u3.setId(3L);
150 151 u3.setNickname("李四");
151   - when(adminUserApi.getUserMap(anyCollection())).thenReturn(Map.of(3L, u3));
  152 + when(adminUserApi.getUserMap(anyCollection())).thenReturn(mapOf(3L, u3));
152 153  
153 154 // 调用并断言
154 155 ServiceException exception = assertThrows(ServiceException.class,
... ... @@ -327,8 +328,8 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest {
327 328 // 被邀请人 2 和 3 都是好友
328 329 ImGroupMemberInviteReqVO reqVO = new ImGroupMemberInviteReqVO();
329 330 reqVO.setGroupId(10L);
330   - reqVO.setMemberUserIds(new ArrayList<>(List.of(2L, 3L)));
331   - List<ImFriendDO> friends = List.of(
  331 + reqVO.setMemberUserIds(new ArrayList<>(listOf(2L, 3L)));
  332 + List<ImFriendDO> friends = listOf(
332 333 ImFriendDO.builder().userId(1L).friendUserId(2L)
333 334 .status(CommonStatusEnum.ENABLE.getStatus()).build(),
334 335 ImFriendDO.builder().userId(1L).friendUserId(3L)
... ... @@ -366,7 +367,7 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest {
366 367 ImGroupMemberDO.builder().groupId(10L).userId(1L)
367 368 .role(ImGroupMemberRoleEnum.NORMAL.getRole())
368 369 .status(CommonStatusEnum.ENABLE.getStatus()).build());
369   - when(groupMemberService.getActiveGroupMemberListByGroupId(10L)).thenReturn(List.of(
  370 + when(groupMemberService.getActiveGroupMemberListByGroupId(10L)).thenReturn(listOf(
370 371 ImGroupMemberDO.builder().groupId(10L).userId(99L)
371 372 .role(ImGroupMemberRoleEnum.OWNER.getRole())
372 373 .status(CommonStatusEnum.ENABLE.getStatus()).build(),
... ... @@ -376,8 +377,8 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest {
376 377  
377 378 ImGroupMemberInviteReqVO reqVO = new ImGroupMemberInviteReqVO();
378 379 reqVO.setGroupId(10L);
379   - reqVO.setMemberUserIds(new ArrayList<>(List.of(2L, 3L)));
380   - when(friendService.getActiveFriendList(eq(1L), anyCollection())).thenReturn(List.of(
  380 + reqVO.setMemberUserIds(new ArrayList<>(listOf(2L, 3L)));
  381 + when(friendService.getActiveFriendList(eq(1L), anyCollection())).thenReturn(listOf(
381 382 ImFriendDO.builder().userId(1L).friendUserId(2L)
382 383 .status(CommonStatusEnum.ENABLE.getStatus()).build(),
383 384 ImFriendDO.builder().userId(1L).friendUserId(3L)
... ... @@ -408,15 +409,15 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest {
408 409 ImGroupMemberDO.builder().groupId(10L).userId(1L)
409 410 .role(ImGroupMemberRoleEnum.OWNER.getRole())
410 411 .status(CommonStatusEnum.ENABLE.getStatus()).build());
411   - when(groupMemberService.getActiveGroupMemberListByGroupId(10L)).thenReturn(List.of(
  412 + when(groupMemberService.getActiveGroupMemberListByGroupId(10L)).thenReturn(listOf(
412 413 ImGroupMemberDO.builder().groupId(10L).userId(1L)
413 414 .role(ImGroupMemberRoleEnum.OWNER.getRole())
414 415 .status(CommonStatusEnum.ENABLE.getStatus()).build()));
415 416  
416 417 ImGroupMemberInviteReqVO reqVO = new ImGroupMemberInviteReqVO();
417 418 reqVO.setGroupId(10L);
418   - reqVO.setMemberUserIds(new ArrayList<>(List.of(2L, 3L)));
419   - when(friendService.getActiveFriendList(eq(1L), anyCollection())).thenReturn(List.of(
  419 + reqVO.setMemberUserIds(new ArrayList<>(listOf(2L, 3L)));
  420 + when(friendService.getActiveFriendList(eq(1L), anyCollection())).thenReturn(listOf(
420 421 ImFriendDO.builder().userId(1L).friendUserId(2L)
421 422 .status(CommonStatusEnum.ENABLE.getStatus()).build(),
422 423 ImFriendDO.builder().userId(1L).friendUserId(3L)
... ... @@ -445,18 +446,18 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest {
445 446 .status(CommonStatusEnum.ENABLE.getStatus()).build();
446 447 when(groupMapper.selectById(10L)).thenReturn(group);
447 448 when(groupMemberService.getActiveGroupMemberListByGroupId(10L))
448   - .thenReturn(List.of(ImGroupMemberDO.builder().groupId(10L).userId(1L)
  449 + .thenReturn(listOf(ImGroupMemberDO.builder().groupId(10L).userId(1L)
449 450 .status(CommonStatusEnum.ENABLE.getStatus()).build()));
450 451  
451 452 ImGroupMemberInviteReqVO reqVO = new ImGroupMemberInviteReqVO();
452 453 reqVO.setGroupId(10L);
453   - reqVO.setMemberUserIds(new ArrayList<>(List.of(2L, 3L)));
  454 + reqVO.setMemberUserIds(new ArrayList<>(listOf(2L, 3L)));
454 455 // 只有 2 是好友,3 不是
455   - when(friendService.getActiveFriendList(eq(1L), anyCollection())).thenReturn(List.of(
  456 + when(friendService.getActiveFriendList(eq(1L), anyCollection())).thenReturn(listOf(
456 457 ImFriendDO.builder().userId(1L).friendUserId(2L)
457 458 .status(CommonStatusEnum.ENABLE.getStatus()).build()));
458 459 AdminUserRespDTO u3 = new AdminUserRespDTO(); u3.setId(3L); u3.setNickname("李四");
459   - when(adminUserApi.getUserMap(anyCollection())).thenReturn(Map.of(3L, u3));
  460 + when(adminUserApi.getUserMap(anyCollection())).thenReturn(mapOf(3L, u3));
460 461  
461 462 ServiceException exception = assertThrows(ServiceException.class,
462 463 () -> groupService.inviteGroupMember(1L, reqVO));
... ... @@ -484,9 +485,9 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest {
484 485  
485 486 ImGroupMemberInviteReqVO reqVO = new ImGroupMemberInviteReqVO();
486 487 reqVO.setGroupId(10L);
487   - reqVO.setMemberUserIds(new ArrayList<>(List.of(600L, 601L)));
  488 + reqVO.setMemberUserIds(new ArrayList<>(listOf(600L, 601L)));
488 489 // 被邀请人都是好友
489   - when(friendService.getActiveFriendList(eq(1L), anyCollection())).thenReturn(List.of(
  490 + when(friendService.getActiveFriendList(eq(1L), anyCollection())).thenReturn(listOf(
490 491 ImFriendDO.builder().userId(1L).friendUserId(600L)
491 492 .status(CommonStatusEnum.ENABLE.getStatus()).build(),
492 493 ImFriendDO.builder().userId(1L).friendUserId(601L)
... ... @@ -512,7 +513,7 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest {
512 513 .status(CommonStatusEnum.ENABLE.getStatus()).build();
513 514 when(groupMapper.selectById(10L)).thenReturn(group);
514 515 // 用户 2 已在群中
515   - when(groupMemberService.getActiveGroupMemberListByGroupId(10L)).thenReturn(List.of(
  516 + when(groupMemberService.getActiveGroupMemberListByGroupId(10L)).thenReturn(listOf(
516 517 ImGroupMemberDO.builder().groupId(10L).userId(1L)
517 518 .status(CommonStatusEnum.ENABLE.getStatus()).build(),
518 519 ImGroupMemberDO.builder().groupId(10L).userId(2L)
... ... @@ -521,7 +522,7 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest {
521 522  
522 523 ImGroupMemberInviteReqVO reqVO = new ImGroupMemberInviteReqVO();
523 524 reqVO.setGroupId(10L);
524   - reqVO.setMemberUserIds(new ArrayList<>(List.of(2L))); // 只邀请 2,他已在群中
  525 + reqVO.setMemberUserIds(new ArrayList<>(listOf(2L))); // 只邀请 2,他已在群中
525 526  
526 527 // 调用
527 528 groupService.inviteGroupMember(1L, reqVO);
... ... @@ -606,7 +607,7 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest {
606 607  
607 608 ImGroupMemberRemoveReqVO reqVO = new ImGroupMemberRemoveReqVO();
608 609 reqVO.setGroupId(10L);
609   - reqVO.setMemberUserIds(List.of(1L, 2L));
  610 + reqVO.setMemberUserIds(listOf(1L, 2L));
610 611  
611 612 ServiceException exception = assertThrows(ServiceException.class,
612 613 () -> groupService.removeGroupMember(1L, reqVO));
... ... @@ -628,7 +629,7 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest {
628 629 ImGroupMemberDO.builder().groupId(10L).userId(1L)
629 630 .role(ImGroupMemberRoleEnum.OWNER.getRole()).build());
630 631 // 目标:两个普通成员
631   - when(groupMemberService.getGroupMembers(eq(10L), anyCollection())).thenReturn(List.of(
  632 + when(groupMemberService.getGroupMembers(eq(10L), anyCollection())).thenReturn(listOf(
632 633 ImGroupMemberDO.builder().groupId(10L).userId(2L)
633 634 .role(ImGroupMemberRoleEnum.NORMAL.getRole())
634 635 .status(CommonStatusEnum.ENABLE.getStatus()).build(),
... ... @@ -638,7 +639,7 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest {
638 639  
639 640 ImGroupMemberRemoveReqVO reqVO = new ImGroupMemberRemoveReqVO();
640 641 reqVO.setGroupId(10L);
641   - reqVO.setMemberUserIds(List.of(2L, 3L));
  642 + reqVO.setMemberUserIds(listOf(2L, 3L));
642 643  
643 644 groupService.removeGroupMember(1L, reqVO);
644 645  
... ... @@ -665,14 +666,14 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest {
665 666 ImGroupMemberDO.builder().groupId(10L).userId(1L)
666 667 .role(ImGroupMemberRoleEnum.ADMIN.getRole()).build());
667 668 // 目标:另一个管理员
668   - when(groupMemberService.getGroupMembers(eq(10L), anyCollection())).thenReturn(List.of(
  669 + when(groupMemberService.getGroupMembers(eq(10L), anyCollection())).thenReturn(listOf(
669 670 ImGroupMemberDO.builder().groupId(10L).userId(2L)
670 671 .role(ImGroupMemberRoleEnum.ADMIN.getRole())
671 672 .status(CommonStatusEnum.ENABLE.getStatus()).build()));
672 673  
673 674 ImGroupMemberRemoveReqVO reqVO = new ImGroupMemberRemoveReqVO();
674 675 reqVO.setGroupId(10L);
675   - reqVO.setMemberUserIds(List.of(2L));
  676 + reqVO.setMemberUserIds(listOf(2L));
676 677  
677 678 ServiceException exception = assertThrows(ServiceException.class,
678 679 () -> groupService.removeGroupMember(1L, reqVO));
... ... @@ -694,14 +695,14 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest {
694 695 when(groupMemberService.validateMemberInGroup(10L, 1L)).thenReturn(
695 696 ImGroupMemberDO.builder().groupId(10L).userId(1L)
696 697 .role(ImGroupMemberRoleEnum.OWNER.getRole()).build());
697   - when(groupMemberService.getGroupMembers(eq(10L), anyCollection())).thenReturn(List.of(
  698 + when(groupMemberService.getGroupMembers(eq(10L), anyCollection())).thenReturn(listOf(
698 699 ImGroupMemberDO.builder().groupId(10L).userId(99L)
699 700 .role(ImGroupMemberRoleEnum.OWNER.getRole())
700 701 .status(CommonStatusEnum.ENABLE.getStatus()).build()));
701 702  
702 703 ImGroupMemberRemoveReqVO reqVO = new ImGroupMemberRemoveReqVO();
703 704 reqVO.setGroupId(10L);
704   - reqVO.setMemberUserIds(List.of(99L));
  705 + reqVO.setMemberUserIds(listOf(99L));
705 706  
706 707 ServiceException exception = assertThrows(ServiceException.class,
707 708 () -> groupService.removeGroupMember(1L, reqVO));
... ... @@ -723,7 +724,7 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest {
723 724 ImGroupMemberDO.builder().groupId(10L).userId(1L)
724 725 .role(ImGroupMemberRoleEnum.OWNER.getRole()).build());
725 726 // 目标:2L 有效普通成员;3L 已退群(DISABLE)的历史管理员,应被跳过而非拦截整批
726   - when(groupMemberService.getGroupMembers(eq(10L), anyCollection())).thenReturn(List.of(
  727 + when(groupMemberService.getGroupMembers(eq(10L), anyCollection())).thenReturn(listOf(
727 728 ImGroupMemberDO.builder().groupId(10L).userId(2L)
728 729 .role(ImGroupMemberRoleEnum.NORMAL.getRole())
729 730 .status(CommonStatusEnum.ENABLE.getStatus()).build(),
... ... @@ -733,17 +734,17 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest {
733 734  
734 735 ImGroupMemberRemoveReqVO reqVO = new ImGroupMemberRemoveReqVO();
735 736 reqVO.setGroupId(10L);
736   - reqVO.setMemberUserIds(List.of(2L, 3L));
  737 + reqVO.setMemberUserIds(listOf(2L, 3L));
737 738  
738 739 groupService.removeGroupMember(1L, reqVO);
739 740  
740 741 // 仅有效成员 2L 进入移除 / 已读清理,已退群的 3L 被跳过
741 742 ArgumentCaptor<Collection> removeCaptor = ArgumentCaptor.forClass(Collection.class);
742 743 verify(groupMemberService).removeGroupMembers(eq(10L), removeCaptor.capture());
743   - assertEquals(Set.of(2L), Set.copyOf(removeCaptor.getValue()));
  744 + assertEquals(setOf(2L), setCopyOf(removeCaptor.getValue()));
744 745 ArgumentCaptor<Collection> readCaptor = ArgumentCaptor.forClass(Collection.class);
745 746 verify(groupMessageService).deleteReadMaxMessageIds(eq(10L), readCaptor.capture());
746   - assertEquals(Set.of(2L), Set.copyOf(readCaptor.getValue()));
  747 + assertEquals(setOf(2L), setCopyOf(readCaptor.getValue()));
747 748 }
748 749 }
749 750  
... ... @@ -759,7 +760,7 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest {
759 760 .status(CommonStatusEnum.ENABLE.getStatus()).build();
760 761 when(groupMapper.selectByIdForUpdate(10L)).thenReturn(group);
761 762 // 目标 3 是普通成员
762   - when(groupMemberService.getGroupMembers(eq(10L), anyCollection())).thenReturn(List.of(
  763 + when(groupMemberService.getGroupMembers(eq(10L), anyCollection())).thenReturn(listOf(
763 764 ImGroupMemberDO.builder().userId(3L).status(CommonStatusEnum.ENABLE.getStatus())
764 765 .role(ImGroupMemberRoleEnum.NORMAL.getRole()).build()));
765 766 // 群里已有 1 个 ADMIN,1 + 1 ≤ 3 不超上限
... ... @@ -770,7 +771,7 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest {
770 771  
771 772 ImGroupAdminAddReqVO reqVO = new ImGroupAdminAddReqVO();
772 773 reqVO.setId(10L);
773   - reqVO.setUserIds(List.of(3L));
  774 + reqVO.setUserIds(listOf(3L));
774 775  
775 776 groupService.addGroupAdmin(1L, reqVO);
776 777  
... ... @@ -789,7 +790,7 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest {
789 790 ImGroupDO group = ImGroupDO.builder().id(10L).ownerUserId(1L)
790 791 .status(CommonStatusEnum.ENABLE.getStatus()).build();
791 792 when(groupMapper.selectByIdForUpdate(10L)).thenReturn(group);
792   - when(groupMemberService.getGroupMembers(eq(10L), anyCollection())).thenReturn(List.of(
  793 + when(groupMemberService.getGroupMembers(eq(10L), anyCollection())).thenReturn(listOf(
793 794 ImGroupMemberDO.builder().userId(5L).status(CommonStatusEnum.ENABLE.getStatus())
794 795 .role(ImGroupMemberRoleEnum.NORMAL.getRole()).build()));
795 796 // 群里已有 3 个 ADMIN(达到上限),再加 1 会超
... ... @@ -798,7 +799,7 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest {
798 799  
799 800 ImGroupAdminAddReqVO reqVO = new ImGroupAdminAddReqVO();
800 801 reqVO.setId(10L);
801   - reqVO.setUserIds(List.of(5L));
  802 + reqVO.setUserIds(listOf(5L));
802 803  
803 804 ServiceException exception = assertThrows(ServiceException.class,
804 805 () -> groupService.addGroupAdmin(1L, reqVO));
... ... @@ -816,13 +817,13 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest {
816 817 ImGroupDO group = ImGroupDO.builder().id(10L).ownerUserId(1L)
817 818 .status(CommonStatusEnum.ENABLE.getStatus()).build();
818 819 when(groupMapper.selectByIdForUpdate(10L)).thenReturn(group);
819   - when(groupMemberService.getGroupMembers(eq(10L), anyCollection())).thenReturn(List.of(
  820 + when(groupMemberService.getGroupMembers(eq(10L), anyCollection())).thenReturn(listOf(
820 821 ImGroupMemberDO.builder().userId(1L).status(CommonStatusEnum.ENABLE.getStatus())
821 822 .role(ImGroupMemberRoleEnum.OWNER.getRole()).build()));
822 823  
823 824 ImGroupAdminAddReqVO reqVO = new ImGroupAdminAddReqVO();
824 825 reqVO.setId(10L);
825   - reqVO.setUserIds(List.of(1L));
  826 + reqVO.setUserIds(listOf(1L));
826 827  
827 828 ServiceException exception = assertThrows(ServiceException.class,
828 829 () -> groupService.addGroupAdmin(1L, reqVO));
... ... @@ -840,13 +841,13 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest {
840 841 .status(CommonStatusEnum.ENABLE.getStatus()).build();
841 842 when(groupMapper.selectByIdForUpdate(10L)).thenReturn(group);
842 843 // 目标已是 ADMIN:再加无需操作
843   - when(groupMemberService.getGroupMembers(eq(10L), anyCollection())).thenReturn(List.of(
  844 + when(groupMemberService.getGroupMembers(eq(10L), anyCollection())).thenReturn(listOf(
844 845 ImGroupMemberDO.builder().userId(2L).status(CommonStatusEnum.ENABLE.getStatus())
845 846 .role(ImGroupMemberRoleEnum.ADMIN.getRole()).build()));
846 847  
847 848 ImGroupAdminAddReqVO reqVO = new ImGroupAdminAddReqVO();
848 849 reqVO.setId(10L);
849   - reqVO.setUserIds(List.of(2L));
  850 + reqVO.setUserIds(listOf(2L));
850 851  
851 852 groupService.addGroupAdmin(1L, reqVO);
852 853  
... ... @@ -866,7 +867,7 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest {
866 867 ImGroupDO group = ImGroupDO.builder().id(10L).ownerUserId(1L)
867 868 .status(CommonStatusEnum.ENABLE.getStatus()).build();
868 869 when(groupMapper.selectByIdForUpdate(10L)).thenReturn(group);
869   - when(groupMemberService.getGroupMembers(eq(10L), anyCollection())).thenReturn(List.of(
  870 + when(groupMemberService.getGroupMembers(eq(10L), anyCollection())).thenReturn(listOf(
870 871 ImGroupMemberDO.builder().userId(2L).status(CommonStatusEnum.ENABLE.getStatus())
871 872 .role(ImGroupMemberRoleEnum.ADMIN.getRole()).build()));
872 873 when(groupMemberService.updateGroupMemberRole(eq(10L), anyCollection(),
... ... @@ -874,7 +875,7 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest {
874 875  
875 876 ImGroupAdminRemoveReqVO reqVO = new ImGroupAdminRemoveReqVO();
876 877 reqVO.setId(10L);
877   - reqVO.setUserIds(List.of(2L));
  878 + reqVO.setUserIds(listOf(2L));
878 879  
879 880 groupService.removeGroupAdmin(1L, reqVO);
880 881  
... ... @@ -894,13 +895,13 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest {
894 895 .status(CommonStatusEnum.ENABLE.getStatus()).build();
895 896 when(groupMapper.selectByIdForUpdate(10L)).thenReturn(group);
896 897 // 目标已是 MEMBER:撤销无需操作
897   - when(groupMemberService.getGroupMembers(eq(10L), anyCollection())).thenReturn(List.of(
  898 + when(groupMemberService.getGroupMembers(eq(10L), anyCollection())).thenReturn(listOf(
898 899 ImGroupMemberDO.builder().userId(2L).status(CommonStatusEnum.ENABLE.getStatus())
899 900 .role(ImGroupMemberRoleEnum.NORMAL.getRole()).build()));
900 901  
901 902 ImGroupAdminRemoveReqVO reqVO = new ImGroupAdminRemoveReqVO();
902 903 reqVO.setId(10L);
903   - reqVO.setUserIds(List.of(2L));
  904 + reqVO.setUserIds(listOf(2L));
904 905  
905 906 groupService.removeGroupAdmin(1L, reqVO);
906 907  
... ... @@ -922,9 +923,9 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest {
922 923 when(groupMemberService.validateMemberInGroup(10L, 2L)).thenReturn(
923 924 ImGroupMemberDO.builder().groupId(10L).userId(2L)
924 925 .role(ImGroupMemberRoleEnum.NORMAL.getRole()).build());
925   - when(groupMemberService.updateGroupMemberRole(eq(10L), eq(Set.of(2L)),
  926 + when(groupMemberService.updateGroupMemberRole(eq(10L), eq(setOf(2L)),
926 927 eq(ImGroupMemberRoleEnum.OWNER.getRole()))).thenReturn(1);
927   - when(groupMemberService.updateGroupMemberRole(eq(10L), eq(Set.of(1L)),
  928 + when(groupMemberService.updateGroupMemberRole(eq(10L), eq(setOf(1L)),
928 929 eq(ImGroupMemberRoleEnum.NORMAL.getRole()))).thenReturn(1);
929 930  
930 931 ImGroupTransferOwnerReqVO reqVO = new ImGroupTransferOwnerReqVO();
... ... @@ -938,9 +939,9 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest {
938 939 verify(groupMapper).updateById(groupCaptor.capture());
939 940 assertEquals(2L, groupCaptor.getValue().getOwnerUserId());
940 941 // 旧群主 → MEMBER;新群主 → OWNER
941   - verify(groupMemberService).updateGroupMemberRole(eq(10L), eq(Set.of(1L)),
  942 + verify(groupMemberService).updateGroupMemberRole(eq(10L), eq(setOf(1L)),
942 943 eq(ImGroupMemberRoleEnum.NORMAL.getRole()));
943   - verify(groupMemberService).updateGroupMemberRole(eq(10L), eq(Set.of(2L)),
  944 + verify(groupMemberService).updateGroupMemberRole(eq(10L), eq(setOf(2L)),
944 945 eq(ImGroupMemberRoleEnum.OWNER.getRole()));
945 946 }
946 947 }
... ... @@ -1120,7 +1121,7 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest {
1120 1121 @Test
1121 1122 public void testGetMyGroupList_success() {
1122 1123 // 活跃群成员
1123   - when(groupMemberService.getActiveGroupMemberListByUserId(1L)).thenReturn(new ArrayList<>(List.of(
  1124 + when(groupMemberService.getActiveGroupMemberListByUserId(1L)).thenReturn(new ArrayList<>(listOf(
1124 1125 ImGroupMemberDO.builder().groupId(10L).userId(1L)
1125 1126 .status(CommonStatusEnum.ENABLE.getStatus()).build(),
1126 1127 ImGroupMemberDO.builder().groupId(20L).userId(1L)
... ... @@ -1128,11 +1129,11 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest {
1128 1129 )));
1129 1130 // 最近退群成员(最近 30 天内)
1130 1131 when(groupMemberService.getQuitGroupMemberListByUserId(eq(1L), any(LocalDateTime.class)))
1131   - .thenReturn(new ArrayList<>(List.of(
  1132 + .thenReturn(new ArrayList<>(listOf(
1132 1133 ImGroupMemberDO.builder().groupId(30L).userId(1L)
1133 1134 .status(CommonStatusEnum.DISABLE.getStatus()).build()
1134 1135 )));
1135   - List<ImGroupDO> groups = List.of(
  1136 + List<ImGroupDO> groups = listOf(
1136 1137 ImGroupDO.builder().id(10L).status(CommonStatusEnum.ENABLE.getStatus()).build(),
1137 1138 ImGroupDO.builder().id(20L).status(CommonStatusEnum.ENABLE.getStatus()).build(),
1138 1139 ImGroupDO.builder().id(30L).status(CommonStatusEnum.ENABLE.getStatus()).build()
... ...
yudao-module-im/src/test/java/cn/iocoder/yudao/module/im/service/message/ImGroupMessageServiceImplTest.java
... ... @@ -34,6 +34,7 @@ import java.time.LocalDateTime;
34 34 import java.util.*;
35 35  
36 36 import static cn.iocoder.yudao.module.im.enums.ErrorCodeConstants.*;
  37 +import static cn.iocoder.yudao.module.im.util.ImTestCollectionUtils.*;
37 38 import static org.junit.jupiter.api.Assertions.*;
38 39 import static org.mockito.ArgumentMatchers.*;
39 40 import static org.mockito.Mockito.*;
... ... @@ -96,7 +97,7 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest {
96 97 when(groupMemberService.validateMemberInGroup(10L, 1L)).thenReturn(member);
97 98  
98 99 when(groupMemberService.getActiveGroupMemberUserIdsByGroupId(10L))
99   - .thenReturn(List.of(1L, 2L, 3L));
  100 + .thenReturn(listOf(1L, 2L, 3L));
100 101 when(groupMessageMapper.insert(any(ImGroupMessageDO.class))).thenAnswer(invocation -> {
101 102 ImGroupMessageDO msg = invocation.getArgument(0);
102 103 msg.setId(99L);
... ... @@ -168,7 +169,7 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest {
168 169 .groupId(10L).userId(1L)
169 170 .status(CommonStatusEnum.ENABLE.getStatus())
170 171 .joinTime(joinTime).build();
171   - when(groupMemberService.getActiveGroupMemberListByUserId(1L)).thenReturn(List.of(member));
  172 + when(groupMemberService.getActiveGroupMemberListByUserId(1L)).thenReturn(listOf(member));
172 173  
173 174 // 入群前 1 条 + 入群后 1 条
174 175 ImGroupMessageDO beforeJoin = ImGroupMessageDO.builder()
... ... @@ -177,11 +178,11 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest {
177 178 ImGroupMessageDO afterJoin = ImGroupMessageDO.builder()
178 179 .id(2L).groupId(10L).senderId(2L)
179 180 .sendTime(now.minusHours(1)).build();
180   - when(groupMessageMapper.selectListByMinId(eq(List.of(10L)), eq(0L),
  181 + when(groupMessageMapper.selectListByMinId(eq(listOf(10L)), eq(0L),
181 182 any(LocalDateTime.class), eq(100)))
182   - .thenReturn(List.of(beforeJoin, afterJoin));
  183 + .thenReturn(listOf(beforeJoin, afterJoin));
183 184 when(groupMemberService.getQuitGroupMemberListByUserId(eq(1L), any(LocalDateTime.class)))
184   - .thenReturn(List.of());
  185 + .thenReturn(listOf());
185 186  
186 187 // 调用
187 188 List<ImGroupMessageDO> result = groupMessageService.pullGroupMessageList(1L, 0L, 100);
... ... @@ -200,26 +201,26 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest {
200 201 .groupId(10L).userId(1L)
201 202 .status(CommonStatusEnum.ENABLE.getStatus())
202 203 .joinTime(joinTime).build();
203   - when(groupMemberService.getActiveGroupMemberListByUserId(1L)).thenReturn(List.of(member));
  204 + when(groupMemberService.getActiveGroupMemberListByUserId(1L)).thenReturn(listOf(member));
204 205  
205 206 ImGroupMessageDO beforeJoin = ImGroupMessageDO.builder()
206 207 .id(1L).groupId(10L).senderId(2L)
207 208 .sendTime(now.minusHours(3)).build();
208 209 ImGroupMessageDO directedMsg = ImGroupMessageDO.builder()
209 210 .id(2L).groupId(10L).senderId(2L)
210   - .receiverUserIds(List.of(2L, 3L))
  211 + .receiverUserIds(listOf(2L, 3L))
211 212 .sendTime(now.minusHours(2)).build();
212 213 ImGroupMessageDO visibleMsg = ImGroupMessageDO.builder()
213 214 .id(3L).groupId(10L).senderId(2L)
214 215 .sendTime(now.minusMinutes(30)).build();
215   - when(groupMessageMapper.selectListByMinId(eq(List.of(10L)), eq(0L),
  216 + when(groupMessageMapper.selectListByMinId(eq(listOf(10L)), eq(0L),
216 217 any(LocalDateTime.class), eq(2)))
217   - .thenReturn(List.of(beforeJoin, directedMsg));
218   - when(groupMessageMapper.selectListByMinId(eq(List.of(10L)), eq(2L),
  218 + .thenReturn(listOf(beforeJoin, directedMsg));
  219 + when(groupMessageMapper.selectListByMinId(eq(listOf(10L)), eq(2L),
219 220 any(LocalDateTime.class), eq(2)))
220   - .thenReturn(List.of(visibleMsg));
  221 + .thenReturn(listOf(visibleMsg));
221 222 when(groupMemberService.getQuitGroupMemberListByUserId(eq(1L), any(LocalDateTime.class)))
222   - .thenReturn(List.of());
  223 + .thenReturn(listOf());
223 224  
224 225 // 调用
225 226 List<ImGroupMessageDO> result = groupMessageService.pullGroupMessageList(1L, 0L, 2);
... ... @@ -227,9 +228,9 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest {
227 228 // 断言:仅返回第二批的可见消息;两批 selectListByMinId 各被调用一次
228 229 assertEquals(1, result.size());
229 230 assertEquals(3L, result.get(0).getId());
230   - verify(groupMessageMapper).selectListByMinId(eq(List.of(10L)), eq(0L),
  231 + verify(groupMessageMapper).selectListByMinId(eq(listOf(10L)), eq(0L),
231 232 any(LocalDateTime.class), eq(2));
232   - verify(groupMessageMapper).selectListByMinId(eq(List.of(10L)), eq(2L),
  233 + verify(groupMessageMapper).selectListByMinId(eq(listOf(10L)), eq(2L),
233 234 any(LocalDateTime.class), eq(2));
234 235 }
235 236  
... ... @@ -241,14 +242,14 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest {
241 242 .groupId(10L).userId(1L)
242 243 .status(CommonStatusEnum.ENABLE.getStatus())
243 244 .joinTime(now.minusDays(10)).build();
244   - when(groupMemberService.getActiveGroupMemberListByUserId(1L)).thenReturn(List.of(activeMember));
  245 + when(groupMemberService.getActiveGroupMemberListByUserId(1L)).thenReturn(listOf(activeMember));
245 246  
246 247 ImGroupMessageDO activeMsg = ImGroupMessageDO.builder()
247 248 .id(5L).groupId(10L).senderId(2L)
248 249 .sendTime(now.minusHours(2)).build();
249   - when(groupMessageMapper.selectListByMinId(eq(List.of(10L)), eq(0L),
  250 + when(groupMessageMapper.selectListByMinId(eq(listOf(10L)), eq(0L),
250 251 any(LocalDateTime.class), eq(100)))
251   - .thenReturn(List.of(activeMsg));
  252 + .thenReturn(listOf(activeMsg));
252 253  
253 254 // 已退群:退群时间在窗口内(minId=0,minQuitTime 直接用 minSendTime)
254 255 LocalDateTime quitTime = now.minusDays(3);
... ... @@ -258,14 +259,14 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest {
258 259 .joinTime(now.minusDays(20))
259 260 .quitTime(quitTime).build();
260 261 when(groupMemberService.getQuitGroupMemberListByUserId(eq(1L), any(LocalDateTime.class)))
261   - .thenReturn(List.of(quitMember));
  262 + .thenReturn(listOf(quitMember));
262 263  
263 264 ImGroupMessageDO quitGroupMsg = ImGroupMessageDO.builder()
264 265 .id(3L).groupId(20L).senderId(99L)
265 266 .sendTime(now.minusDays(5)).build();
266 267 when(groupMessageMapper.selectListByGroupIdAndMinIdAndQuitTimeBefore(eq(20L), eq(0L),
267 268 any(LocalDateTime.class), eq(quitTime), eq(100)))
268   - .thenReturn(List.of(quitGroupMsg));
  269 + .thenReturn(listOf(quitGroupMsg));
269 270  
270 271 // 调用
271 272 List<ImGroupMessageDO> result = groupMessageService.pullGroupMessageList(1L, 0L, 100);
... ... @@ -280,14 +281,14 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest {
280 281 public void testPullMessages_quitMemberFilteredByBoundarySendTime() {
281 282 // 准备:minId > 0,边界消息 sendTime 晚于窗口起点,应当被用作 minQuitTime
282 283 LocalDateTime now = LocalDateTime.now();
283   - when(groupMemberService.getActiveGroupMemberListByUserId(1L)).thenReturn(List.of());
  284 + when(groupMemberService.getActiveGroupMemberListByUserId(1L)).thenReturn(listOf());
284 285  
285 286 LocalDateTime boundarySendTime = now.minusDays(2);
286 287 ImGroupMessageDO boundary = ImGroupMessageDO.builder()
287 288 .id(8L).groupId(10L).senderId(2L).sendTime(boundarySendTime).build();
288 289 when(groupMessageMapper.selectById(8L)).thenReturn(boundary);
289 290 when(groupMemberService.getQuitGroupMemberListByUserId(1L, boundarySendTime))
290   - .thenReturn(List.of());
  291 + .thenReturn(listOf());
291 292  
292 293 // 调用
293 294 List<ImGroupMessageDO> result = groupMessageService.pullGroupMessageList(1L, 8L, 100);
... ... @@ -306,24 +307,24 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest {
306 307 .groupId(10L).userId(1L)
307 308 .status(CommonStatusEnum.ENABLE.getStatus())
308 309 .joinTime(joinTime).build();
309   - when(groupMemberService.getActiveGroupMemberListByUserId(1L)).thenReturn(List.of(activeMember));
  310 + when(groupMemberService.getActiveGroupMemberListByUserId(1L)).thenReturn(listOf(activeMember));
310 311  
311 312 ImGroupMessageDO beforeJoin = ImGroupMessageDO.builder()
312 313 .id(100L).groupId(10L).senderId(2L)
313 314 .sendTime(now.minusHours(3)).build();
314 315 ImGroupMessageDO directedMsg = ImGroupMessageDO.builder()
315 316 .id(101L).groupId(10L).senderId(2L)
316   - .receiverUserIds(List.of(2L, 3L))
  317 + .receiverUserIds(listOf(2L, 3L))
317 318 .sendTime(now.minusMinutes(50)).build();
318 319 ImGroupMessageDO visibleActiveMsg = ImGroupMessageDO.builder()
319 320 .id(102L).groupId(10L).senderId(2L)
320 321 .sendTime(now.minusMinutes(30)).build();
321   - when(groupMessageMapper.selectListByMinId(eq(List.of(10L)), eq(8L),
  322 + when(groupMessageMapper.selectListByMinId(eq(listOf(10L)), eq(8L),
322 323 any(LocalDateTime.class), eq(2)))
323   - .thenReturn(List.of(beforeJoin, directedMsg));
324   - when(groupMessageMapper.selectListByMinId(eq(List.of(10L)), eq(101L),
  324 + .thenReturn(listOf(beforeJoin, directedMsg));
  325 + when(groupMessageMapper.selectListByMinId(eq(listOf(10L)), eq(101L),
325 326 any(LocalDateTime.class), eq(2)))
326   - .thenReturn(List.of(visibleActiveMsg));
  327 + .thenReturn(listOf(visibleActiveMsg));
327 328  
328 329 LocalDateTime boundarySendTime = now.minusDays(2);
329 330 ImGroupMessageDO boundary = ImGroupMessageDO.builder()
... ... @@ -337,14 +338,14 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest {
337 338 .joinTime(now.minusDays(10))
338 339 .quitTime(quitTime).build();
339 340 when(groupMemberService.getQuitGroupMemberListByUserId(1L, boundarySendTime))
340   - .thenReturn(List.of(quitMember));
  341 + .thenReturn(listOf(quitMember));
341 342  
342 343 ImGroupMessageDO quitGroupMsg = ImGroupMessageDO.builder()
343 344 .id(50L).groupId(20L).senderId(99L)
344 345 .sendTime(now.minusDays(1)).build();
345 346 when(groupMessageMapper.selectListByGroupIdAndMinIdAndQuitTimeBefore(eq(20L), eq(8L),
346 347 any(LocalDateTime.class), eq(quitTime), eq(2)))
347   - .thenReturn(List.of(quitGroupMsg));
  348 + .thenReturn(listOf(quitGroupMsg));
348 349  
349 350 // 调用
350 351 List<ImGroupMessageDO> result = groupMessageService.pullGroupMessageList(1L, 8L, 2);
... ... @@ -353,9 +354,9 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest {
353 354 assertEquals(2, result.size());
354 355 assertEquals(50L, result.get(0).getId());
355 356 assertEquals(102L, result.get(1).getId());
356   - verify(groupMessageMapper).selectListByMinId(eq(List.of(10L)), eq(8L),
  357 + verify(groupMessageMapper).selectListByMinId(eq(listOf(10L)), eq(8L),
357 358 any(LocalDateTime.class), eq(2));
358   - verify(groupMessageMapper).selectListByMinId(eq(List.of(10L)), eq(101L),
  359 + verify(groupMessageMapper).selectListByMinId(eq(listOf(10L)), eq(101L),
359 360 any(LocalDateTime.class), eq(2));
360 361 verify(groupMemberService).getQuitGroupMemberListByUserId(1L, boundarySendTime);
361 362 verify(groupMessageMapper).selectListByGroupIdAndMinIdAndQuitTimeBefore(eq(20L), eq(8L),
... ... @@ -372,22 +373,22 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest {
372 373 .groupId(10L).userId(1L)
373 374 .status(CommonStatusEnum.ENABLE.getStatus())
374 375 .joinTime(now.minusDays(10)).build();
375   - when(groupMemberService.getActiveGroupMemberListByUserId(1L)).thenReturn(List.of(member));
  376 + when(groupMemberService.getActiveGroupMemberListByUserId(1L)).thenReturn(listOf(member));
376 377  
377 378 // 定向接收消息:只给用户 2 和 3
378 379 ImGroupMessageDO directedMsg = ImGroupMessageDO.builder()
379 380 .id(1L).groupId(10L).senderId(5L)
380   - .receiverUserIds(List.of(2L, 3L))
  381 + .receiverUserIds(listOf(2L, 3L))
381 382 .sendTime(now.minusHours(2)).build();
382 383 // 全员消息
383 384 ImGroupMessageDO allMsg = ImGroupMessageDO.builder()
384 385 .id(2L).groupId(10L).senderId(5L)
385 386 .sendTime(now.minusHours(1)).build();
386   - when(groupMessageMapper.selectListByMinId(eq(List.of(10L)), eq(0L),
  387 + when(groupMessageMapper.selectListByMinId(eq(listOf(10L)), eq(0L),
387 388 any(LocalDateTime.class), eq(100)))
388   - .thenReturn(List.of(directedMsg, allMsg));
  389 + .thenReturn(listOf(directedMsg, allMsg));
389 390 when(groupMemberService.getQuitGroupMemberListByUserId(eq(1L), any(LocalDateTime.class)))
390   - .thenReturn(List.of());
  391 + .thenReturn(listOf());
391 392  
392 393 // 调用
393 394 List<ImGroupMessageDO> result = groupMessageService.pullGroupMessageList(1L, 0L, 100);
... ... @@ -405,24 +406,24 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest {
405 406 .groupId(10L).userId(1L)
406 407 .status(CommonStatusEnum.ENABLE.getStatus())
407 408 .joinTime(now.minusDays(10)).build();
408   - when(groupMemberService.getActiveGroupMemberListByUserId(1L)).thenReturn(List.of(member));
  409 + when(groupMemberService.getActiveGroupMemberListByUserId(1L)).thenReturn(listOf(member));
409 410  
410 411 ImGroupMessageDO atMsg = ImGroupMessageDO.builder()
411 412 .id(1L).groupId(10L).senderId(2L)
412   - .atUserIds(List.of(1L, 3L))
  413 + .atUserIds(listOf(1L, 3L))
413 414 .sendTime(now.minusHours(1)).build();
414   - when(groupMessageMapper.selectListByMinId(eq(List.of(10L)), eq(0L),
  415 + when(groupMessageMapper.selectListByMinId(eq(listOf(10L)), eq(0L),
415 416 any(LocalDateTime.class), eq(100)))
416   - .thenReturn(List.of(atMsg));
  417 + .thenReturn(listOf(atMsg));
417 418 when(groupMemberService.getQuitGroupMemberListByUserId(eq(1L), any(LocalDateTime.class)))
418   - .thenReturn(List.of());
  419 + .thenReturn(listOf());
419 420  
420 421 // 调用
421 422 List<ImGroupMessageDO> result = groupMessageService.pullGroupMessageList(1L, 0L, 100);
422 423  
423 424 // 断言:@ 字段正确返回
424 425 assertEquals(1, result.size());
425   - assertEquals(List.of(1L, 3L), result.get(0).getAtUserIds());
  426 + assertEquals(listOf(1L, 3L), result.get(0).getAtUserIds());
426 427 }
427 428  
428 429 @Test
... ... @@ -432,15 +433,15 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest {
432 433 .groupId(10L).userId(1L)
433 434 .status(CommonStatusEnum.ENABLE.getStatus())
434 435 .joinTime(now.minusDays(10)).build();
435   - when(groupMemberService.getActiveGroupMemberListByUserId(1L)).thenReturn(List.of(activeMember));
  436 + when(groupMemberService.getActiveGroupMemberListByUserId(1L)).thenReturn(listOf(activeMember));
436 437  
437 438 ImGroupMessageDO activeMsg1 = ImGroupMessageDO.builder()
438 439 .id(1000L).groupId(10L).senderId(2L).sendTime(now.minusHours(2)).build();
439 440 ImGroupMessageDO activeMsg2 = ImGroupMessageDO.builder()
440 441 .id(2000L).groupId(10L).senderId(2L).sendTime(now.minusHours(1)).build();
441   - when(groupMessageMapper.selectListByMinId(eq(List.of(10L)), eq(0L),
  442 + when(groupMessageMapper.selectListByMinId(eq(listOf(10L)), eq(0L),
442 443 any(LocalDateTime.class), eq(2)))
443   - .thenReturn(List.of(activeMsg1, activeMsg2));
  444 + .thenReturn(listOf(activeMsg1, activeMsg2));
444 445  
445 446 LocalDateTime quitTime = now.minusDays(1);
446 447 ImGroupMemberDO quitMember = ImGroupMemberDO.builder()
... ... @@ -449,7 +450,7 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest {
449 450 .joinTime(now.minusDays(20))
450 451 .quitTime(quitTime).build();
451 452 when(groupMemberService.getQuitGroupMemberListByUserId(eq(1L), any(LocalDateTime.class)))
452   - .thenReturn(List.of(quitMember));
  453 + .thenReturn(listOf(quitMember));
453 454  
454 455 ImGroupMessageDO quit1 = ImGroupMessageDO.builder()
455 456 .id(150L).groupId(20L).senderId(99L).sendTime(now.minusDays(5)).build();
... ... @@ -457,7 +458,7 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest {
457 458 .id(160L).groupId(20L).senderId(99L).sendTime(now.minusDays(4)).build();
458 459 when(groupMessageMapper.selectListByGroupIdAndMinIdAndQuitTimeBefore(eq(20L), eq(0L),
459 460 any(LocalDateTime.class), eq(quitTime), eq(2)))
460   - .thenReturn(List.of(quit1, quit2));
  461 + .thenReturn(listOf(quit1, quit2));
461 462  
462 463 when(groupMessageReadRedisDAO.getReadMaxMessageId(anyLong(), eq(1L))).thenReturn(null);
463 464  
... ... @@ -475,7 +476,7 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest {
475 476 .groupId(10L).userId(1L)
476 477 .status(CommonStatusEnum.ENABLE.getStatus())
477 478 .joinTime(now.minusDays(10)).build();
478   - when(groupMemberService.getActiveGroupMemberListByUserId(1L)).thenReturn(List.of(member));
  479 + when(groupMemberService.getActiveGroupMemberListByUserId(1L)).thenReturn(listOf(member));
479 480  
480 481 ImGroupMessageDO low = ImGroupMessageDO.builder()
481 482 .id(5L).groupId(10L).senderId(2L).status(ImMessageStatusEnum.UNREAD.getStatus())
... ... @@ -483,11 +484,11 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest {
483 484 ImGroupMessageDO high = ImGroupMessageDO.builder()
484 485 .id(10L).groupId(10L).senderId(2L).status(ImMessageStatusEnum.UNREAD.getStatus())
485 486 .sendTime(now.minusHours(1)).build();
486   - when(groupMessageMapper.selectListByMinId(eq(List.of(10L)), eq(0L),
  487 + when(groupMessageMapper.selectListByMinId(eq(listOf(10L)), eq(0L),
487 488 any(LocalDateTime.class), eq(100)))
488   - .thenReturn(List.of(low, high));
  489 + .thenReturn(listOf(low, high));
489 490 when(groupMemberService.getQuitGroupMemberListByUserId(eq(1L), any(LocalDateTime.class)))
490   - .thenReturn(List.of());
  491 + .thenReturn(listOf());
491 492  
492 493 when(groupMessageReadRedisDAO.getReadMaxMessageId(10L, 1L)).thenReturn(7L);
493 494  
... ... @@ -505,18 +506,18 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest {
505 506 .groupId(10L).userId(1L)
506 507 .status(CommonStatusEnum.ENABLE.getStatus())
507 508 .joinTime(now.minusDays(10)).build();
508   - when(groupMemberService.getActiveGroupMemberListByUserId(1L)).thenReturn(List.of(member));
  509 + when(groupMemberService.getActiveGroupMemberListByUserId(1L)).thenReturn(listOf(member));
509 510  
510 511 ImGroupMessageDO receiptMsg = ImGroupMessageDO.builder()
511 512 .id(100L).groupId(10L).senderId(1L)
512 513 .status(ImMessageStatusEnum.UNREAD.getStatus())
513 514 .receiptStatus(ImGroupMessageReceiptStatusEnum.PENDING.getStatus())
514 515 .sendTime(now.minusHours(1)).build();
515   - when(groupMessageMapper.selectListByMinId(eq(List.of(10L)), eq(0L),
  516 + when(groupMessageMapper.selectListByMinId(eq(listOf(10L)), eq(0L),
516 517 any(LocalDateTime.class), eq(100)))
517   - .thenReturn(List.of(receiptMsg));
  518 + .thenReturn(listOf(receiptMsg));
518 519 when(groupMemberService.getQuitGroupMemberListByUserId(eq(1L), any(LocalDateTime.class)))
519   - .thenReturn(List.of());
  520 + .thenReturn(listOf());
520 521  
521 522 when(groupMessageReadRedisDAO.getReadMaxMessageId(10L, 1L)).thenReturn(100L);
522 523 Map<Long, Long> positions = new HashMap<>();
... ... @@ -525,7 +526,7 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest {
525 526 positions.put(3L, 50L);
526 527 when(groupMessageReadRedisDAO.getReadMaxMessageIdMap(10L)).thenReturn(positions);
527 528  
528   - List<ImGroupMemberDO> allMembers = List.of(
  529 + List<ImGroupMemberDO> allMembers = listOf(
529 530 member,
530 531 ImGroupMemberDO.builder().groupId(10L).userId(2L)
531 532 .status(CommonStatusEnum.ENABLE.getStatus())
... ... @@ -564,7 +565,7 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest {
564 565 when(groupMessageMapper.insert(any(ImGroupMessageDO.class))).thenReturn(1);
565 566  
566 567 when(groupMemberService.getActiveGroupMemberUserIdsByGroupId(10L))
567   - .thenReturn(List.of(1L, 2L));
  568 + .thenReturn(listOf(1L, 2L));
568 569  
569 570 // 调用
570 571 ImGroupMessageDO result = groupMessageService.recallGroupMessage(1L, 50L);
... ... @@ -669,7 +670,7 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest {
669 670 // 用户 2: 正常,入群在消息之前
670 671 // 用户 3: 正常,但入群在消息之后 → 不可见
671 672 // 用户 5: 发送者,不计入回执
672   - List<ImGroupMemberDO> allMembers = List.of(
  673 + List<ImGroupMemberDO> allMembers = listOf(
673 674 currentMember,
674 675 ImGroupMemberDO.builder().groupId(10L).userId(1L)
675 676 .status(CommonStatusEnum.ENABLE.getStatus())
... ... @@ -739,7 +740,7 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest {
739 740 ImGroupMemberDO member = ImGroupMemberDO.builder()
740 741 .groupId(10L).userId(1L).status(CommonStatusEnum.ENABLE.getStatus()).build();
741 742 when(groupMemberService.validateMemberInGroup(10L, 1L)).thenReturn(member);
742   - when(groupMemberService.getActiveGroupMemberUserIdsByGroupId(10L)).thenReturn(List.of(1L));
  743 + when(groupMemberService.getActiveGroupMemberUserIdsByGroupId(10L)).thenReturn(listOf(1L));
743 744 when(groupMessageMapper.insert(any(ImGroupMessageDO.class))).thenReturn(1);
744 745  
745 746 // 调用
... ... @@ -821,7 +822,7 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest {
821 822 .id(100L).groupId(10L).senderId(2L).sendTime(LocalDateTime.now()).build());
822 823 when(groupMessageReadRedisDAO.getReadMaxMessageId(10L, 1L)).thenReturn(5L);
823 824 // readGroupMessageEvent 内部会调 selectListByGroupIdAndPendingReceipt → 返回空简化流程
824   - when(groupMessageMapper.selectListByGroupIdAndPendingReceipt(10L, 5L, 100L)).thenReturn(List.of());
  825 + when(groupMessageMapper.selectListByGroupIdAndPendingReceipt(10L, 5L, 100L)).thenReturn(listOf());
825 826  
826 827 // 调用
827 828 groupMessageService.readGroupMessages(1L, 10L, 100L);
... ... @@ -875,7 +876,7 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest {
875 876 ImGroupMemberDO member = ImGroupMemberDO.builder()
876 877 .groupId(10L).userId(1L).status(CommonStatusEnum.ENABLE.getStatus()).build();
877 878 when(groupMemberService.validateMemberInGroup(10L, 1L)).thenReturn(member);
878   - when(groupMemberService.getActiveGroupMemberUserIdsByGroupId(10L)).thenReturn(List.of(1L, 2L));
  879 + when(groupMemberService.getActiveGroupMemberUserIdsByGroupId(10L)).thenReturn(listOf(1L, 2L));
879 880  
880 881 ImGroupMessageDO result = groupMessageService.sendGroupMessage(1L, reqVO);
881 882  
... ... @@ -932,8 +933,8 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest {
932 933 .receiptStatus(ImGroupMessageReceiptStatusEnum.PENDING.getStatus())
933 934 .status(ImMessageStatusEnum.UNREAD.getStatus()).build();
934 935 when(groupMessageMapper.selectListByGroupIdAndPendingReceipt(10L, 0L, 100L))
935   - .thenReturn(List.of(pending));
936   - List<ImGroupMemberDO> activeMembers = List.of(
  936 + .thenReturn(listOf(pending));
  937 + List<ImGroupMemberDO> activeMembers = listOf(
937 938 ImGroupMemberDO.builder().groupId(10L).userId(5L)
938 939 .status(CommonStatusEnum.ENABLE.getStatus())
939 940 .joinTime(LocalDateTime.now().minusDays(10)).build(),
... ... @@ -971,8 +972,8 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest {
971 972 .receiptStatus(ImGroupMessageReceiptStatusEnum.PENDING.getStatus())
972 973 .status(ImMessageStatusEnum.UNREAD.getStatus()).build();
973 974 when(groupMessageMapper.selectListByGroupIdAndPendingReceipt(10L, 0L, 100L))
974   - .thenReturn(List.of(pending));
975   - List<ImGroupMemberDO> activeMembers = List.of(
  975 + .thenReturn(listOf(pending));
  976 + List<ImGroupMemberDO> activeMembers = listOf(
976 977 ImGroupMemberDO.builder().groupId(10L).userId(5L)
977 978 .status(CommonStatusEnum.ENABLE.getStatus())
978 979 .joinTime(LocalDateTime.now().minusDays(10)).build(),
... ... @@ -1006,7 +1007,7 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest {
1006 1007 .setGroupId(10L).setType(ImMessageTypeEnum.RECALL.getType())
1007 1008 .setContent("{\"messageId\":1}");
1008 1009 when(groupMemberService.getActiveGroupMemberUserIdsByGroupId(10L))
1009   - .thenReturn(List.of(1L, 2L, 3L, 4L));
  1010 + .thenReturn(listOf(1L, 2L, 3L, 4L));
1010 1011  
1011 1012 groupMessageService.sendGroupMessage(1L, dto);
1012 1013  
... ... @@ -1023,9 +1024,9 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest {
1023 1024 ImGroupMessageSendDTO dto = new ImGroupMessageSendDTO()
1024 1025 .setGroupId(10L).setType(ImMessageTypeEnum.RECALL.getType())
1025 1026 .setContent("{\"messageId\":1}")
1026   - .setReceiverUserIds(List.of(2L, 3L));
  1027 + .setReceiverUserIds(listOf(2L, 3L));
1027 1028 when(groupMemberService.getActiveGroupMemberUserIdsByGroupId(10L))
1028   - .thenReturn(List.of(1L, 2L, 3L, 4L));
  1029 + .thenReturn(listOf(1L, 2L, 3L, 4L));
1029 1030  
1030 1031 groupMessageService.sendGroupMessage(1L, dto);
1031 1032  
... ... @@ -1042,9 +1043,9 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest {
1042 1043 ImGroupMessageSendDTO dto = new ImGroupMessageSendDTO()
1043 1044 .setGroupId(10L).setType(ImMessageTypeEnum.RECALL.getType())
1044 1045 .setContent("{\"messageId\":1}")
1045   - .setReceiverUserIds(List.of(2L, 3L));
  1046 + .setReceiverUserIds(listOf(2L, 3L));
1046 1047 when(groupMemberService.getActiveGroupMemberUserIdsByGroupId(10L))
1047   - .thenReturn(List.of(1L, 2L, 3L, 4L));
  1048 + .thenReturn(listOf(1L, 2L, 3L, 4L));
1048 1049  
1049 1050 groupMessageService.sendGroupMessage(99L, dto);
1050 1051  
... ... @@ -1061,7 +1062,7 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest {
1061 1062 ImGroupMessageSendDTO dto = new ImGroupMessageSendDTO()
1062 1063 .setGroupId(10L).setType(ImMessageTypeEnum.RECALL.getType())
1063 1064 .setContent(new RecallMessage().setMessageId(50L));
1064   - when(groupMemberService.getActiveGroupMemberUserIdsByGroupId(10L)).thenReturn(List.of(1L));
  1065 + when(groupMemberService.getActiveGroupMemberUserIdsByGroupId(10L)).thenReturn(listOf(1L));
1065 1066  
1066 1067 groupMessageService.sendGroupMessage(1L, dto);
1067 1068  
... ... @@ -1085,7 +1086,7 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest {
1085 1086 ImGroupMessageSendDTO dto = new ImGroupMessageSendDTO()
1086 1087 .setGroupId(10L).setType(ImMessageTypeEnum.RECALL.getType())
1087 1088 .setContent("{\"messageId\":50}").setReceipt(true);
1088   - when(groupMemberService.getActiveGroupMemberUserIdsByGroupId(10L)).thenReturn(List.of(1L));
  1089 + when(groupMemberService.getActiveGroupMemberUserIdsByGroupId(10L)).thenReturn(listOf(1L));
1089 1090  
1090 1091 groupMessageService.sendGroupMessage(1L, dto);
1091 1092  
... ... @@ -1099,7 +1100,7 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest {
1099 1100 // 准备:persistent=false 类型(RECEIPT 回执)→ 不入库,仅推送
1100 1101 ImGroupMessageSendDTO dto = new ImGroupMessageSendDTO()
1101 1102 .setGroupId(10L).setType(ImMessageTypeEnum.RECEIPT.getType());
1102   - when(groupMemberService.getActiveGroupMemberUserIdsByGroupId(10L)).thenReturn(List.of(1L, 2L));
  1103 + when(groupMemberService.getActiveGroupMemberUserIdsByGroupId(10L)).thenReturn(listOf(1L, 2L));
1103 1104  
1104 1105 groupMessageService.sendGroupMessage(1L, dto);
1105 1106  
... ... @@ -1110,7 +1111,7 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest {
1110 1111 @Test
1111 1112 public void testSendGroupMessage_threeArg_explicitTargetsBypassActiveMembers() {
1112 1113 // 准备:调用方传入显式 targets(解散场景成员已被批量 DISABLE,必须按移除前快照推送)
1113   - Set<Long> targets = Set.of(1L, 2L, 3L);
  1114 + Set<Long> targets = setOf(1L, 2L, 3L);
1114 1115 ImGroupMessageSendDTO dto = new ImGroupMessageSendDTO()
1115 1116 .setGroupId(10L).setType(ImMessageTypeEnum.GROUP_DISSOLVE.getType()).setContent("{}");
1116 1117  
... ... @@ -1138,7 +1139,7 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest {
1138 1139 reqVO.setMaxId(100L);
1139 1140 reqVO.setLimit(20);
1140 1141  
1141   - List<ImGroupMessageDO> mockList = List.of(
  1142 + List<ImGroupMessageDO> mockList = listOf(
1142 1143 ImGroupMessageDO.builder().id(99L).groupId(10L).senderId(2L)
1143 1144 .sendTime(joinTime.plusMinutes(1)).build()
1144 1145 );
... ... @@ -1181,9 +1182,9 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest {
1181 1182  
1182 1183 @Test
1183 1184 public void testDeleteReadMaxMessageIds_delegatesToRedis() {
1184   - groupMessageService.deleteReadMaxMessageIds(10L, List.of(1L, 2L));
  1185 + groupMessageService.deleteReadMaxMessageIds(10L, listOf(1L, 2L));
1185 1186  
1186   - verify(groupMessageReadRedisDAO).deleteReadMaxMessageIds(10L, List.of(1L, 2L));
  1187 + verify(groupMessageReadRedisDAO).deleteReadMaxMessageIds(10L, listOf(1L, 2L));
1187 1188 }
1188 1189  
1189 1190 @Test
... ...
yudao-module-im/src/test/java/cn/iocoder/yudao/module/im/service/message/ImPrivateMessageServiceImplTest.java
... ... @@ -25,6 +25,7 @@ import java.time.LocalDateTime;
25 25 import java.util.List;
26 26  
27 27 import static cn.iocoder.yudao.module.im.enums.ErrorCodeConstants.*;
  28 +import static cn.iocoder.yudao.module.im.util.ImTestCollectionUtils.*;
28 29 import static org.junit.jupiter.api.Assertions.*;
29 30 import static org.mockito.ArgumentMatchers.*;
30 31 import static org.mockito.Mockito.*;
... ... @@ -135,7 +136,7 @@ public class ImPrivateMessageServiceImplTest extends BaseMockitoUnitTest {
135 136 @Test
136 137 public void testPullMessages_success() {
137 138 // 准备
138   - List<ImPrivateMessageDO> mockMessages = List.of(
  139 + List<ImPrivateMessageDO> mockMessages = listOf(
139 140 ImPrivateMessageDO.builder().id(1L).senderId(1L).receiverId(2L).build(),
140 141 ImPrivateMessageDO.builder().id(2L).senderId(2L).receiverId(1L).build()
141 142 );
... ... @@ -415,7 +416,7 @@ public class ImPrivateMessageServiceImplTest extends BaseMockitoUnitTest {
415 416 reqVO.setReceiverId(2L);
416 417 reqVO.setMaxId(100L);
417 418 reqVO.setLimit(20);
418   - List<ImPrivateMessageDO> mockList = List.of(
  419 + List<ImPrivateMessageDO> mockList = listOf(
419 420 ImPrivateMessageDO.builder().id(99L).senderId(1L).receiverId(2L).build(),
420 421 ImPrivateMessageDO.builder().id(98L).senderId(2L).receiverId(1L).build()
421 422 );
... ...
yudao-module-im/src/test/java/cn/iocoder/yudao/module/im/service/rtc/ImRtcCallServiceImplTest.java
... ... @@ -34,9 +34,10 @@ import java.util.Map;
34 34 import java.util.Set;
35 35 import java.util.concurrent.Callable;
36 36  
37   -import static cn.iocoder.yudao.module.im.enums.ErrorCodeConstants.RTC_GROUP_INVITEE_REQUIRED;
38 37 import static cn.iocoder.yudao.module.im.enums.ErrorCodeConstants.RTC_GROUP_INVITEE_OVER_LIMIT;
  38 +import static cn.iocoder.yudao.module.im.enums.ErrorCodeConstants.RTC_GROUP_INVITEE_REQUIRED;
39 39 import static cn.iocoder.yudao.module.im.enums.ErrorCodeConstants.RTC_SELF_BUSY;
  40 +import static cn.iocoder.yudao.module.im.util.ImTestCollectionUtils.*;
40 41 import static org.junit.jupiter.api.Assertions.*;
41 42 import static org.mockito.ArgumentMatchers.*;
42 43 import static org.mockito.Mockito.*;
... ... @@ -103,8 +104,8 @@ public class ImRtcCallServiceImplTest extends BaseMockitoUnitTest {
103 104 // 准备:候选非空但每个 CAS 都失败(并发已变状态)
104 105 ImRtcParticipantDO p = buildParticipant(10L, "r1", 100L, ImRtcParticipantStatusEnum.INVITING);
105 106 when(rtcParticipantMapper.selectListByStatusAndInviteTimeBefore(any(), any()))
106   - .thenReturn(List.of(p));
107   - when(adminUserApi.getUserMap(anySet())).thenReturn(Map.of(100L, buildUser(100L)));
  107 + .thenReturn(listOf(p));
  108 + when(adminUserApi.getUserMap(anySet())).thenReturn(mapOf(100L, buildUser(100L)));
108 109 when(rtcParticipantMapper.updateByIdAndStatus(eq(10L), eq(ImRtcParticipantStatusEnum.INVITING.getStatus()), any()))
109 110 .thenReturn(0);
110 111  
... ... @@ -122,15 +123,15 @@ public class ImRtcCallServiceImplTest extends BaseMockitoUnitTest {
122 123 // 准备:群通话单候选 CAS 成功;shouldCloseGroupRoom 通过 selectListByRoom 多 JOINED 让其返 false,跳过 endSession
123 124 ImRtcParticipantDO p = buildParticipant(10L, "r1", 100L, ImRtcParticipantStatusEnum.INVITING);
124 125 when(rtcParticipantMapper.selectListByStatusAndInviteTimeBefore(any(), any()))
125   - .thenReturn(List.of(p));
126   - when(adminUserApi.getUserMap(anySet())).thenReturn(Map.of(100L, buildUser(100L)));
  126 + .thenReturn(listOf(p));
  127 + when(adminUserApi.getUserMap(anySet())).thenReturn(mapOf(100L, buildUser(100L)));
127 128 when(rtcParticipantMapper.updateByIdAndStatus(eq(10L), eq(ImRtcParticipantStatusEnum.INVITING.getStatus()), any()))
128 129 .thenReturn(1);
129 130 ImRtcCallDO call = buildCall("r1", 200L, ImConversationTypeEnum.GROUP, 999L);
130 131 when(rtcCallMapper.selectByRoom("r1")).thenReturn(call);
131   - when(groupMemberService.getActiveGroupMemberUserIdsByGroupId(999L)).thenReturn(List.of(200L, 201L));
  132 + when(groupMemberService.getActiveGroupMemberUserIdsByGroupId(999L)).thenReturn(listOf(200L, 201L));
132 133 // 房内 2 个 JOINED + 1 个 INVITING → shouldCloseGroupRoom 返 false
133   - when(rtcParticipantMapper.selectListByRoom("r1")).thenReturn(List.of(
  134 + when(rtcParticipantMapper.selectListByRoom("r1")).thenReturn(listOf(
134 135 buildParticipant(20L, "r1", 200L, ImRtcParticipantStatusEnum.JOINED),
135 136 buildParticipant(21L, "r1", 201L, ImRtcParticipantStatusEnum.JOINED),
136 137 buildParticipant(22L, "r1", 202L, ImRtcParticipantStatusEnum.INVITING)
... ... @@ -150,8 +151,8 @@ public class ImRtcCallServiceImplTest extends BaseMockitoUnitTest {
150 151 // 准备:CAS 成功后通话主表缺失(异常兜底场景)
151 152 ImRtcParticipantDO p = buildParticipant(10L, "r1", 100L, ImRtcParticipantStatusEnum.INVITING);
152 153 when(rtcParticipantMapper.selectListByStatusAndInviteTimeBefore(any(), any()))
153   - .thenReturn(List.of(p));
154   - when(adminUserApi.getUserMap(anySet())).thenReturn(Map.of(100L, buildUser(100L)));
  154 + .thenReturn(listOf(p));
  155 + when(adminUserApi.getUserMap(anySet())).thenReturn(mapOf(100L, buildUser(100L)));
155 156 when(rtcParticipantMapper.updateByIdAndStatus(eq(10L), eq(ImRtcParticipantStatusEnum.INVITING.getStatus()), any()))
156 157 .thenReturn(1);
157 158 when(rtcCallMapper.selectByRoom("r1")).thenReturn(null);
... ... @@ -219,15 +220,15 @@ public class ImRtcCallServiceImplTest extends BaseMockitoUnitTest {
219 220 ImRtcParticipantDO timeoutTarget = buildParticipant(11L, "r1", 101L, ImRtcParticipantStatusEnum.INVITING);
220 221 when(rtcParticipantMapper.selectListByRoomAndStatusAndInviteTimeBefore(
221 222 eq("r1"), eq(ImRtcParticipantStatusEnum.INVITING.getStatus()), any()))
222   - .thenReturn(List.of(timeoutTarget));
223   - when(adminUserApi.getUserMap(anySet())).thenReturn(Map.of(101L, buildUser(101L)));
  223 + .thenReturn(listOf(timeoutTarget));
  224 + when(adminUserApi.getUserMap(anySet())).thenReturn(mapOf(101L, buildUser(101L)));
224 225 when(rtcParticipantMapper.updateByIdAndStatus(eq(11L), eq(ImRtcParticipantStatusEnum.INVITING.getStatus()), any()))
225 226 .thenReturn(1);
226 227 ImRtcCallDO call = buildCall("r1", 200L, ImConversationTypeEnum.GROUP, 999L);
227 228 when(rtcCallMapper.selectByRoom("r1")).thenReturn(call);
228   - when(groupMemberService.getActiveGroupMemberUserIdsByGroupId(999L)).thenReturn(List.of(200L, 201L));
  229 + when(groupMemberService.getActiveGroupMemberUserIdsByGroupId(999L)).thenReturn(listOf(200L, 201L));
229 230 // 让 shouldCloseGroupRoom 返 false
230   - when(rtcParticipantMapper.selectListByRoom("r1")).thenReturn(List.of(
  231 + when(rtcParticipantMapper.selectListByRoom("r1")).thenReturn(listOf(
231 232 buildParticipant(20L, "r1", 200L, ImRtcParticipantStatusEnum.JOINED),
232 233 buildParticipant(21L, "r1", 201L, ImRtcParticipantStatusEnum.JOINED)
233 234 ));
... ... @@ -253,7 +254,7 @@ public class ImRtcCallServiceImplTest extends BaseMockitoUnitTest {
253 254 ImRtcCallCreateReqVO reqVO = new ImRtcCallCreateReqVO();
254 255 reqVO.setConversationType(ImConversationTypeEnum.GROUP.getType());
255 256 reqVO.setGroupId(10L);
256   - reqVO.setInviteeIds(Set.of(100L));
  257 + reqVO.setInviteeIds(setOf(100L));
257 258  
258 259 ServiceException exception = assertThrows(ServiceException.class,
259 260 () -> rtcCallService.createCall(100L, reqVO));
... ... @@ -335,14 +336,14 @@ public class ImRtcCallServiceImplTest extends BaseMockitoUnitTest {
335 336 Callable<Void> callable = invocation.getArgument(1);
336 337 return callable.call();
337 338 });
338   - when(rtcParticipantMapper.selectListByRoom("r1")).thenReturn(List.of(
  339 + when(rtcParticipantMapper.selectListByRoom("r1")).thenReturn(listOf(
339 340 buildParticipant(10L, "r1", 200L, ImRtcParticipantStatusEnum.JOINED),
340 341 buildParticipant(11L, "r1", 201L, ImRtcParticipantStatusEnum.JOINED),
341 342 buildParticipant(12L, "r1", 202L, ImRtcParticipantStatusEnum.INVITING)
342 343 ));
343 344 ImRtcCallInviteReqVO reqVO = new ImRtcCallInviteReqVO();
344 345 reqVO.setRoom("r1");
345   - reqVO.setInviteeIds(Set.of(203L));
  346 + reqVO.setInviteeIds(setOf(203L));
346 347  
347 348 ServiceException exception = assertThrows(ServiceException.class,
348 349 () -> rtcCallService.inviteCall(200L, reqVO));
... ...
yudao-module-im/src/test/java/cn/iocoder/yudao/module/im/service/sensitiveword/ImSensitiveWordServiceImplTest.java
... ... @@ -19,6 +19,7 @@ import java.util.List;
19 19 import static cn.iocoder.yudao.module.im.enums.ErrorCodeConstants.MESSAGE_SENSITIVE_WORD_BLOCKED;
20 20 import static cn.iocoder.yudao.module.im.enums.ErrorCodeConstants.SENSITIVE_WORD_DUPLICATED;
21 21 import static cn.iocoder.yudao.module.im.enums.ErrorCodeConstants.SENSITIVE_WORD_NOT_EXISTS;
  22 +import static cn.iocoder.yudao.module.im.util.ImTestCollectionUtils.*;
22 23 import static org.junit.jupiter.api.Assertions.*;
23 24 import static org.mockito.Mockito.*;
24 25  
... ... @@ -44,7 +45,7 @@ public class ImSensitiveWordServiceImplTest extends BaseMockitoUnitTest {
44 45 // mock 启用敏感词列表;LoadingCache 在首次 validateText 时懒加载,无需主动 init
45 46 // 用 lenient 避免 null / empty 等不触发 cache load 的用例报 UnnecessaryStubbing
46 47 lenient().when(imSensitiveWordMapper.selectListByStatus(CommonStatusEnum.ENABLE.getStatus()))
47   - .thenReturn(List.of(
  48 + .thenReturn(listOf(
48 49 ImSensitiveWordDO.builder().id(1L).word("badword")
49 50 .status(CommonStatusEnum.ENABLE.getStatus()).build(),
50 51 ImSensitiveWordDO.builder().id(2L).word("违禁词")
... ... @@ -118,7 +119,7 @@ public class ImSensitiveWordServiceImplTest extends BaseMockitoUnitTest {
118 119  
119 120 // 准备:mapper 返回新词库(额外多一个 newbad),并让 createSensitiveWord 走通
120 121 when(imSensitiveWordMapper.selectListByStatus(CommonStatusEnum.ENABLE.getStatus()))
121   - .thenReturn(List.of(
  122 + .thenReturn(listOf(
122 123 ImSensitiveWordDO.builder().id(1L).word("badword")
123 124 .status(CommonStatusEnum.ENABLE.getStatus()).build(),
124 125 ImSensitiveWordDO.builder().id(2L).word("违禁词")
... ... @@ -178,7 +179,7 @@ public class ImSensitiveWordServiceImplTest extends BaseMockitoUnitTest {
178 179 when(imSensitiveWordMapper.selectByWord("updatedbad")).thenReturn(null);
179 180 // 准备:reload 时返回新词库
180 181 when(imSensitiveWordMapper.selectListByStatus(CommonStatusEnum.ENABLE.getStatus()))
181   - .thenReturn(List.of(
  182 + .thenReturn(listOf(
182 183 ImSensitiveWordDO.builder().id(1L).word("updatedbad")
183 184 .status(CommonStatusEnum.ENABLE.getStatus()).build()
184 185 ));
... ... @@ -211,7 +212,7 @@ public class ImSensitiveWordServiceImplTest extends BaseMockitoUnitTest {
211 212 .status(CommonStatusEnum.ENABLE.getStatus()).build());
212 213 // 准备:reload 时返回剩余词库(只剩中文那条)
213 214 when(imSensitiveWordMapper.selectListByStatus(CommonStatusEnum.ENABLE.getStatus()))
214   - .thenReturn(List.of(
  215 + .thenReturn(listOf(
215 216 ImSensitiveWordDO.builder().id(2L).word("违禁词")
216 217 .status(CommonStatusEnum.ENABLE.getStatus()).build()
217 218 ));
... ... @@ -251,24 +252,24 @@ public class ImSensitiveWordServiceImplTest extends BaseMockitoUnitTest {
251 252  
252 253 // 准备:reload 时返回空词库
253 254 when(imSensitiveWordMapper.selectListByStatus(CommonStatusEnum.ENABLE.getStatus()))
254   - .thenReturn(List.of());
  255 + .thenReturn(listOf());
255 256  
256 257 // 调用:批量删除,触发 invalidate
257   - sensitiveWordService.deleteSensitiveWordList(List.of(1L, 2L));
  258 + sensitiveWordService.deleteSensitiveWordList(listOf(1L, 2L));
258 259  
259 260 // 调用 + 断言:所有词都不再命中
260 261 assertDoesNotThrow(() -> sensitiveWordService.validateText("contains badword here"));
261 262 assertDoesNotThrow(() -> sensitiveWordService.validateText("这条消息里有违禁词哦"));
262 263  
263 264 // 断言:deleteByIds 被调用 1 次;selectListByStatus 共 2 次
264   - verify(imSensitiveWordMapper, times(1)).deleteByIds(List.of(1L, 2L));
  265 + verify(imSensitiveWordMapper, times(1)).deleteByIds(listOf(1L, 2L));
265 266 verify(imSensitiveWordMapper, times(2)).selectListByStatus(CommonStatusEnum.ENABLE.getStatus());
266 267 }
267 268  
268 269 @Test
269 270 public void testDeleteSensitiveWordList_emptyIds_skip() {
270 271 // 调用:空列表直接返回
271   - sensitiveWordService.deleteSensitiveWordList(List.of());
  272 + sensitiveWordService.deleteSensitiveWordList(listOf());
272 273  
273 274 // 断言:mapper 不被调用
274 275 verify(imSensitiveWordMapper, never()).deleteByIds(anyList());
... ...
yudao-module-im/src/test/java/cn/iocoder/yudao/module/im/service/websocket/ImWebSocketServiceImplTest.java
... ... @@ -18,6 +18,7 @@ import java.util.Arrays;
18 18 import java.util.Collections;
19 19 import java.util.List;
20 20  
  21 +import static cn.iocoder.yudao.module.im.util.ImTestCollectionUtils.*;
21 22 import static org.junit.jupiter.api.Assertions.assertEquals;
22 23 import static org.mockito.ArgumentMatchers.eq;
23 24 import static org.mockito.Mockito.*;
... ... @@ -107,7 +108,7 @@ public class ImWebSocketServiceImplTest extends BaseMockitoUnitTest {
107 108 dto.setGroupId(10L);
108 109 dto.setSenderId(1L);
109 110  
110   - imWebSocketService.sendGroupMessageAsync(List.of(1L, 2L, 3L), dto);
  111 + imWebSocketService.sendGroupMessageAsync(listOf(1L, 2L, 3L), dto);
111 112  
112 113 verify(webSocketMessageSender).sendObject(
113 114 eq(UserTypeEnum.ADMIN.getValue()), eq(1L), eq(ImGroupMessageDTO.TYPE), eq(dto));
... ... @@ -130,7 +131,7 @@ public class ImWebSocketServiceImplTest extends BaseMockitoUnitTest {
130 131 doThrow(new RuntimeException("user offline"))
131 132 .when(webSocketMessageSender).sendObject(anyInt(), eq(1L), anyString(), any());
132 133  
133   - imWebSocketService.sendGroupMessageAsync(List.of(1L, 2L, 3L), dto);
  134 + imWebSocketService.sendGroupMessageAsync(listOf(1L, 2L, 3L), dto);
134 135  
135 136 // 2L 和 3L 也都被推送
136 137 verify(webSocketMessageSender).sendObject(anyInt(), eq(2L), anyString(), any());
... ...