diff --git a/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/controller/admin/face/ImFacePackController.java b/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/controller/admin/face/ImFacePackController.java index ea90824..6438c4d 100644 --- a/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/controller/admin/face/ImFacePackController.java +++ b/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/controller/admin/face/ImFacePackController.java @@ -1,5 +1,6 @@ package cn.iocoder.yudao.module.im.controller.admin.face; +import cn.hutool.core.collection.ListUtil; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.module.im.controller.admin.face.vo.pack.ImFacePackUserRespVO; @@ -39,7 +40,7 @@ public class ImFacePackController { // 1.1 拉所有启用表情包 List packs = facePackService.getEnabledFacePackList(); if (packs.isEmpty()) { - return success(List.of()); + return success(ListUtil.of()); } // 1.2 拉这些包下所有启用表情,按 packId 分组 List items = facePackItemService.getEnabledItemListByPackIds( @@ -49,7 +50,7 @@ public class ImFacePackController { // 2. 拼装:BeanUtils 把 pack 字段映射 + 自己塞 items List result = convertList(packs, pack -> { ImFacePackUserRespVO vo = BeanUtils.toBean(pack, ImFacePackUserRespVO.class); - vo.setItems(BeanUtils.toBean(itemsByPackId.getOrDefault(pack.getId(), List.of()), ImFacePackUserRespVO.Item.class)); + vo.setItems(BeanUtils.toBean(itemsByPackId.getOrDefault(pack.getId(), ListUtil.of()), ImFacePackUserRespVO.Item.class)); return vo; }); return success(result); diff --git a/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/enums/message/ImMessageTypeEnum.java b/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/enums/message/ImMessageTypeEnum.java index 5b1b446..d854306 100644 --- a/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/enums/message/ImMessageTypeEnum.java +++ b/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/enums/message/ImMessageTypeEnum.java @@ -1,5 +1,6 @@ package cn.iocoder.yudao.module.im.enums.message; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.lang.Assert; import cn.hutool.core.util.ArrayUtil; import cn.iocoder.yudao.framework.common.core.ArrayValuable; @@ -340,7 +341,7 @@ public enum ImMessageTypeEnum implements ArrayValuable { public static final Integer[] ARRAYS = Arrays.stream(values()).map(ImMessageTypeEnum::getType).toArray(Integer[]::new); - private static final Set FRIEND_NOTIFICATION_TYPES = Set.of( + private static final Set FRIEND_NOTIFICATION_TYPES = CollUtil.newHashSet( FRIEND_REQUEST_APPROVED.type, FRIEND_REQUEST_REJECTED.type, FRIEND_REQUEST_RECEIVED.type, @@ -351,12 +352,12 @@ public enum ImMessageTypeEnum implements ArrayValuable { FRIEND_INFO_UPDATED.type, FRIEND_UPDATE.type); - private static final Set GROUP_REQUEST_NOTIFICATION_TYPES = Set.of( + private static final Set GROUP_REQUEST_NOTIFICATION_TYPES = CollUtil.newHashSet( GROUP_REQUEST_RECEIVED.type, GROUP_REQUEST_APPROVED.type, GROUP_REQUEST_REJECTED.type); - private static final Set RTC_NOTIFICATION_TYPES = Set.of( + private static final Set RTC_NOTIFICATION_TYPES = CollUtil.newHashSet( RTC_CALL.type, RTC_PARTICIPANT_CONNECTED.type, RTC_PARTICIPANT_DISCONNECTED.type); diff --git a/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/service/friend/ImFriendRequestServiceImpl.java b/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/service/friend/ImFriendRequestServiceImpl.java index 12b5fb1..d024e9d 100644 --- a/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/service/friend/ImFriendRequestServiceImpl.java +++ b/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/service/friend/ImFriendRequestServiceImpl.java @@ -1,5 +1,6 @@ package cn.iocoder.yudao.module.im.service.friend; +import cn.hutool.core.collection.ListUtil; import cn.hutool.core.util.BooleanUtil; import cn.hutool.core.util.ObjUtil; import cn.hutool.extra.spring.SpringUtil; @@ -172,7 +173,7 @@ public class ImFriendRequestServiceImpl implements ImFriendRequestService { // 1.1 校验申请存在、未处理、操作人是接收方 ImFriendRequestDO request = validateRequestForHandle(userId, requestId); // 1.2 复验双方用户有效 - adminUserApi.validateUserList(List.of(request.getFromUserId(), request.getToUserId())); + adminUserApi.validateUserList(ListUtil.of(request.getFromUserId(), request.getToUserId())); // 2. 乐观锁更新申请处理结果 ImFriendRequestDO updateObj = new ImFriendRequestDO() @@ -224,7 +225,7 @@ public class ImFriendRequestServiceImpl implements ImFriendRequestService { public List getMyFriendRequestList(Long userId, Long maxId, Integer limit) { ImFriendRequestDO maxRequest = maxId != null ? friendRequestMapper.selectById(maxId) : null; if (maxId != null && maxRequest == null) { - return List.of(); + return ListUtil.of(); } return friendRequestMapper.selectMyList(userId, maxRequest != null ? maxRequest.getUpdateTime() : null, diff --git a/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/service/group/ImGroupMemberServiceImpl.java b/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/service/group/ImGroupMemberServiceImpl.java index 523841e..ed9e1bb 100644 --- a/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/service/group/ImGroupMemberServiceImpl.java +++ b/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/service/group/ImGroupMemberServiceImpl.java @@ -1,6 +1,7 @@ package cn.iocoder.yudao.module.im.service.group; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.collection.ListUtil; import cn.hutool.core.util.ObjUtil; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; @@ -78,7 +79,7 @@ public class ImGroupMemberServiceImpl implements ImGroupMemberService { public List getGroupMemberListByOwnerAndAdmin(Long groupId) { // TODO DONE @AI:把条件往下传;这样减少加载数据量! return groupMemberMapper.selectListByGroupIdAndStatusAndRoles(groupId, CommonStatusEnum.ENABLE.getStatus(), - List.of(ImGroupMemberRoleEnum.OWNER.getRole(), ImGroupMemberRoleEnum.ADMIN.getRole())); + ListUtil.of(ImGroupMemberRoleEnum.OWNER.getRole(), ImGroupMemberRoleEnum.ADMIN.getRole())); } /** @@ -270,7 +271,7 @@ public class ImGroupMemberServiceImpl implements ImGroupMemberService { boolean groupRemarkChanged = updateReqVO.getGroupRemark() != null && ObjUtil.notEqual(updateReqVO.getGroupRemark(), member.getGroupRemark()); if (silentChanged || groupRemarkChanged) { - groupMessageService.sendGroupMessage(userId, List.of(userId), ImGroupMessageSendDTO.ofGroupMemberSettingUpdate( + groupMessageService.sendGroupMessage(userId, ListUtil.of(userId), ImGroupMessageSendDTO.ofGroupMemberSettingUpdate( groupId, userId, updateReqVO.getSilent(), updateReqVO.getGroupRemark())); } } diff --git a/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/service/group/ImGroupServiceImpl.java b/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/service/group/ImGroupServiceImpl.java index 541aaf3..61f0273 100644 --- a/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/service/group/ImGroupServiceImpl.java +++ b/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; import cn.iocoder.yudao.module.im.dal.dataobject.message.ImGroupMessageDO; import cn.iocoder.yudao.module.im.dal.mysql.group.ImGroupMapper; import cn.iocoder.yudao.module.im.enums.group.ImGroupAddSourceEnum; -import cn.iocoder.yudao.module.im.framework.config.ImProperties; import cn.iocoder.yudao.module.im.enums.group.ImGroupMemberRoleEnum; import cn.iocoder.yudao.module.im.enums.message.ImMessageStatusEnum; import cn.iocoder.yudao.module.im.enums.message.ImMessageTypeEnum; +import cn.iocoder.yudao.module.im.framework.config.ImProperties; import cn.iocoder.yudao.module.im.service.friend.ImFriendService; import cn.iocoder.yudao.module.im.service.message.ImGroupMessageService; import cn.iocoder.yudao.module.im.service.message.dto.ImGroupMessageSendDTO; @@ -413,12 +413,12 @@ public class ImGroupServiceImpl implements ImGroupService { ImGroupMemberDO newOwner = groupMemberService.validateMemberInGroup(groupId, newOwnerUserId); // 2.1 更新成员角色 - int newOwnerAffected = groupMemberService.updateGroupMemberRole(groupId, Set.of(newOwner.getUserId()), + int newOwnerAffected = groupMemberService.updateGroupMemberRole(groupId, CollUtil.newHashSet(newOwner.getUserId()), ImGroupMemberRoleEnum.OWNER.getRole()); if (newOwnerAffected != 1) { throw exception(GROUP_MEMBER_NOT_IN_GROUP); } - int oldOwnerAffected = groupMemberService.updateGroupMemberRole(groupId, Set.of(userId), + int oldOwnerAffected = groupMemberService.updateGroupMemberRole(groupId, CollUtil.newHashSet(userId), ImGroupMemberRoleEnum.NORMAL.getRole()); if (oldOwnerAffected != 1) { throw exception(GROUP_MEMBER_NOT_IN_GROUP); diff --git a/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/service/message/ImGroupMessageServiceImpl.java b/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/service/message/ImGroupMessageServiceImpl.java index 7291bde..bfdefc9 100644 --- a/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/service/message/ImGroupMessageServiceImpl.java +++ b/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; import java.time.LocalDateTime; import java.util.*; +import java.util.stream.Collectors; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.*; @@ -295,7 +296,7 @@ public class ImGroupMessageServiceImpl implements ImGroupMessageService { .filter(msg -> isMessageVisible(msg, memberMap.get(msg.getGroupId()), userId)) .sorted(Comparator.comparing(ImGroupMessageDO::getId)) .limit(size) - .toList(); + .collect(Collectors.toList()); } /** diff --git a/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/util/ImMessageUtils.java b/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/util/ImMessageUtils.java index 389f140..1ff958a 100644 --- a/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/util/ImMessageUtils.java +++ b/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/util/ImMessageUtils.java @@ -87,12 +87,15 @@ public class ImMessageUtils { validateNotBlank(getString(map, "name")); } + @SuppressWarnings("PatternVariableCanBeUsed") private static void validateMergeContent(Map map) { validateNotBlank(getString(map, "title")); Object messages = map.get("messages"); - if (!(messages instanceof Collection messageList) - || CollUtil.isEmpty(messageList) - || messageList.size() > MERGE_MESSAGE_MAX_COUNT) { + if (!(messages instanceof Collection)) { + throw exception(MESSAGE_CONTENT_INVALID); + } + Collection messageList = (Collection) messages; + if (CollUtil.isEmpty(messageList) || messageList.size() > MERGE_MESSAGE_MAX_COUNT) { throw exception(MESSAGE_CONTENT_INVALID); } } diff --git a/yudao-module-im/src/test/java/cn/iocoder/yudao/module/im/dal/mysql/message/ImGroupMessageMapperTest.java b/yudao-module-im/src/test/java/cn/iocoder/yudao/module/im/dal/mysql/message/ImGroupMessageMapperTest.java index 9c71fd2..16a13aa 100644 --- a/yudao-module-im/src/test/java/cn/iocoder/yudao/module/im/dal/mysql/message/ImGroupMessageMapperTest.java +++ b/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; import java.time.LocalDateTime; import java.util.List; +import static cn.iocoder.yudao.module.im.util.ImTestCollectionUtils.*; import static org.junit.jupiter.api.Assertions.*; /** @@ -35,7 +36,7 @@ public class ImGroupMessageMapperTest extends BaseDbUnitTest { mapper.insert(msg20); // 调用:只查群 10 - List result = mapper.selectListByMinId(List.of(10L), 0L, FAR_PAST, 100); + List result = mapper.selectListByMinId(listOf(10L), 0L, FAR_PAST, 100); // 断言:只有 msg10 assertEquals(1, result.size()); @@ -50,7 +51,7 @@ public class ImGroupMessageMapperTest extends BaseDbUnitTest { ImGroupMessageDO recalled = buildMessage(10L, 1L, ImMessageStatusEnum.RECALL); mapper.insert(recalled); - List result = mapper.selectListByMinId(List.of(10L), 0L, FAR_PAST, 100); + List result = mapper.selectListByMinId(listOf(10L), 0L, FAR_PAST, 100); // 断言:撤回消息一并返回,由客户端按 status 切换渲染 assertEquals(2, result.size()); @@ -66,7 +67,7 @@ public class ImGroupMessageMapperTest extends BaseDbUnitTest { outWindow.setSendTime(LocalDateTime.now().minusDays(40)); mapper.insert(outWindow); - List result = mapper.selectListByMinId(List.of(10L), 0L, + List result = mapper.selectListByMinId(listOf(10L), 0L, LocalDateTime.now().minusDays(30), 100); assertEquals(1, result.size()); @@ -84,7 +85,7 @@ public class ImGroupMessageMapperTest extends BaseDbUnitTest { mapper.insert(m3); // 调用:size=2,返回 id 最小的 2 条 - List result = mapper.selectListByMinId(List.of(10L), 0L, FAR_PAST, 2); + List result = mapper.selectListByMinId(listOf(10L), 0L, FAR_PAST, 2); assertEquals(2, result.size()); assertTrue(result.get(0).getId() < result.get(1).getId()); diff --git a/yudao-module-im/src/test/java/cn/iocoder/yudao/module/im/service/friend/ImFriendRequestServiceImplTest.java b/yudao-module-im/src/test/java/cn/iocoder/yudao/module/im/service/friend/ImFriendRequestServiceImplTest.java index 6c094cf..a3c9c1d 100644 --- a/yudao-module-im/src/test/java/cn/iocoder/yudao/module/im/service/friend/ImFriendRequestServiceImplTest.java +++ b/yudao-module-im/src/test/java/cn/iocoder/yudao/module/im/service/friend/ImFriendRequestServiceImplTest.java @@ -24,6 +24,7 @@ import java.time.LocalDateTime; import java.util.List; import static cn.iocoder.yudao.module.im.enums.ErrorCodeConstants.*; +import static cn.iocoder.yudao.module.im.util.ImTestCollectionUtils.*; import static org.junit.jupiter.api.Assertions.*; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyInt; @@ -228,7 +229,7 @@ public class ImFriendRequestServiceImplTest extends BaseMockitoUnitTest { friendRequestService.agreeFriendRequest(2L, 100L); // 断言:双向建立好友 + 推 APPROVED 给发起方 - verify(adminUserApi).validateUserList(List.of(1L, 2L)); + verify(adminUserApi).validateUserList(listOf(1L, 2L)); verify(friendService).becomeFriends(request); verify(websocketService).sendPrivateMessageAsync(eq(1L), any(ImPrivateMessageDTO.class)); } diff --git a/yudao-module-im/src/test/java/cn/iocoder/yudao/module/im/service/friend/ImFriendServiceImplTest.java b/yudao-module-im/src/test/java/cn/iocoder/yudao/module/im/service/friend/ImFriendServiceImplTest.java index 81d03f9..6522093 100644 --- a/yudao-module-im/src/test/java/cn/iocoder/yudao/module/im/service/friend/ImFriendServiceImplTest.java +++ b/yudao-module-im/src/test/java/cn/iocoder/yudao/module/im/service/friend/ImFriendServiceImplTest.java @@ -22,6 +22,7 @@ import java.util.Collections; import java.util.List; import static cn.iocoder.yudao.module.im.enums.ErrorCodeConstants.FRIEND_NOT_FRIEND; +import static cn.iocoder.yudao.module.im.util.ImTestCollectionUtils.*; import static org.junit.jupiter.api.Assertions.*; import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.never; @@ -248,7 +249,7 @@ public class ImFriendServiceImplTest extends BaseMockitoUnitTest { @Test public void testGetFriendList() { - List list = List.of( + List list = listOf( ImFriendDO.builder().id(1L).userId(1L).friendUserId(2L) .status(CommonStatusEnum.ENABLE.getStatus()).build(), ImFriendDO.builder().id(2L).userId(1L).friendUserId(3L) @@ -276,9 +277,9 @@ public class ImFriendServiceImplTest extends BaseMockitoUnitTest { ImFriendDO friend3 = ImFriendDO.builder().id(2L).userId(1L).friendUserId(3L) .status(CommonStatusEnum.ENABLE.getStatus()).build(); when(imFriendMapper.selectListByUserIdAndStatus(1L, CommonStatusEnum.ENABLE.getStatus())) - .thenReturn(List.of(friend2, friend3)); + .thenReturn(listOf(friend2, friend3)); when(imFriendMapper.selectListByUserIdsAndFriendUserIdAndStatus(anyCollection(), eq(1L), - eq(CommonStatusEnum.ENABLE.getStatus()))).thenReturn(List.of( + eq(CommonStatusEnum.ENABLE.getStatus()))).thenReturn(listOf( ImFriendDO.builder().userId(2L).friendUserId(1L) .status(CommonStatusEnum.ENABLE.getStatus()).build())); diff --git a/yudao-module-im/src/test/java/cn/iocoder/yudao/module/im/service/group/ImGroupMemberServiceImplTest.java b/yudao-module-im/src/test/java/cn/iocoder/yudao/module/im/service/group/ImGroupMemberServiceImplTest.java index 72537a0..27e0b23 100644 --- a/yudao-module-im/src/test/java/cn/iocoder/yudao/module/im/service/group/ImGroupMemberServiceImplTest.java +++ b/yudao-module-im/src/test/java/cn/iocoder/yudao/module/im/service/group/ImGroupMemberServiceImplTest.java @@ -18,6 +18,7 @@ import org.springframework.dao.DuplicateKeyException; import java.util.List; import static cn.iocoder.yudao.module.im.enums.ErrorCodeConstants.GROUP_MEMBER_NOT_IN_GROUP; +import static cn.iocoder.yudao.module.im.util.ImTestCollectionUtils.*; import static org.junit.jupiter.api.Assertions.*; import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; @@ -116,10 +117,10 @@ public class ImGroupMemberServiceImplTest extends BaseMockitoUnitTest { ImGroupMemberDO exist4 = ImGroupMemberDO.builder().id(40L).groupId(10L).userId(4L) .status(CommonStatusEnum.ENABLE.getStatus()).build(); when(groupMemberMapper.selectListByGroupIdAndUserIds(eq(10L), anyCollection())) - .thenReturn(List.of(exist3, exist4)); + .thenReturn(listOf(exist3, exist4)); // 调用 - groupMemberService.addGroupMembers(10L, List.of(2L, 3L, 4L)); + groupMemberService.addGroupMembers(10L, listOf(2L, 3L, 4L)); // 断言:updates 只有用户 3;inserts 只有用户 2 verify(groupMemberMapper).updateRejoinFields(eq(30L), eq(CommonStatusEnum.ENABLE.getStatus()), @@ -131,7 +132,7 @@ public class ImGroupMemberServiceImplTest extends BaseMockitoUnitTest { @Test public void testAddGroupMembers_allExisting_onlyUpdates() { // 准备:传入的 3 个用户都已有记录(全部 DISABLE) → 只做 update,不做 insert - List existing = List.of( + List existing = listOf( ImGroupMemberDO.builder().id(1L).groupId(10L).userId(2L) .status(CommonStatusEnum.DISABLE.getStatus()).build(), ImGroupMemberDO.builder().id(2L).groupId(10L).userId(3L) @@ -140,7 +141,7 @@ public class ImGroupMemberServiceImplTest extends BaseMockitoUnitTest { when(groupMemberMapper.selectListByGroupIdAndUserIds(eq(10L), anyCollection())) .thenReturn(existing); - groupMemberService.addGroupMembers(10L, List.of(2L, 3L)); + groupMemberService.addGroupMembers(10L, listOf(2L, 3L)); verify(groupMemberMapper, times(2)).updateRejoinFields(anyLong(), eq(CommonStatusEnum.ENABLE.getStatus()), any(), eq(ImGroupMemberRoleEnum.NORMAL.getRole()), isNull(), isNull()); @@ -151,9 +152,9 @@ public class ImGroupMemberServiceImplTest extends BaseMockitoUnitTest { public void testAddGroupMembers_allNew_onlyInserts() { // 准备:都不存在 → 只做 insert when(groupMemberMapper.selectListByGroupIdAndUserIds(eq(10L), anyCollection())) - .thenReturn(List.of()); + .thenReturn(listOf()); - groupMemberService.addGroupMembers(10L, List.of(2L, 3L)); + groupMemberService.addGroupMembers(10L, listOf(2L, 3L)); verify(groupMemberMapper, never()).updateRejoinFields(anyLong(), anyInt(), any(), anyInt(), any(), any()); verify(groupMemberMapper).insertBatch(anyList()); @@ -162,14 +163,14 @@ public class ImGroupMemberServiceImplTest extends BaseMockitoUnitTest { @Test public void testAddGroupMembers_allExistingEnabled_nothingHappens() { // 准备:都已存在且 ENABLE → 既不 update 也不 insert - List existing = List.of( + List existing = listOf( ImGroupMemberDO.builder().id(1L).groupId(10L).userId(2L) .status(CommonStatusEnum.ENABLE.getStatus()).build() ); when(groupMemberMapper.selectListByGroupIdAndUserIds(eq(10L), anyCollection())) .thenReturn(existing); - groupMemberService.addGroupMembers(10L, List.of(2L)); + groupMemberService.addGroupMembers(10L, listOf(2L)); verify(groupMemberMapper, never()).updateRejoinFields(anyLong(), anyInt(), any(), anyInt(), any(), any()); verify(groupMemberMapper, never()).insertBatch(anyList()); @@ -179,14 +180,14 @@ public class ImGroupMemberServiceImplTest extends BaseMockitoUnitTest { public void testAddGroupMembers_batchInsertDuplicateFallback() { // 准备:两个新增成员,批量插入失败时降级为逐个 addGroupMember when(groupMemberMapper.selectListByGroupIdAndUserIds(eq(10L), anyCollection())) - .thenReturn(List.of()); + .thenReturn(listOf()); doThrow(new DuplicateKeyException("concurrent batch insert")) .when(groupMemberMapper).insertBatch(anyList()); // addGroupMember 单条兜底逻辑 when(groupMemberMapper.selectByGroupIdAndUserId(eq(10L), anyLong())).thenReturn(null); // 调用 - groupMemberService.addGroupMembers(10L, List.of(2L, 3L)); + groupMemberService.addGroupMembers(10L, listOf(2L, 3L)); // 断言:降级为逐条调用 insert verify(groupMemberMapper, times(2)).insert(any(ImGroupMemberDO.class)); @@ -244,7 +245,7 @@ public class ImGroupMemberServiceImplTest extends BaseMockitoUnitTest { // 公开字段昵称变化 → 全员广播 GROUP_MEMBER_NICKNAME_UPDATE verify(groupMessageService).sendGroupMessage(eq(1L), any(cn.iocoder.yudao.module.im.service.message.dto.ImGroupMessageSendDTO.class)); // 个人字段 silent 变化 → 仅自己多端同步 GROUP_MEMBER_SETTING_UPDATE - verify(groupMessageService).sendGroupMessage(eq(1L), eq(java.util.List.of(1L)), + verify(groupMessageService).sendGroupMessage(eq(1L), eq(listOf(1L)), any(cn.iocoder.yudao.module.im.service.message.dto.ImGroupMessageSendDTO.class)); } @@ -278,7 +279,7 @@ public class ImGroupMemberServiceImplTest extends BaseMockitoUnitTest { @Test public void testRemoveGroupMembers_batch() { - groupMemberService.removeGroupMembers(10L, List.of(2L, 3L)); + groupMemberService.removeGroupMembers(10L, listOf(2L, 3L)); ArgumentCaptor captor = ArgumentCaptor.forClass(ImGroupMemberDO.class); verify(groupMemberMapper).updateByGroupIdAndUserIdsAndStatus(eq(10L), anyCollection(), @@ -303,7 +304,7 @@ public class ImGroupMemberServiceImplTest extends BaseMockitoUnitTest { @Test public void testGetActiveGroupMemberUserIdsByGroupId_extractsUserIds() { // 准备:3 个 ENABLE 成员 - List members = List.of( + List members = listOf( ImGroupMemberDO.builder().groupId(10L).userId(1L) .status(CommonStatusEnum.ENABLE.getStatus()).build(), ImGroupMemberDO.builder().groupId(10L).userId(2L) @@ -318,13 +319,13 @@ public class ImGroupMemberServiceImplTest extends BaseMockitoUnitTest { List userIds = groupMemberService.getActiveGroupMemberUserIdsByGroupId(10L); // 断言:只返回 userId、顺序保留 - assertEquals(List.of(1L, 2L, 3L), userIds); + assertEquals(listOf(1L, 2L, 3L), userIds); } @Test public void testGetActiveGroupMemberUserIdsByGroupId_emptyList() { when(groupMemberMapper.selectListByGroupIdAndStatus( - 10L, CommonStatusEnum.ENABLE.getStatus())).thenReturn(List.of()); + 10L, CommonStatusEnum.ENABLE.getStatus())).thenReturn(listOf()); List userIds = groupMemberService.getActiveGroupMemberUserIdsByGroupId(10L); @@ -333,8 +334,8 @@ public class ImGroupMemberServiceImplTest extends BaseMockitoUnitTest { @Test public void testGetGroupMemberListByOwnerAndAdmin_passesRoles() { - List roles = List.of(ImGroupMemberRoleEnum.OWNER.getRole(), ImGroupMemberRoleEnum.ADMIN.getRole()); - List members = List.of(ImGroupMemberDO.builder().groupId(10L).userId(1L).build()); + List roles = listOf(ImGroupMemberRoleEnum.OWNER.getRole(), ImGroupMemberRoleEnum.ADMIN.getRole()); + List members = listOf(ImGroupMemberDO.builder().groupId(10L).userId(1L).build()); when(groupMemberMapper.selectListByGroupIdAndStatusAndRoles(10L, CommonStatusEnum.ENABLE.getStatus(), roles)) .thenReturn(members); diff --git a/yudao-module-im/src/test/java/cn/iocoder/yudao/module/im/service/group/ImGroupRequestServiceImplTest.java b/yudao-module-im/src/test/java/cn/iocoder/yudao/module/im/service/group/ImGroupRequestServiceImplTest.java index 4a19651..79b7fca 100644 --- a/yudao-module-im/src/test/java/cn/iocoder/yudao/module/im/service/group/ImGroupRequestServiceImplTest.java +++ b/yudao-module-im/src/test/java/cn/iocoder/yudao/module/im/service/group/ImGroupRequestServiceImplTest.java @@ -28,6 +28,7 @@ import java.util.Collection; import java.util.List; import static cn.iocoder.yudao.module.im.enums.ErrorCodeConstants.*; +import static cn.iocoder.yudao.module.im.util.ImTestCollectionUtils.*; import static org.junit.jupiter.api.Assertions.*; import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; @@ -93,7 +94,7 @@ public class ImGroupRequestServiceImplTest extends BaseMockitoUnitTest { .status(CommonStatusEnum.ENABLE.getStatus()).build(); when(groupService.validateGroupExists(10L)).thenReturn(group); // 群里有 owner + 一个 admin,作为 1503 推送目标 - when(groupMemberService.getGroupMemberListByOwnerAndAdmin(10L)).thenReturn(List.of( + when(groupMemberService.getGroupMemberListByOwnerAndAdmin(10L)).thenReturn(listOf( ImGroupMemberDO.builder().groupId(10L).userId(99L) .role(ImGroupMemberRoleEnum.OWNER.getRole()) .status(CommonStatusEnum.ENABLE.getStatus()).build(), @@ -125,7 +126,7 @@ public class ImGroupRequestServiceImplTest extends BaseMockitoUnitTest { .joinApproval(true) .status(CommonStatusEnum.ENABLE.getStatus()).build(); when(groupService.validateGroupExists(10L)).thenReturn(group); - when(groupMemberService.getGroupMemberListByOwnerAndAdmin(10L)).thenReturn(List.of( + when(groupMemberService.getGroupMemberListByOwnerAndAdmin(10L)).thenReturn(listOf( ImGroupMemberDO.builder().groupId(10L).userId(99L) .role(ImGroupMemberRoleEnum.OWNER.getRole()) .status(CommonStatusEnum.ENABLE.getStatus()).build())); @@ -190,7 +191,7 @@ public class ImGroupRequestServiceImplTest extends BaseMockitoUnitTest { ImGroupDO group = ImGroupDO.builder().id(10L).ownerUserId(99L) .status(CommonStatusEnum.ENABLE.getStatus()).build(); when(groupService.getGroup(10L)).thenReturn(group); - when(groupMemberService.getGroupMemberListByOwnerAndAdmin(10L)).thenReturn(List.of( + when(groupMemberService.getGroupMemberListByOwnerAndAdmin(10L)).thenReturn(listOf( ImGroupMemberDO.builder().groupId(10L).userId(99L) .role(ImGroupMemberRoleEnum.OWNER.getRole()) .status(CommonStatusEnum.ENABLE.getStatus()).build())); @@ -268,7 +269,7 @@ public class ImGroupRequestServiceImplTest extends BaseMockitoUnitTest { ImGroupDO group = ImGroupDO.builder().id(10L).ownerUserId(1L) .status(CommonStatusEnum.ENABLE.getStatus()).build(); when(groupService.getGroup(10L)).thenReturn(group); - when(groupMemberService.getGroupMemberListByOwnerAndAdmin(10L)).thenReturn(List.of( + when(groupMemberService.getGroupMemberListByOwnerAndAdmin(10L)).thenReturn(listOf( ImGroupMemberDO.builder().groupId(10L).userId(1L) .role(ImGroupMemberRoleEnum.OWNER.getRole()) .status(CommonStatusEnum.ENABLE.getStatus()).build())); @@ -289,16 +290,16 @@ public class ImGroupRequestServiceImplTest extends BaseMockitoUnitTest { .status(CommonStatusEnum.ENABLE.getStatus()).build(); when(groupService.validateGroupExists(10L)).thenReturn(group); when(groupRequestMapper.selectByGroupIdAndUserId(eq(10L), anyLong())).thenReturn(null); - when(groupMemberService.getGroupMemberListByOwnerAndAdmin(10L)).thenReturn(List.of( + when(groupMemberService.getGroupMemberListByOwnerAndAdmin(10L)).thenReturn(listOf( ImGroupMemberDO.builder().groupId(10L).userId(99L) .role(ImGroupMemberRoleEnum.OWNER.getRole()) .status(CommonStatusEnum.ENABLE.getStatus()).build())); - when(adminUserApi.getUserMap(anyCollection())).thenReturn(java.util.Map.of( + when(adminUserApi.getUserMap(anyCollection())).thenReturn(mapOf( 2L, buildUser(2L, "用户A"), 3L, buildUser(3L, "用户B"))); // 调用:邀请人 1L 邀请 2L、3L(都没有旧记录) - groupRequestService.createInviteRequestList(10L, 1L, List.of(2L, 3L)); + groupRequestService.createInviteRequestList(10L, 1L, listOf(2L, 3L)); // 断言:插入 2 条 + 推 1503 给 owner(每条 1 帧)共 2 帧 ArgumentCaptor captor = ArgumentCaptor.forClass(ImGroupRequestDO.class); @@ -323,14 +324,14 @@ public class ImGroupRequestServiceImplTest extends BaseMockitoUnitTest { .setHandleResult(ImGroupRequestHandleResultEnum.REFUSED.getResult()); when(groupRequestMapper.selectByGroupIdAndUserId(10L, 2L)).thenReturn(null, old); when(groupRequestMapper.insert(any(ImGroupRequestDO.class))).thenThrow(new DuplicateKeyException("dup")); - when(groupMemberService.getGroupMemberListByOwnerAndAdmin(10L)).thenReturn(List.of( + when(groupMemberService.getGroupMemberListByOwnerAndAdmin(10L)).thenReturn(listOf( ImGroupMemberDO.builder().groupId(10L).userId(99L) .role(ImGroupMemberRoleEnum.OWNER.getRole()) .status(CommonStatusEnum.ENABLE.getStatus()).build())); - when(adminUserApi.getUserMap(anyCollection())).thenReturn(java.util.Map.of(2L, buildUser(2L, "用户A"))); + when(adminUserApi.getUserMap(anyCollection())).thenReturn(mapOf(2L, buildUser(2L, "用户A"))); // 调用 - groupRequestService.createInviteRequestList(10L, 1L, List.of(2L)); + groupRequestService.createInviteRequestList(10L, 1L, listOf(2L)); // 断言:复用并重置旧邀请申请 verify(groupRequestMapper).updateInviteByIdReset(eq(50L), eq(1L), diff --git a/yudao-module-im/src/test/java/cn/iocoder/yudao/module/im/service/group/ImGroupServiceImplTest.java b/yudao-module-im/src/test/java/cn/iocoder/yudao/module/im/service/group/ImGroupServiceImplTest.java index b430f0b..991ee97 100644 --- a/yudao-module-im/src/test/java/cn/iocoder/yudao/module/im/service/group/ImGroupServiceImplTest.java +++ b/yudao-module-im/src/test/java/cn/iocoder/yudao/module/im/service/group/ImGroupServiceImplTest.java @@ -43,6 +43,7 @@ import java.util.Map; import java.util.Set; import static cn.iocoder.yudao.module.im.enums.ErrorCodeConstants.*; +import static cn.iocoder.yudao.module.im.util.ImTestCollectionUtils.*; import static org.junit.jupiter.api.Assertions.*; import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; @@ -108,13 +109,13 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest { // 准备:创建者 + 2 个初始成员,都是好友 ImGroupCreateReqVO reqVO = new ImGroupCreateReqVO(); reqVO.setName("测试群"); - reqVO.setMemberUserIds(new ArrayList<>(List.of(2L, 3L))); + reqVO.setMemberUserIds(new ArrayList<>(listOf(2L, 3L))); when(groupMapper.insert(any(ImGroupDO.class))).thenAnswer(invocation -> { ImGroupDO group = invocation.getArgument(0); group.setId(100L); return 1; }); - when(friendService.getActiveFriendList(eq(1L), anyCollection())).thenReturn(List.of( + when(friendService.getActiveFriendList(eq(1L), anyCollection())).thenReturn(listOf( ImFriendDO.builder().userId(1L).friendUserId(2L) .status(CommonStatusEnum.ENABLE.getStatus()).build(), ImFriendDO.builder().userId(1L).friendUserId(3L) @@ -140,15 +141,15 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest { // 准备:初始成员里有非好友 ImGroupCreateReqVO reqVO = new ImGroupCreateReqVO(); reqVO.setName("测试群"); - reqVO.setMemberUserIds(new ArrayList<>(List.of(2L, 3L))); + reqVO.setMemberUserIds(new ArrayList<>(listOf(2L, 3L))); // 只有 2 是好友,3 不是 - when(friendService.getActiveFriendList(eq(1L), anyCollection())).thenReturn(List.of( + when(friendService.getActiveFriendList(eq(1L), anyCollection())).thenReturn(listOf( ImFriendDO.builder().userId(1L).friendUserId(2L) .status(CommonStatusEnum.ENABLE.getStatus()).build())); AdminUserRespDTO u3 = new AdminUserRespDTO(); u3.setId(3L); u3.setNickname("李四"); - when(adminUserApi.getUserMap(anyCollection())).thenReturn(Map.of(3L, u3)); + when(adminUserApi.getUserMap(anyCollection())).thenReturn(mapOf(3L, u3)); // 调用并断言 ServiceException exception = assertThrows(ServiceException.class, @@ -327,8 +328,8 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest { // 被邀请人 2 和 3 都是好友 ImGroupMemberInviteReqVO reqVO = new ImGroupMemberInviteReqVO(); reqVO.setGroupId(10L); - reqVO.setMemberUserIds(new ArrayList<>(List.of(2L, 3L))); - List friends = List.of( + reqVO.setMemberUserIds(new ArrayList<>(listOf(2L, 3L))); + List friends = listOf( ImFriendDO.builder().userId(1L).friendUserId(2L) .status(CommonStatusEnum.ENABLE.getStatus()).build(), ImFriendDO.builder().userId(1L).friendUserId(3L) @@ -366,7 +367,7 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest { ImGroupMemberDO.builder().groupId(10L).userId(1L) .role(ImGroupMemberRoleEnum.NORMAL.getRole()) .status(CommonStatusEnum.ENABLE.getStatus()).build()); - when(groupMemberService.getActiveGroupMemberListByGroupId(10L)).thenReturn(List.of( + when(groupMemberService.getActiveGroupMemberListByGroupId(10L)).thenReturn(listOf( ImGroupMemberDO.builder().groupId(10L).userId(99L) .role(ImGroupMemberRoleEnum.OWNER.getRole()) .status(CommonStatusEnum.ENABLE.getStatus()).build(), @@ -376,8 +377,8 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest { ImGroupMemberInviteReqVO reqVO = new ImGroupMemberInviteReqVO(); reqVO.setGroupId(10L); - reqVO.setMemberUserIds(new ArrayList<>(List.of(2L, 3L))); - when(friendService.getActiveFriendList(eq(1L), anyCollection())).thenReturn(List.of( + reqVO.setMemberUserIds(new ArrayList<>(listOf(2L, 3L))); + when(friendService.getActiveFriendList(eq(1L), anyCollection())).thenReturn(listOf( ImFriendDO.builder().userId(1L).friendUserId(2L) .status(CommonStatusEnum.ENABLE.getStatus()).build(), ImFriendDO.builder().userId(1L).friendUserId(3L) @@ -408,15 +409,15 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest { ImGroupMemberDO.builder().groupId(10L).userId(1L) .role(ImGroupMemberRoleEnum.OWNER.getRole()) .status(CommonStatusEnum.ENABLE.getStatus()).build()); - when(groupMemberService.getActiveGroupMemberListByGroupId(10L)).thenReturn(List.of( + when(groupMemberService.getActiveGroupMemberListByGroupId(10L)).thenReturn(listOf( ImGroupMemberDO.builder().groupId(10L).userId(1L) .role(ImGroupMemberRoleEnum.OWNER.getRole()) .status(CommonStatusEnum.ENABLE.getStatus()).build())); ImGroupMemberInviteReqVO reqVO = new ImGroupMemberInviteReqVO(); reqVO.setGroupId(10L); - reqVO.setMemberUserIds(new ArrayList<>(List.of(2L, 3L))); - when(friendService.getActiveFriendList(eq(1L), anyCollection())).thenReturn(List.of( + reqVO.setMemberUserIds(new ArrayList<>(listOf(2L, 3L))); + when(friendService.getActiveFriendList(eq(1L), anyCollection())).thenReturn(listOf( ImFriendDO.builder().userId(1L).friendUserId(2L) .status(CommonStatusEnum.ENABLE.getStatus()).build(), ImFriendDO.builder().userId(1L).friendUserId(3L) @@ -445,18 +446,18 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest { .status(CommonStatusEnum.ENABLE.getStatus()).build(); when(groupMapper.selectById(10L)).thenReturn(group); when(groupMemberService.getActiveGroupMemberListByGroupId(10L)) - .thenReturn(List.of(ImGroupMemberDO.builder().groupId(10L).userId(1L) + .thenReturn(listOf(ImGroupMemberDO.builder().groupId(10L).userId(1L) .status(CommonStatusEnum.ENABLE.getStatus()).build())); ImGroupMemberInviteReqVO reqVO = new ImGroupMemberInviteReqVO(); reqVO.setGroupId(10L); - reqVO.setMemberUserIds(new ArrayList<>(List.of(2L, 3L))); + reqVO.setMemberUserIds(new ArrayList<>(listOf(2L, 3L))); // 只有 2 是好友,3 不是 - when(friendService.getActiveFriendList(eq(1L), anyCollection())).thenReturn(List.of( + when(friendService.getActiveFriendList(eq(1L), anyCollection())).thenReturn(listOf( ImFriendDO.builder().userId(1L).friendUserId(2L) .status(CommonStatusEnum.ENABLE.getStatus()).build())); AdminUserRespDTO u3 = new AdminUserRespDTO(); u3.setId(3L); u3.setNickname("李四"); - when(adminUserApi.getUserMap(anyCollection())).thenReturn(Map.of(3L, u3)); + when(adminUserApi.getUserMap(anyCollection())).thenReturn(mapOf(3L, u3)); ServiceException exception = assertThrows(ServiceException.class, () -> groupService.inviteGroupMember(1L, reqVO)); @@ -484,9 +485,9 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest { ImGroupMemberInviteReqVO reqVO = new ImGroupMemberInviteReqVO(); reqVO.setGroupId(10L); - reqVO.setMemberUserIds(new ArrayList<>(List.of(600L, 601L))); + reqVO.setMemberUserIds(new ArrayList<>(listOf(600L, 601L))); // 被邀请人都是好友 - when(friendService.getActiveFriendList(eq(1L), anyCollection())).thenReturn(List.of( + when(friendService.getActiveFriendList(eq(1L), anyCollection())).thenReturn(listOf( ImFriendDO.builder().userId(1L).friendUserId(600L) .status(CommonStatusEnum.ENABLE.getStatus()).build(), ImFriendDO.builder().userId(1L).friendUserId(601L) @@ -512,7 +513,7 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest { .status(CommonStatusEnum.ENABLE.getStatus()).build(); when(groupMapper.selectById(10L)).thenReturn(group); // 用户 2 已在群中 - when(groupMemberService.getActiveGroupMemberListByGroupId(10L)).thenReturn(List.of( + when(groupMemberService.getActiveGroupMemberListByGroupId(10L)).thenReturn(listOf( ImGroupMemberDO.builder().groupId(10L).userId(1L) .status(CommonStatusEnum.ENABLE.getStatus()).build(), ImGroupMemberDO.builder().groupId(10L).userId(2L) @@ -521,7 +522,7 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest { ImGroupMemberInviteReqVO reqVO = new ImGroupMemberInviteReqVO(); reqVO.setGroupId(10L); - reqVO.setMemberUserIds(new ArrayList<>(List.of(2L))); // 只邀请 2,他已在群中 + reqVO.setMemberUserIds(new ArrayList<>(listOf(2L))); // 只邀请 2,他已在群中 // 调用 groupService.inviteGroupMember(1L, reqVO); @@ -606,7 +607,7 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest { ImGroupMemberRemoveReqVO reqVO = new ImGroupMemberRemoveReqVO(); reqVO.setGroupId(10L); - reqVO.setMemberUserIds(List.of(1L, 2L)); + reqVO.setMemberUserIds(listOf(1L, 2L)); ServiceException exception = assertThrows(ServiceException.class, () -> groupService.removeGroupMember(1L, reqVO)); @@ -628,7 +629,7 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest { ImGroupMemberDO.builder().groupId(10L).userId(1L) .role(ImGroupMemberRoleEnum.OWNER.getRole()).build()); // 目标:两个普通成员 - when(groupMemberService.getGroupMembers(eq(10L), anyCollection())).thenReturn(List.of( + when(groupMemberService.getGroupMembers(eq(10L), anyCollection())).thenReturn(listOf( ImGroupMemberDO.builder().groupId(10L).userId(2L) .role(ImGroupMemberRoleEnum.NORMAL.getRole()) .status(CommonStatusEnum.ENABLE.getStatus()).build(), @@ -638,7 +639,7 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest { ImGroupMemberRemoveReqVO reqVO = new ImGroupMemberRemoveReqVO(); reqVO.setGroupId(10L); - reqVO.setMemberUserIds(List.of(2L, 3L)); + reqVO.setMemberUserIds(listOf(2L, 3L)); groupService.removeGroupMember(1L, reqVO); @@ -665,14 +666,14 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest { ImGroupMemberDO.builder().groupId(10L).userId(1L) .role(ImGroupMemberRoleEnum.ADMIN.getRole()).build()); // 目标:另一个管理员 - when(groupMemberService.getGroupMembers(eq(10L), anyCollection())).thenReturn(List.of( + when(groupMemberService.getGroupMembers(eq(10L), anyCollection())).thenReturn(listOf( ImGroupMemberDO.builder().groupId(10L).userId(2L) .role(ImGroupMemberRoleEnum.ADMIN.getRole()) .status(CommonStatusEnum.ENABLE.getStatus()).build())); ImGroupMemberRemoveReqVO reqVO = new ImGroupMemberRemoveReqVO(); reqVO.setGroupId(10L); - reqVO.setMemberUserIds(List.of(2L)); + reqVO.setMemberUserIds(listOf(2L)); ServiceException exception = assertThrows(ServiceException.class, () -> groupService.removeGroupMember(1L, reqVO)); @@ -694,14 +695,14 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest { when(groupMemberService.validateMemberInGroup(10L, 1L)).thenReturn( ImGroupMemberDO.builder().groupId(10L).userId(1L) .role(ImGroupMemberRoleEnum.OWNER.getRole()).build()); - when(groupMemberService.getGroupMembers(eq(10L), anyCollection())).thenReturn(List.of( + when(groupMemberService.getGroupMembers(eq(10L), anyCollection())).thenReturn(listOf( ImGroupMemberDO.builder().groupId(10L).userId(99L) .role(ImGroupMemberRoleEnum.OWNER.getRole()) .status(CommonStatusEnum.ENABLE.getStatus()).build())); ImGroupMemberRemoveReqVO reqVO = new ImGroupMemberRemoveReqVO(); reqVO.setGroupId(10L); - reqVO.setMemberUserIds(List.of(99L)); + reqVO.setMemberUserIds(listOf(99L)); ServiceException exception = assertThrows(ServiceException.class, () -> groupService.removeGroupMember(1L, reqVO)); @@ -723,7 +724,7 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest { ImGroupMemberDO.builder().groupId(10L).userId(1L) .role(ImGroupMemberRoleEnum.OWNER.getRole()).build()); // 目标:2L 有效普通成员;3L 已退群(DISABLE)的历史管理员,应被跳过而非拦截整批 - when(groupMemberService.getGroupMembers(eq(10L), anyCollection())).thenReturn(List.of( + when(groupMemberService.getGroupMembers(eq(10L), anyCollection())).thenReturn(listOf( ImGroupMemberDO.builder().groupId(10L).userId(2L) .role(ImGroupMemberRoleEnum.NORMAL.getRole()) .status(CommonStatusEnum.ENABLE.getStatus()).build(), @@ -733,17 +734,17 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest { ImGroupMemberRemoveReqVO reqVO = new ImGroupMemberRemoveReqVO(); reqVO.setGroupId(10L); - reqVO.setMemberUserIds(List.of(2L, 3L)); + reqVO.setMemberUserIds(listOf(2L, 3L)); groupService.removeGroupMember(1L, reqVO); // 仅有效成员 2L 进入移除 / 已读清理,已退群的 3L 被跳过 ArgumentCaptor removeCaptor = ArgumentCaptor.forClass(Collection.class); verify(groupMemberService).removeGroupMembers(eq(10L), removeCaptor.capture()); - assertEquals(Set.of(2L), Set.copyOf(removeCaptor.getValue())); + assertEquals(setOf(2L), setCopyOf(removeCaptor.getValue())); ArgumentCaptor readCaptor = ArgumentCaptor.forClass(Collection.class); verify(groupMessageService).deleteReadMaxMessageIds(eq(10L), readCaptor.capture()); - assertEquals(Set.of(2L), Set.copyOf(readCaptor.getValue())); + assertEquals(setOf(2L), setCopyOf(readCaptor.getValue())); } } @@ -759,7 +760,7 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest { .status(CommonStatusEnum.ENABLE.getStatus()).build(); when(groupMapper.selectByIdForUpdate(10L)).thenReturn(group); // 目标 3 是普通成员 - when(groupMemberService.getGroupMembers(eq(10L), anyCollection())).thenReturn(List.of( + when(groupMemberService.getGroupMembers(eq(10L), anyCollection())).thenReturn(listOf( ImGroupMemberDO.builder().userId(3L).status(CommonStatusEnum.ENABLE.getStatus()) .role(ImGroupMemberRoleEnum.NORMAL.getRole()).build())); // 群里已有 1 个 ADMIN,1 + 1 ≤ 3 不超上限 @@ -770,7 +771,7 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest { ImGroupAdminAddReqVO reqVO = new ImGroupAdminAddReqVO(); reqVO.setId(10L); - reqVO.setUserIds(List.of(3L)); + reqVO.setUserIds(listOf(3L)); groupService.addGroupAdmin(1L, reqVO); @@ -789,7 +790,7 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest { ImGroupDO group = ImGroupDO.builder().id(10L).ownerUserId(1L) .status(CommonStatusEnum.ENABLE.getStatus()).build(); when(groupMapper.selectByIdForUpdate(10L)).thenReturn(group); - when(groupMemberService.getGroupMembers(eq(10L), anyCollection())).thenReturn(List.of( + when(groupMemberService.getGroupMembers(eq(10L), anyCollection())).thenReturn(listOf( ImGroupMemberDO.builder().userId(5L).status(CommonStatusEnum.ENABLE.getStatus()) .role(ImGroupMemberRoleEnum.NORMAL.getRole()).build())); // 群里已有 3 个 ADMIN(达到上限),再加 1 会超 @@ -798,7 +799,7 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest { ImGroupAdminAddReqVO reqVO = new ImGroupAdminAddReqVO(); reqVO.setId(10L); - reqVO.setUserIds(List.of(5L)); + reqVO.setUserIds(listOf(5L)); ServiceException exception = assertThrows(ServiceException.class, () -> groupService.addGroupAdmin(1L, reqVO)); @@ -816,13 +817,13 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest { ImGroupDO group = ImGroupDO.builder().id(10L).ownerUserId(1L) .status(CommonStatusEnum.ENABLE.getStatus()).build(); when(groupMapper.selectByIdForUpdate(10L)).thenReturn(group); - when(groupMemberService.getGroupMembers(eq(10L), anyCollection())).thenReturn(List.of( + when(groupMemberService.getGroupMembers(eq(10L), anyCollection())).thenReturn(listOf( ImGroupMemberDO.builder().userId(1L).status(CommonStatusEnum.ENABLE.getStatus()) .role(ImGroupMemberRoleEnum.OWNER.getRole()).build())); ImGroupAdminAddReqVO reqVO = new ImGroupAdminAddReqVO(); reqVO.setId(10L); - reqVO.setUserIds(List.of(1L)); + reqVO.setUserIds(listOf(1L)); ServiceException exception = assertThrows(ServiceException.class, () -> groupService.addGroupAdmin(1L, reqVO)); @@ -840,13 +841,13 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest { .status(CommonStatusEnum.ENABLE.getStatus()).build(); when(groupMapper.selectByIdForUpdate(10L)).thenReturn(group); // 目标已是 ADMIN:再加无需操作 - when(groupMemberService.getGroupMembers(eq(10L), anyCollection())).thenReturn(List.of( + when(groupMemberService.getGroupMembers(eq(10L), anyCollection())).thenReturn(listOf( ImGroupMemberDO.builder().userId(2L).status(CommonStatusEnum.ENABLE.getStatus()) .role(ImGroupMemberRoleEnum.ADMIN.getRole()).build())); ImGroupAdminAddReqVO reqVO = new ImGroupAdminAddReqVO(); reqVO.setId(10L); - reqVO.setUserIds(List.of(2L)); + reqVO.setUserIds(listOf(2L)); groupService.addGroupAdmin(1L, reqVO); @@ -866,7 +867,7 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest { ImGroupDO group = ImGroupDO.builder().id(10L).ownerUserId(1L) .status(CommonStatusEnum.ENABLE.getStatus()).build(); when(groupMapper.selectByIdForUpdate(10L)).thenReturn(group); - when(groupMemberService.getGroupMembers(eq(10L), anyCollection())).thenReturn(List.of( + when(groupMemberService.getGroupMembers(eq(10L), anyCollection())).thenReturn(listOf( ImGroupMemberDO.builder().userId(2L).status(CommonStatusEnum.ENABLE.getStatus()) .role(ImGroupMemberRoleEnum.ADMIN.getRole()).build())); when(groupMemberService.updateGroupMemberRole(eq(10L), anyCollection(), @@ -874,7 +875,7 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest { ImGroupAdminRemoveReqVO reqVO = new ImGroupAdminRemoveReqVO(); reqVO.setId(10L); - reqVO.setUserIds(List.of(2L)); + reqVO.setUserIds(listOf(2L)); groupService.removeGroupAdmin(1L, reqVO); @@ -894,13 +895,13 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest { .status(CommonStatusEnum.ENABLE.getStatus()).build(); when(groupMapper.selectByIdForUpdate(10L)).thenReturn(group); // 目标已是 MEMBER:撤销无需操作 - when(groupMemberService.getGroupMembers(eq(10L), anyCollection())).thenReturn(List.of( + when(groupMemberService.getGroupMembers(eq(10L), anyCollection())).thenReturn(listOf( ImGroupMemberDO.builder().userId(2L).status(CommonStatusEnum.ENABLE.getStatus()) .role(ImGroupMemberRoleEnum.NORMAL.getRole()).build())); ImGroupAdminRemoveReqVO reqVO = new ImGroupAdminRemoveReqVO(); reqVO.setId(10L); - reqVO.setUserIds(List.of(2L)); + reqVO.setUserIds(listOf(2L)); groupService.removeGroupAdmin(1L, reqVO); @@ -922,9 +923,9 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest { when(groupMemberService.validateMemberInGroup(10L, 2L)).thenReturn( ImGroupMemberDO.builder().groupId(10L).userId(2L) .role(ImGroupMemberRoleEnum.NORMAL.getRole()).build()); - when(groupMemberService.updateGroupMemberRole(eq(10L), eq(Set.of(2L)), + when(groupMemberService.updateGroupMemberRole(eq(10L), eq(setOf(2L)), eq(ImGroupMemberRoleEnum.OWNER.getRole()))).thenReturn(1); - when(groupMemberService.updateGroupMemberRole(eq(10L), eq(Set.of(1L)), + when(groupMemberService.updateGroupMemberRole(eq(10L), eq(setOf(1L)), eq(ImGroupMemberRoleEnum.NORMAL.getRole()))).thenReturn(1); ImGroupTransferOwnerReqVO reqVO = new ImGroupTransferOwnerReqVO(); @@ -938,9 +939,9 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest { verify(groupMapper).updateById(groupCaptor.capture()); assertEquals(2L, groupCaptor.getValue().getOwnerUserId()); // 旧群主 → MEMBER;新群主 → OWNER - verify(groupMemberService).updateGroupMemberRole(eq(10L), eq(Set.of(1L)), + verify(groupMemberService).updateGroupMemberRole(eq(10L), eq(setOf(1L)), eq(ImGroupMemberRoleEnum.NORMAL.getRole())); - verify(groupMemberService).updateGroupMemberRole(eq(10L), eq(Set.of(2L)), + verify(groupMemberService).updateGroupMemberRole(eq(10L), eq(setOf(2L)), eq(ImGroupMemberRoleEnum.OWNER.getRole())); } } @@ -1120,7 +1121,7 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest { @Test public void testGetMyGroupList_success() { // 活跃群成员 - when(groupMemberService.getActiveGroupMemberListByUserId(1L)).thenReturn(new ArrayList<>(List.of( + when(groupMemberService.getActiveGroupMemberListByUserId(1L)).thenReturn(new ArrayList<>(listOf( ImGroupMemberDO.builder().groupId(10L).userId(1L) .status(CommonStatusEnum.ENABLE.getStatus()).build(), ImGroupMemberDO.builder().groupId(20L).userId(1L) @@ -1128,11 +1129,11 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest { ))); // 最近退群成员(最近 30 天内) when(groupMemberService.getQuitGroupMemberListByUserId(eq(1L), any(LocalDateTime.class))) - .thenReturn(new ArrayList<>(List.of( + .thenReturn(new ArrayList<>(listOf( ImGroupMemberDO.builder().groupId(30L).userId(1L) .status(CommonStatusEnum.DISABLE.getStatus()).build() ))); - List groups = List.of( + List groups = listOf( ImGroupDO.builder().id(10L).status(CommonStatusEnum.ENABLE.getStatus()).build(), ImGroupDO.builder().id(20L).status(CommonStatusEnum.ENABLE.getStatus()).build(), ImGroupDO.builder().id(30L).status(CommonStatusEnum.ENABLE.getStatus()).build() diff --git a/yudao-module-im/src/test/java/cn/iocoder/yudao/module/im/service/message/ImGroupMessageServiceImplTest.java b/yudao-module-im/src/test/java/cn/iocoder/yudao/module/im/service/message/ImGroupMessageServiceImplTest.java index 5582fab..360bff4 100644 --- a/yudao-module-im/src/test/java/cn/iocoder/yudao/module/im/service/message/ImGroupMessageServiceImplTest.java +++ b/yudao-module-im/src/test/java/cn/iocoder/yudao/module/im/service/message/ImGroupMessageServiceImplTest.java @@ -34,6 +34,7 @@ import java.time.LocalDateTime; import java.util.*; import static cn.iocoder.yudao.module.im.enums.ErrorCodeConstants.*; +import static cn.iocoder.yudao.module.im.util.ImTestCollectionUtils.*; import static org.junit.jupiter.api.Assertions.*; import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; @@ -96,7 +97,7 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest { when(groupMemberService.validateMemberInGroup(10L, 1L)).thenReturn(member); when(groupMemberService.getActiveGroupMemberUserIdsByGroupId(10L)) - .thenReturn(List.of(1L, 2L, 3L)); + .thenReturn(listOf(1L, 2L, 3L)); when(groupMessageMapper.insert(any(ImGroupMessageDO.class))).thenAnswer(invocation -> { ImGroupMessageDO msg = invocation.getArgument(0); msg.setId(99L); @@ -168,7 +169,7 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest { .groupId(10L).userId(1L) .status(CommonStatusEnum.ENABLE.getStatus()) .joinTime(joinTime).build(); - when(groupMemberService.getActiveGroupMemberListByUserId(1L)).thenReturn(List.of(member)); + when(groupMemberService.getActiveGroupMemberListByUserId(1L)).thenReturn(listOf(member)); // 入群前 1 条 + 入群后 1 条 ImGroupMessageDO beforeJoin = ImGroupMessageDO.builder() @@ -177,11 +178,11 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest { ImGroupMessageDO afterJoin = ImGroupMessageDO.builder() .id(2L).groupId(10L).senderId(2L) .sendTime(now.minusHours(1)).build(); - when(groupMessageMapper.selectListByMinId(eq(List.of(10L)), eq(0L), + when(groupMessageMapper.selectListByMinId(eq(listOf(10L)), eq(0L), any(LocalDateTime.class), eq(100))) - .thenReturn(List.of(beforeJoin, afterJoin)); + .thenReturn(listOf(beforeJoin, afterJoin)); when(groupMemberService.getQuitGroupMemberListByUserId(eq(1L), any(LocalDateTime.class))) - .thenReturn(List.of()); + .thenReturn(listOf()); // 调用 List result = groupMessageService.pullGroupMessageList(1L, 0L, 100); @@ -200,26 +201,26 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest { .groupId(10L).userId(1L) .status(CommonStatusEnum.ENABLE.getStatus()) .joinTime(joinTime).build(); - when(groupMemberService.getActiveGroupMemberListByUserId(1L)).thenReturn(List.of(member)); + when(groupMemberService.getActiveGroupMemberListByUserId(1L)).thenReturn(listOf(member)); ImGroupMessageDO beforeJoin = ImGroupMessageDO.builder() .id(1L).groupId(10L).senderId(2L) .sendTime(now.minusHours(3)).build(); ImGroupMessageDO directedMsg = ImGroupMessageDO.builder() .id(2L).groupId(10L).senderId(2L) - .receiverUserIds(List.of(2L, 3L)) + .receiverUserIds(listOf(2L, 3L)) .sendTime(now.minusHours(2)).build(); ImGroupMessageDO visibleMsg = ImGroupMessageDO.builder() .id(3L).groupId(10L).senderId(2L) .sendTime(now.minusMinutes(30)).build(); - when(groupMessageMapper.selectListByMinId(eq(List.of(10L)), eq(0L), + when(groupMessageMapper.selectListByMinId(eq(listOf(10L)), eq(0L), any(LocalDateTime.class), eq(2))) - .thenReturn(List.of(beforeJoin, directedMsg)); - when(groupMessageMapper.selectListByMinId(eq(List.of(10L)), eq(2L), + .thenReturn(listOf(beforeJoin, directedMsg)); + when(groupMessageMapper.selectListByMinId(eq(listOf(10L)), eq(2L), any(LocalDateTime.class), eq(2))) - .thenReturn(List.of(visibleMsg)); + .thenReturn(listOf(visibleMsg)); when(groupMemberService.getQuitGroupMemberListByUserId(eq(1L), any(LocalDateTime.class))) - .thenReturn(List.of()); + .thenReturn(listOf()); // 调用 List result = groupMessageService.pullGroupMessageList(1L, 0L, 2); @@ -227,9 +228,9 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest { // 断言:仅返回第二批的可见消息;两批 selectListByMinId 各被调用一次 assertEquals(1, result.size()); assertEquals(3L, result.get(0).getId()); - verify(groupMessageMapper).selectListByMinId(eq(List.of(10L)), eq(0L), + verify(groupMessageMapper).selectListByMinId(eq(listOf(10L)), eq(0L), any(LocalDateTime.class), eq(2)); - verify(groupMessageMapper).selectListByMinId(eq(List.of(10L)), eq(2L), + verify(groupMessageMapper).selectListByMinId(eq(listOf(10L)), eq(2L), any(LocalDateTime.class), eq(2)); } @@ -241,14 +242,14 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest { .groupId(10L).userId(1L) .status(CommonStatusEnum.ENABLE.getStatus()) .joinTime(now.minusDays(10)).build(); - when(groupMemberService.getActiveGroupMemberListByUserId(1L)).thenReturn(List.of(activeMember)); + when(groupMemberService.getActiveGroupMemberListByUserId(1L)).thenReturn(listOf(activeMember)); ImGroupMessageDO activeMsg = ImGroupMessageDO.builder() .id(5L).groupId(10L).senderId(2L) .sendTime(now.minusHours(2)).build(); - when(groupMessageMapper.selectListByMinId(eq(List.of(10L)), eq(0L), + when(groupMessageMapper.selectListByMinId(eq(listOf(10L)), eq(0L), any(LocalDateTime.class), eq(100))) - .thenReturn(List.of(activeMsg)); + .thenReturn(listOf(activeMsg)); // 已退群:退群时间在窗口内(minId=0,minQuitTime 直接用 minSendTime) LocalDateTime quitTime = now.minusDays(3); @@ -258,14 +259,14 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest { .joinTime(now.minusDays(20)) .quitTime(quitTime).build(); when(groupMemberService.getQuitGroupMemberListByUserId(eq(1L), any(LocalDateTime.class))) - .thenReturn(List.of(quitMember)); + .thenReturn(listOf(quitMember)); ImGroupMessageDO quitGroupMsg = ImGroupMessageDO.builder() .id(3L).groupId(20L).senderId(99L) .sendTime(now.minusDays(5)).build(); when(groupMessageMapper.selectListByGroupIdAndMinIdAndQuitTimeBefore(eq(20L), eq(0L), any(LocalDateTime.class), eq(quitTime), eq(100))) - .thenReturn(List.of(quitGroupMsg)); + .thenReturn(listOf(quitGroupMsg)); // 调用 List result = groupMessageService.pullGroupMessageList(1L, 0L, 100); @@ -280,14 +281,14 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest { public void testPullMessages_quitMemberFilteredByBoundarySendTime() { // 准备:minId > 0,边界消息 sendTime 晚于窗口起点,应当被用作 minQuitTime LocalDateTime now = LocalDateTime.now(); - when(groupMemberService.getActiveGroupMemberListByUserId(1L)).thenReturn(List.of()); + when(groupMemberService.getActiveGroupMemberListByUserId(1L)).thenReturn(listOf()); LocalDateTime boundarySendTime = now.minusDays(2); ImGroupMessageDO boundary = ImGroupMessageDO.builder() .id(8L).groupId(10L).senderId(2L).sendTime(boundarySendTime).build(); when(groupMessageMapper.selectById(8L)).thenReturn(boundary); when(groupMemberService.getQuitGroupMemberListByUserId(1L, boundarySendTime)) - .thenReturn(List.of()); + .thenReturn(listOf()); // 调用 List result = groupMessageService.pullGroupMessageList(1L, 8L, 100); @@ -306,24 +307,24 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest { .groupId(10L).userId(1L) .status(CommonStatusEnum.ENABLE.getStatus()) .joinTime(joinTime).build(); - when(groupMemberService.getActiveGroupMemberListByUserId(1L)).thenReturn(List.of(activeMember)); + when(groupMemberService.getActiveGroupMemberListByUserId(1L)).thenReturn(listOf(activeMember)); ImGroupMessageDO beforeJoin = ImGroupMessageDO.builder() .id(100L).groupId(10L).senderId(2L) .sendTime(now.minusHours(3)).build(); ImGroupMessageDO directedMsg = ImGroupMessageDO.builder() .id(101L).groupId(10L).senderId(2L) - .receiverUserIds(List.of(2L, 3L)) + .receiverUserIds(listOf(2L, 3L)) .sendTime(now.minusMinutes(50)).build(); ImGroupMessageDO visibleActiveMsg = ImGroupMessageDO.builder() .id(102L).groupId(10L).senderId(2L) .sendTime(now.minusMinutes(30)).build(); - when(groupMessageMapper.selectListByMinId(eq(List.of(10L)), eq(8L), + when(groupMessageMapper.selectListByMinId(eq(listOf(10L)), eq(8L), any(LocalDateTime.class), eq(2))) - .thenReturn(List.of(beforeJoin, directedMsg)); - when(groupMessageMapper.selectListByMinId(eq(List.of(10L)), eq(101L), + .thenReturn(listOf(beforeJoin, directedMsg)); + when(groupMessageMapper.selectListByMinId(eq(listOf(10L)), eq(101L), any(LocalDateTime.class), eq(2))) - .thenReturn(List.of(visibleActiveMsg)); + .thenReturn(listOf(visibleActiveMsg)); LocalDateTime boundarySendTime = now.minusDays(2); ImGroupMessageDO boundary = ImGroupMessageDO.builder() @@ -337,14 +338,14 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest { .joinTime(now.minusDays(10)) .quitTime(quitTime).build(); when(groupMemberService.getQuitGroupMemberListByUserId(1L, boundarySendTime)) - .thenReturn(List.of(quitMember)); + .thenReturn(listOf(quitMember)); ImGroupMessageDO quitGroupMsg = ImGroupMessageDO.builder() .id(50L).groupId(20L).senderId(99L) .sendTime(now.minusDays(1)).build(); when(groupMessageMapper.selectListByGroupIdAndMinIdAndQuitTimeBefore(eq(20L), eq(8L), any(LocalDateTime.class), eq(quitTime), eq(2))) - .thenReturn(List.of(quitGroupMsg)); + .thenReturn(listOf(quitGroupMsg)); // 调用 List result = groupMessageService.pullGroupMessageList(1L, 8L, 2); @@ -353,9 +354,9 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest { assertEquals(2, result.size()); assertEquals(50L, result.get(0).getId()); assertEquals(102L, result.get(1).getId()); - verify(groupMessageMapper).selectListByMinId(eq(List.of(10L)), eq(8L), + verify(groupMessageMapper).selectListByMinId(eq(listOf(10L)), eq(8L), any(LocalDateTime.class), eq(2)); - verify(groupMessageMapper).selectListByMinId(eq(List.of(10L)), eq(101L), + verify(groupMessageMapper).selectListByMinId(eq(listOf(10L)), eq(101L), any(LocalDateTime.class), eq(2)); verify(groupMemberService).getQuitGroupMemberListByUserId(1L, boundarySendTime); verify(groupMessageMapper).selectListByGroupIdAndMinIdAndQuitTimeBefore(eq(20L), eq(8L), @@ -372,22 +373,22 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest { .groupId(10L).userId(1L) .status(CommonStatusEnum.ENABLE.getStatus()) .joinTime(now.minusDays(10)).build(); - when(groupMemberService.getActiveGroupMemberListByUserId(1L)).thenReturn(List.of(member)); + when(groupMemberService.getActiveGroupMemberListByUserId(1L)).thenReturn(listOf(member)); // 定向接收消息:只给用户 2 和 3 ImGroupMessageDO directedMsg = ImGroupMessageDO.builder() .id(1L).groupId(10L).senderId(5L) - .receiverUserIds(List.of(2L, 3L)) + .receiverUserIds(listOf(2L, 3L)) .sendTime(now.minusHours(2)).build(); // 全员消息 ImGroupMessageDO allMsg = ImGroupMessageDO.builder() .id(2L).groupId(10L).senderId(5L) .sendTime(now.minusHours(1)).build(); - when(groupMessageMapper.selectListByMinId(eq(List.of(10L)), eq(0L), + when(groupMessageMapper.selectListByMinId(eq(listOf(10L)), eq(0L), any(LocalDateTime.class), eq(100))) - .thenReturn(List.of(directedMsg, allMsg)); + .thenReturn(listOf(directedMsg, allMsg)); when(groupMemberService.getQuitGroupMemberListByUserId(eq(1L), any(LocalDateTime.class))) - .thenReturn(List.of()); + .thenReturn(listOf()); // 调用 List result = groupMessageService.pullGroupMessageList(1L, 0L, 100); @@ -405,24 +406,24 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest { .groupId(10L).userId(1L) .status(CommonStatusEnum.ENABLE.getStatus()) .joinTime(now.minusDays(10)).build(); - when(groupMemberService.getActiveGroupMemberListByUserId(1L)).thenReturn(List.of(member)); + when(groupMemberService.getActiveGroupMemberListByUserId(1L)).thenReturn(listOf(member)); ImGroupMessageDO atMsg = ImGroupMessageDO.builder() .id(1L).groupId(10L).senderId(2L) - .atUserIds(List.of(1L, 3L)) + .atUserIds(listOf(1L, 3L)) .sendTime(now.minusHours(1)).build(); - when(groupMessageMapper.selectListByMinId(eq(List.of(10L)), eq(0L), + when(groupMessageMapper.selectListByMinId(eq(listOf(10L)), eq(0L), any(LocalDateTime.class), eq(100))) - .thenReturn(List.of(atMsg)); + .thenReturn(listOf(atMsg)); when(groupMemberService.getQuitGroupMemberListByUserId(eq(1L), any(LocalDateTime.class))) - .thenReturn(List.of()); + .thenReturn(listOf()); // 调用 List result = groupMessageService.pullGroupMessageList(1L, 0L, 100); // 断言:@ 字段正确返回 assertEquals(1, result.size()); - assertEquals(List.of(1L, 3L), result.get(0).getAtUserIds()); + assertEquals(listOf(1L, 3L), result.get(0).getAtUserIds()); } @Test @@ -432,15 +433,15 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest { .groupId(10L).userId(1L) .status(CommonStatusEnum.ENABLE.getStatus()) .joinTime(now.minusDays(10)).build(); - when(groupMemberService.getActiveGroupMemberListByUserId(1L)).thenReturn(List.of(activeMember)); + when(groupMemberService.getActiveGroupMemberListByUserId(1L)).thenReturn(listOf(activeMember)); ImGroupMessageDO activeMsg1 = ImGroupMessageDO.builder() .id(1000L).groupId(10L).senderId(2L).sendTime(now.minusHours(2)).build(); ImGroupMessageDO activeMsg2 = ImGroupMessageDO.builder() .id(2000L).groupId(10L).senderId(2L).sendTime(now.minusHours(1)).build(); - when(groupMessageMapper.selectListByMinId(eq(List.of(10L)), eq(0L), + when(groupMessageMapper.selectListByMinId(eq(listOf(10L)), eq(0L), any(LocalDateTime.class), eq(2))) - .thenReturn(List.of(activeMsg1, activeMsg2)); + .thenReturn(listOf(activeMsg1, activeMsg2)); LocalDateTime quitTime = now.minusDays(1); ImGroupMemberDO quitMember = ImGroupMemberDO.builder() @@ -449,7 +450,7 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest { .joinTime(now.minusDays(20)) .quitTime(quitTime).build(); when(groupMemberService.getQuitGroupMemberListByUserId(eq(1L), any(LocalDateTime.class))) - .thenReturn(List.of(quitMember)); + .thenReturn(listOf(quitMember)); ImGroupMessageDO quit1 = ImGroupMessageDO.builder() .id(150L).groupId(20L).senderId(99L).sendTime(now.minusDays(5)).build(); @@ -457,7 +458,7 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest { .id(160L).groupId(20L).senderId(99L).sendTime(now.minusDays(4)).build(); when(groupMessageMapper.selectListByGroupIdAndMinIdAndQuitTimeBefore(eq(20L), eq(0L), any(LocalDateTime.class), eq(quitTime), eq(2))) - .thenReturn(List.of(quit1, quit2)); + .thenReturn(listOf(quit1, quit2)); when(groupMessageReadRedisDAO.getReadMaxMessageId(anyLong(), eq(1L))).thenReturn(null); @@ -475,7 +476,7 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest { .groupId(10L).userId(1L) .status(CommonStatusEnum.ENABLE.getStatus()) .joinTime(now.minusDays(10)).build(); - when(groupMemberService.getActiveGroupMemberListByUserId(1L)).thenReturn(List.of(member)); + when(groupMemberService.getActiveGroupMemberListByUserId(1L)).thenReturn(listOf(member)); ImGroupMessageDO low = ImGroupMessageDO.builder() .id(5L).groupId(10L).senderId(2L).status(ImMessageStatusEnum.UNREAD.getStatus()) @@ -483,11 +484,11 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest { ImGroupMessageDO high = ImGroupMessageDO.builder() .id(10L).groupId(10L).senderId(2L).status(ImMessageStatusEnum.UNREAD.getStatus()) .sendTime(now.minusHours(1)).build(); - when(groupMessageMapper.selectListByMinId(eq(List.of(10L)), eq(0L), + when(groupMessageMapper.selectListByMinId(eq(listOf(10L)), eq(0L), any(LocalDateTime.class), eq(100))) - .thenReturn(List.of(low, high)); + .thenReturn(listOf(low, high)); when(groupMemberService.getQuitGroupMemberListByUserId(eq(1L), any(LocalDateTime.class))) - .thenReturn(List.of()); + .thenReturn(listOf()); when(groupMessageReadRedisDAO.getReadMaxMessageId(10L, 1L)).thenReturn(7L); @@ -505,18 +506,18 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest { .groupId(10L).userId(1L) .status(CommonStatusEnum.ENABLE.getStatus()) .joinTime(now.minusDays(10)).build(); - when(groupMemberService.getActiveGroupMemberListByUserId(1L)).thenReturn(List.of(member)); + when(groupMemberService.getActiveGroupMemberListByUserId(1L)).thenReturn(listOf(member)); ImGroupMessageDO receiptMsg = ImGroupMessageDO.builder() .id(100L).groupId(10L).senderId(1L) .status(ImMessageStatusEnum.UNREAD.getStatus()) .receiptStatus(ImGroupMessageReceiptStatusEnum.PENDING.getStatus()) .sendTime(now.minusHours(1)).build(); - when(groupMessageMapper.selectListByMinId(eq(List.of(10L)), eq(0L), + when(groupMessageMapper.selectListByMinId(eq(listOf(10L)), eq(0L), any(LocalDateTime.class), eq(100))) - .thenReturn(List.of(receiptMsg)); + .thenReturn(listOf(receiptMsg)); when(groupMemberService.getQuitGroupMemberListByUserId(eq(1L), any(LocalDateTime.class))) - .thenReturn(List.of()); + .thenReturn(listOf()); when(groupMessageReadRedisDAO.getReadMaxMessageId(10L, 1L)).thenReturn(100L); Map positions = new HashMap<>(); @@ -525,7 +526,7 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest { positions.put(3L, 50L); when(groupMessageReadRedisDAO.getReadMaxMessageIdMap(10L)).thenReturn(positions); - List allMembers = List.of( + List allMembers = listOf( member, ImGroupMemberDO.builder().groupId(10L).userId(2L) .status(CommonStatusEnum.ENABLE.getStatus()) @@ -564,7 +565,7 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest { when(groupMessageMapper.insert(any(ImGroupMessageDO.class))).thenReturn(1); when(groupMemberService.getActiveGroupMemberUserIdsByGroupId(10L)) - .thenReturn(List.of(1L, 2L)); + .thenReturn(listOf(1L, 2L)); // 调用 ImGroupMessageDO result = groupMessageService.recallGroupMessage(1L, 50L); @@ -669,7 +670,7 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest { // 用户 2: 正常,入群在消息之前 // 用户 3: 正常,但入群在消息之后 → 不可见 // 用户 5: 发送者,不计入回执 - List allMembers = List.of( + List allMembers = listOf( currentMember, ImGroupMemberDO.builder().groupId(10L).userId(1L) .status(CommonStatusEnum.ENABLE.getStatus()) @@ -739,7 +740,7 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest { ImGroupMemberDO member = ImGroupMemberDO.builder() .groupId(10L).userId(1L).status(CommonStatusEnum.ENABLE.getStatus()).build(); when(groupMemberService.validateMemberInGroup(10L, 1L)).thenReturn(member); - when(groupMemberService.getActiveGroupMemberUserIdsByGroupId(10L)).thenReturn(List.of(1L)); + when(groupMemberService.getActiveGroupMemberUserIdsByGroupId(10L)).thenReturn(listOf(1L)); when(groupMessageMapper.insert(any(ImGroupMessageDO.class))).thenReturn(1); // 调用 @@ -821,7 +822,7 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest { .id(100L).groupId(10L).senderId(2L).sendTime(LocalDateTime.now()).build()); when(groupMessageReadRedisDAO.getReadMaxMessageId(10L, 1L)).thenReturn(5L); // readGroupMessageEvent 内部会调 selectListByGroupIdAndPendingReceipt → 返回空简化流程 - when(groupMessageMapper.selectListByGroupIdAndPendingReceipt(10L, 5L, 100L)).thenReturn(List.of()); + when(groupMessageMapper.selectListByGroupIdAndPendingReceipt(10L, 5L, 100L)).thenReturn(listOf()); // 调用 groupMessageService.readGroupMessages(1L, 10L, 100L); @@ -875,7 +876,7 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest { ImGroupMemberDO member = ImGroupMemberDO.builder() .groupId(10L).userId(1L).status(CommonStatusEnum.ENABLE.getStatus()).build(); when(groupMemberService.validateMemberInGroup(10L, 1L)).thenReturn(member); - when(groupMemberService.getActiveGroupMemberUserIdsByGroupId(10L)).thenReturn(List.of(1L, 2L)); + when(groupMemberService.getActiveGroupMemberUserIdsByGroupId(10L)).thenReturn(listOf(1L, 2L)); ImGroupMessageDO result = groupMessageService.sendGroupMessage(1L, reqVO); @@ -932,8 +933,8 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest { .receiptStatus(ImGroupMessageReceiptStatusEnum.PENDING.getStatus()) .status(ImMessageStatusEnum.UNREAD.getStatus()).build(); when(groupMessageMapper.selectListByGroupIdAndPendingReceipt(10L, 0L, 100L)) - .thenReturn(List.of(pending)); - List activeMembers = List.of( + .thenReturn(listOf(pending)); + List activeMembers = listOf( ImGroupMemberDO.builder().groupId(10L).userId(5L) .status(CommonStatusEnum.ENABLE.getStatus()) .joinTime(LocalDateTime.now().minusDays(10)).build(), @@ -971,8 +972,8 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest { .receiptStatus(ImGroupMessageReceiptStatusEnum.PENDING.getStatus()) .status(ImMessageStatusEnum.UNREAD.getStatus()).build(); when(groupMessageMapper.selectListByGroupIdAndPendingReceipt(10L, 0L, 100L)) - .thenReturn(List.of(pending)); - List activeMembers = List.of( + .thenReturn(listOf(pending)); + List activeMembers = listOf( ImGroupMemberDO.builder().groupId(10L).userId(5L) .status(CommonStatusEnum.ENABLE.getStatus()) .joinTime(LocalDateTime.now().minusDays(10)).build(), @@ -1006,7 +1007,7 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest { .setGroupId(10L).setType(ImMessageTypeEnum.RECALL.getType()) .setContent("{\"messageId\":1}"); when(groupMemberService.getActiveGroupMemberUserIdsByGroupId(10L)) - .thenReturn(List.of(1L, 2L, 3L, 4L)); + .thenReturn(listOf(1L, 2L, 3L, 4L)); groupMessageService.sendGroupMessage(1L, dto); @@ -1023,9 +1024,9 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest { ImGroupMessageSendDTO dto = new ImGroupMessageSendDTO() .setGroupId(10L).setType(ImMessageTypeEnum.RECALL.getType()) .setContent("{\"messageId\":1}") - .setReceiverUserIds(List.of(2L, 3L)); + .setReceiverUserIds(listOf(2L, 3L)); when(groupMemberService.getActiveGroupMemberUserIdsByGroupId(10L)) - .thenReturn(List.of(1L, 2L, 3L, 4L)); + .thenReturn(listOf(1L, 2L, 3L, 4L)); groupMessageService.sendGroupMessage(1L, dto); @@ -1042,9 +1043,9 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest { ImGroupMessageSendDTO dto = new ImGroupMessageSendDTO() .setGroupId(10L).setType(ImMessageTypeEnum.RECALL.getType()) .setContent("{\"messageId\":1}") - .setReceiverUserIds(List.of(2L, 3L)); + .setReceiverUserIds(listOf(2L, 3L)); when(groupMemberService.getActiveGroupMemberUserIdsByGroupId(10L)) - .thenReturn(List.of(1L, 2L, 3L, 4L)); + .thenReturn(listOf(1L, 2L, 3L, 4L)); groupMessageService.sendGroupMessage(99L, dto); @@ -1061,7 +1062,7 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest { ImGroupMessageSendDTO dto = new ImGroupMessageSendDTO() .setGroupId(10L).setType(ImMessageTypeEnum.RECALL.getType()) .setContent(new RecallMessage().setMessageId(50L)); - when(groupMemberService.getActiveGroupMemberUserIdsByGroupId(10L)).thenReturn(List.of(1L)); + when(groupMemberService.getActiveGroupMemberUserIdsByGroupId(10L)).thenReturn(listOf(1L)); groupMessageService.sendGroupMessage(1L, dto); @@ -1085,7 +1086,7 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest { ImGroupMessageSendDTO dto = new ImGroupMessageSendDTO() .setGroupId(10L).setType(ImMessageTypeEnum.RECALL.getType()) .setContent("{\"messageId\":50}").setReceipt(true); - when(groupMemberService.getActiveGroupMemberUserIdsByGroupId(10L)).thenReturn(List.of(1L)); + when(groupMemberService.getActiveGroupMemberUserIdsByGroupId(10L)).thenReturn(listOf(1L)); groupMessageService.sendGroupMessage(1L, dto); @@ -1099,7 +1100,7 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest { // 准备:persistent=false 类型(RECEIPT 回执)→ 不入库,仅推送 ImGroupMessageSendDTO dto = new ImGroupMessageSendDTO() .setGroupId(10L).setType(ImMessageTypeEnum.RECEIPT.getType()); - when(groupMemberService.getActiveGroupMemberUserIdsByGroupId(10L)).thenReturn(List.of(1L, 2L)); + when(groupMemberService.getActiveGroupMemberUserIdsByGroupId(10L)).thenReturn(listOf(1L, 2L)); groupMessageService.sendGroupMessage(1L, dto); @@ -1110,7 +1111,7 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest { @Test public void testSendGroupMessage_threeArg_explicitTargetsBypassActiveMembers() { // 准备:调用方传入显式 targets(解散场景成员已被批量 DISABLE,必须按移除前快照推送) - Set targets = Set.of(1L, 2L, 3L); + Set targets = setOf(1L, 2L, 3L); ImGroupMessageSendDTO dto = new ImGroupMessageSendDTO() .setGroupId(10L).setType(ImMessageTypeEnum.GROUP_DISSOLVE.getType()).setContent("{}"); @@ -1138,7 +1139,7 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest { reqVO.setMaxId(100L); reqVO.setLimit(20); - List mockList = List.of( + List mockList = listOf( ImGroupMessageDO.builder().id(99L).groupId(10L).senderId(2L) .sendTime(joinTime.plusMinutes(1)).build() ); @@ -1181,9 +1182,9 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest { @Test public void testDeleteReadMaxMessageIds_delegatesToRedis() { - groupMessageService.deleteReadMaxMessageIds(10L, List.of(1L, 2L)); + groupMessageService.deleteReadMaxMessageIds(10L, listOf(1L, 2L)); - verify(groupMessageReadRedisDAO).deleteReadMaxMessageIds(10L, List.of(1L, 2L)); + verify(groupMessageReadRedisDAO).deleteReadMaxMessageIds(10L, listOf(1L, 2L)); } @Test diff --git a/yudao-module-im/src/test/java/cn/iocoder/yudao/module/im/service/message/ImPrivateMessageServiceImplTest.java b/yudao-module-im/src/test/java/cn/iocoder/yudao/module/im/service/message/ImPrivateMessageServiceImplTest.java index cd6465f..f710579 100644 --- a/yudao-module-im/src/test/java/cn/iocoder/yudao/module/im/service/message/ImPrivateMessageServiceImplTest.java +++ b/yudao-module-im/src/test/java/cn/iocoder/yudao/module/im/service/message/ImPrivateMessageServiceImplTest.java @@ -25,6 +25,7 @@ import java.time.LocalDateTime; import java.util.List; import static cn.iocoder.yudao.module.im.enums.ErrorCodeConstants.*; +import static cn.iocoder.yudao.module.im.util.ImTestCollectionUtils.*; import static org.junit.jupiter.api.Assertions.*; import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; @@ -135,7 +136,7 @@ public class ImPrivateMessageServiceImplTest extends BaseMockitoUnitTest { @Test public void testPullMessages_success() { // 准备 - List mockMessages = List.of( + List mockMessages = listOf( ImPrivateMessageDO.builder().id(1L).senderId(1L).receiverId(2L).build(), ImPrivateMessageDO.builder().id(2L).senderId(2L).receiverId(1L).build() ); @@ -415,7 +416,7 @@ public class ImPrivateMessageServiceImplTest extends BaseMockitoUnitTest { reqVO.setReceiverId(2L); reqVO.setMaxId(100L); reqVO.setLimit(20); - List mockList = List.of( + List mockList = listOf( ImPrivateMessageDO.builder().id(99L).senderId(1L).receiverId(2L).build(), ImPrivateMessageDO.builder().id(98L).senderId(2L).receiverId(1L).build() ); diff --git a/yudao-module-im/src/test/java/cn/iocoder/yudao/module/im/service/rtc/ImRtcCallServiceImplTest.java b/yudao-module-im/src/test/java/cn/iocoder/yudao/module/im/service/rtc/ImRtcCallServiceImplTest.java index b39c024..e4301c3 100644 --- a/yudao-module-im/src/test/java/cn/iocoder/yudao/module/im/service/rtc/ImRtcCallServiceImplTest.java +++ b/yudao-module-im/src/test/java/cn/iocoder/yudao/module/im/service/rtc/ImRtcCallServiceImplTest.java @@ -34,9 +34,10 @@ import java.util.Map; import java.util.Set; import java.util.concurrent.Callable; -import static cn.iocoder.yudao.module.im.enums.ErrorCodeConstants.RTC_GROUP_INVITEE_REQUIRED; import static cn.iocoder.yudao.module.im.enums.ErrorCodeConstants.RTC_GROUP_INVITEE_OVER_LIMIT; +import static cn.iocoder.yudao.module.im.enums.ErrorCodeConstants.RTC_GROUP_INVITEE_REQUIRED; import static cn.iocoder.yudao.module.im.enums.ErrorCodeConstants.RTC_SELF_BUSY; +import static cn.iocoder.yudao.module.im.util.ImTestCollectionUtils.*; import static org.junit.jupiter.api.Assertions.*; import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; @@ -103,8 +104,8 @@ public class ImRtcCallServiceImplTest extends BaseMockitoUnitTest { // 准备:候选非空但每个 CAS 都失败(并发已变状态) ImRtcParticipantDO p = buildParticipant(10L, "r1", 100L, ImRtcParticipantStatusEnum.INVITING); when(rtcParticipantMapper.selectListByStatusAndInviteTimeBefore(any(), any())) - .thenReturn(List.of(p)); - when(adminUserApi.getUserMap(anySet())).thenReturn(Map.of(100L, buildUser(100L))); + .thenReturn(listOf(p)); + when(adminUserApi.getUserMap(anySet())).thenReturn(mapOf(100L, buildUser(100L))); when(rtcParticipantMapper.updateByIdAndStatus(eq(10L), eq(ImRtcParticipantStatusEnum.INVITING.getStatus()), any())) .thenReturn(0); @@ -122,15 +123,15 @@ public class ImRtcCallServiceImplTest extends BaseMockitoUnitTest { // 准备:群通话单候选 CAS 成功;shouldCloseGroupRoom 通过 selectListByRoom 多 JOINED 让其返 false,跳过 endSession ImRtcParticipantDO p = buildParticipant(10L, "r1", 100L, ImRtcParticipantStatusEnum.INVITING); when(rtcParticipantMapper.selectListByStatusAndInviteTimeBefore(any(), any())) - .thenReturn(List.of(p)); - when(adminUserApi.getUserMap(anySet())).thenReturn(Map.of(100L, buildUser(100L))); + .thenReturn(listOf(p)); + when(adminUserApi.getUserMap(anySet())).thenReturn(mapOf(100L, buildUser(100L))); when(rtcParticipantMapper.updateByIdAndStatus(eq(10L), eq(ImRtcParticipantStatusEnum.INVITING.getStatus()), any())) .thenReturn(1); ImRtcCallDO call = buildCall("r1", 200L, ImConversationTypeEnum.GROUP, 999L); when(rtcCallMapper.selectByRoom("r1")).thenReturn(call); - when(groupMemberService.getActiveGroupMemberUserIdsByGroupId(999L)).thenReturn(List.of(200L, 201L)); + when(groupMemberService.getActiveGroupMemberUserIdsByGroupId(999L)).thenReturn(listOf(200L, 201L)); // 房内 2 个 JOINED + 1 个 INVITING → shouldCloseGroupRoom 返 false - when(rtcParticipantMapper.selectListByRoom("r1")).thenReturn(List.of( + when(rtcParticipantMapper.selectListByRoom("r1")).thenReturn(listOf( buildParticipant(20L, "r1", 200L, ImRtcParticipantStatusEnum.JOINED), buildParticipant(21L, "r1", 201L, ImRtcParticipantStatusEnum.JOINED), buildParticipant(22L, "r1", 202L, ImRtcParticipantStatusEnum.INVITING) @@ -150,8 +151,8 @@ public class ImRtcCallServiceImplTest extends BaseMockitoUnitTest { // 准备:CAS 成功后通话主表缺失(异常兜底场景) ImRtcParticipantDO p = buildParticipant(10L, "r1", 100L, ImRtcParticipantStatusEnum.INVITING); when(rtcParticipantMapper.selectListByStatusAndInviteTimeBefore(any(), any())) - .thenReturn(List.of(p)); - when(adminUserApi.getUserMap(anySet())).thenReturn(Map.of(100L, buildUser(100L))); + .thenReturn(listOf(p)); + when(adminUserApi.getUserMap(anySet())).thenReturn(mapOf(100L, buildUser(100L))); when(rtcParticipantMapper.updateByIdAndStatus(eq(10L), eq(ImRtcParticipantStatusEnum.INVITING.getStatus()), any())) .thenReturn(1); when(rtcCallMapper.selectByRoom("r1")).thenReturn(null); @@ -219,15 +220,15 @@ public class ImRtcCallServiceImplTest extends BaseMockitoUnitTest { ImRtcParticipantDO timeoutTarget = buildParticipant(11L, "r1", 101L, ImRtcParticipantStatusEnum.INVITING); when(rtcParticipantMapper.selectListByRoomAndStatusAndInviteTimeBefore( eq("r1"), eq(ImRtcParticipantStatusEnum.INVITING.getStatus()), any())) - .thenReturn(List.of(timeoutTarget)); - when(adminUserApi.getUserMap(anySet())).thenReturn(Map.of(101L, buildUser(101L))); + .thenReturn(listOf(timeoutTarget)); + when(adminUserApi.getUserMap(anySet())).thenReturn(mapOf(101L, buildUser(101L))); when(rtcParticipantMapper.updateByIdAndStatus(eq(11L), eq(ImRtcParticipantStatusEnum.INVITING.getStatus()), any())) .thenReturn(1); ImRtcCallDO call = buildCall("r1", 200L, ImConversationTypeEnum.GROUP, 999L); when(rtcCallMapper.selectByRoom("r1")).thenReturn(call); - when(groupMemberService.getActiveGroupMemberUserIdsByGroupId(999L)).thenReturn(List.of(200L, 201L)); + when(groupMemberService.getActiveGroupMemberUserIdsByGroupId(999L)).thenReturn(listOf(200L, 201L)); // 让 shouldCloseGroupRoom 返 false - when(rtcParticipantMapper.selectListByRoom("r1")).thenReturn(List.of( + when(rtcParticipantMapper.selectListByRoom("r1")).thenReturn(listOf( buildParticipant(20L, "r1", 200L, ImRtcParticipantStatusEnum.JOINED), buildParticipant(21L, "r1", 201L, ImRtcParticipantStatusEnum.JOINED) )); @@ -253,7 +254,7 @@ public class ImRtcCallServiceImplTest extends BaseMockitoUnitTest { ImRtcCallCreateReqVO reqVO = new ImRtcCallCreateReqVO(); reqVO.setConversationType(ImConversationTypeEnum.GROUP.getType()); reqVO.setGroupId(10L); - reqVO.setInviteeIds(Set.of(100L)); + reqVO.setInviteeIds(setOf(100L)); ServiceException exception = assertThrows(ServiceException.class, () -> rtcCallService.createCall(100L, reqVO)); @@ -335,14 +336,14 @@ public class ImRtcCallServiceImplTest extends BaseMockitoUnitTest { Callable callable = invocation.getArgument(1); return callable.call(); }); - when(rtcParticipantMapper.selectListByRoom("r1")).thenReturn(List.of( + when(rtcParticipantMapper.selectListByRoom("r1")).thenReturn(listOf( buildParticipant(10L, "r1", 200L, ImRtcParticipantStatusEnum.JOINED), buildParticipant(11L, "r1", 201L, ImRtcParticipantStatusEnum.JOINED), buildParticipant(12L, "r1", 202L, ImRtcParticipantStatusEnum.INVITING) )); ImRtcCallInviteReqVO reqVO = new ImRtcCallInviteReqVO(); reqVO.setRoom("r1"); - reqVO.setInviteeIds(Set.of(203L)); + reqVO.setInviteeIds(setOf(203L)); ServiceException exception = assertThrows(ServiceException.class, () -> rtcCallService.inviteCall(200L, reqVO)); diff --git a/yudao-module-im/src/test/java/cn/iocoder/yudao/module/im/service/sensitiveword/ImSensitiveWordServiceImplTest.java b/yudao-module-im/src/test/java/cn/iocoder/yudao/module/im/service/sensitiveword/ImSensitiveWordServiceImplTest.java index 4423626..08a912d 100644 --- a/yudao-module-im/src/test/java/cn/iocoder/yudao/module/im/service/sensitiveword/ImSensitiveWordServiceImplTest.java +++ b/yudao-module-im/src/test/java/cn/iocoder/yudao/module/im/service/sensitiveword/ImSensitiveWordServiceImplTest.java @@ -19,6 +19,7 @@ import java.util.List; import static cn.iocoder.yudao.module.im.enums.ErrorCodeConstants.MESSAGE_SENSITIVE_WORD_BLOCKED; import static cn.iocoder.yudao.module.im.enums.ErrorCodeConstants.SENSITIVE_WORD_DUPLICATED; import static cn.iocoder.yudao.module.im.enums.ErrorCodeConstants.SENSITIVE_WORD_NOT_EXISTS; +import static cn.iocoder.yudao.module.im.util.ImTestCollectionUtils.*; import static org.junit.jupiter.api.Assertions.*; import static org.mockito.Mockito.*; @@ -44,7 +45,7 @@ public class ImSensitiveWordServiceImplTest extends BaseMockitoUnitTest { // mock 启用敏感词列表;LoadingCache 在首次 validateText 时懒加载,无需主动 init // 用 lenient 避免 null / empty 等不触发 cache load 的用例报 UnnecessaryStubbing lenient().when(imSensitiveWordMapper.selectListByStatus(CommonStatusEnum.ENABLE.getStatus())) - .thenReturn(List.of( + .thenReturn(listOf( ImSensitiveWordDO.builder().id(1L).word("badword") .status(CommonStatusEnum.ENABLE.getStatus()).build(), ImSensitiveWordDO.builder().id(2L).word("违禁词") @@ -118,7 +119,7 @@ public class ImSensitiveWordServiceImplTest extends BaseMockitoUnitTest { // 准备:mapper 返回新词库(额外多一个 newbad),并让 createSensitiveWord 走通 when(imSensitiveWordMapper.selectListByStatus(CommonStatusEnum.ENABLE.getStatus())) - .thenReturn(List.of( + .thenReturn(listOf( ImSensitiveWordDO.builder().id(1L).word("badword") .status(CommonStatusEnum.ENABLE.getStatus()).build(), ImSensitiveWordDO.builder().id(2L).word("违禁词") @@ -178,7 +179,7 @@ public class ImSensitiveWordServiceImplTest extends BaseMockitoUnitTest { when(imSensitiveWordMapper.selectByWord("updatedbad")).thenReturn(null); // 准备:reload 时返回新词库 when(imSensitiveWordMapper.selectListByStatus(CommonStatusEnum.ENABLE.getStatus())) - .thenReturn(List.of( + .thenReturn(listOf( ImSensitiveWordDO.builder().id(1L).word("updatedbad") .status(CommonStatusEnum.ENABLE.getStatus()).build() )); @@ -211,7 +212,7 @@ public class ImSensitiveWordServiceImplTest extends BaseMockitoUnitTest { .status(CommonStatusEnum.ENABLE.getStatus()).build()); // 准备:reload 时返回剩余词库(只剩中文那条) when(imSensitiveWordMapper.selectListByStatus(CommonStatusEnum.ENABLE.getStatus())) - .thenReturn(List.of( + .thenReturn(listOf( ImSensitiveWordDO.builder().id(2L).word("违禁词") .status(CommonStatusEnum.ENABLE.getStatus()).build() )); @@ -251,24 +252,24 @@ public class ImSensitiveWordServiceImplTest extends BaseMockitoUnitTest { // 准备:reload 时返回空词库 when(imSensitiveWordMapper.selectListByStatus(CommonStatusEnum.ENABLE.getStatus())) - .thenReturn(List.of()); + .thenReturn(listOf()); // 调用:批量删除,触发 invalidate - sensitiveWordService.deleteSensitiveWordList(List.of(1L, 2L)); + sensitiveWordService.deleteSensitiveWordList(listOf(1L, 2L)); // 调用 + 断言:所有词都不再命中 assertDoesNotThrow(() -> sensitiveWordService.validateText("contains badword here")); assertDoesNotThrow(() -> sensitiveWordService.validateText("这条消息里有违禁词哦")); // 断言:deleteByIds 被调用 1 次;selectListByStatus 共 2 次 - verify(imSensitiveWordMapper, times(1)).deleteByIds(List.of(1L, 2L)); + verify(imSensitiveWordMapper, times(1)).deleteByIds(listOf(1L, 2L)); verify(imSensitiveWordMapper, times(2)).selectListByStatus(CommonStatusEnum.ENABLE.getStatus()); } @Test public void testDeleteSensitiveWordList_emptyIds_skip() { // 调用:空列表直接返回 - sensitiveWordService.deleteSensitiveWordList(List.of()); + sensitiveWordService.deleteSensitiveWordList(listOf()); // 断言:mapper 不被调用 verify(imSensitiveWordMapper, never()).deleteByIds(anyList()); diff --git a/yudao-module-im/src/test/java/cn/iocoder/yudao/module/im/service/websocket/ImWebSocketServiceImplTest.java b/yudao-module-im/src/test/java/cn/iocoder/yudao/module/im/service/websocket/ImWebSocketServiceImplTest.java index f1c3339..0fe4019 100644 --- a/yudao-module-im/src/test/java/cn/iocoder/yudao/module/im/service/websocket/ImWebSocketServiceImplTest.java +++ b/yudao-module-im/src/test/java/cn/iocoder/yudao/module/im/service/websocket/ImWebSocketServiceImplTest.java @@ -18,6 +18,7 @@ import java.util.Arrays; import java.util.Collections; import java.util.List; +import static cn.iocoder.yudao.module.im.util.ImTestCollectionUtils.*; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.*; @@ -107,7 +108,7 @@ public class ImWebSocketServiceImplTest extends BaseMockitoUnitTest { dto.setGroupId(10L); dto.setSenderId(1L); - imWebSocketService.sendGroupMessageAsync(List.of(1L, 2L, 3L), dto); + imWebSocketService.sendGroupMessageAsync(listOf(1L, 2L, 3L), dto); verify(webSocketMessageSender).sendObject( eq(UserTypeEnum.ADMIN.getValue()), eq(1L), eq(ImGroupMessageDTO.TYPE), eq(dto)); @@ -130,7 +131,7 @@ public class ImWebSocketServiceImplTest extends BaseMockitoUnitTest { doThrow(new RuntimeException("user offline")) .when(webSocketMessageSender).sendObject(anyInt(), eq(1L), anyString(), any()); - imWebSocketService.sendGroupMessageAsync(List.of(1L, 2L, 3L), dto); + imWebSocketService.sendGroupMessageAsync(listOf(1L, 2L, 3L), dto); // 2L 和 3L 也都被推送 verify(webSocketMessageSender).sendObject(anyInt(), eq(2L), anyString(), any());