From 3235b4e70754a428ef24860c6aeee9762d447241 Mon Sep 17 00:00:00 2001 From: YunaiV Date: Sun, 31 May 2026 23:45:15 +0800 Subject: [PATCH] fix: 优化对 JDK8 的兼容性 --- yudao-module-im/src/test/java/cn/iocoder/yudao/module/im/dal/mysql/message/ImGroupMessageMapperTest.java | 10 +++++----- yudao-module-im/src/test/java/cn/iocoder/yudao/module/im/service/friend/ImFriendRequestServiceImplTest.java | 4 ++-- yudao-module-im/src/test/java/cn/iocoder/yudao/module/im/service/friend/ImFriendServiceImplTest.java | 8 ++++---- yudao-module-im/src/test/java/cn/iocoder/yudao/module/im/service/group/ImGroupMemberServiceImplTest.java | 36 ++++++++++++++++++------------------ yudao-module-im/src/test/java/cn/iocoder/yudao/module/im/service/group/ImGroupRequestServiceImplTest.java | 28 +++++++++++++++------------- yudao-module-im/src/test/java/cn/iocoder/yudao/module/im/service/group/ImGroupServiceImplTest.java | 106 ++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------------------------------- yudao-module-im/src/test/java/cn/iocoder/yudao/module/im/service/message/ImGroupMessageServiceImplTest.java | 157 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------------------------------ yudao-module-im/src/test/java/cn/iocoder/yudao/module/im/service/message/ImPrivateMessageServiceImplTest.java | 6 +++--- yudao-module-im/src/test/java/cn/iocoder/yudao/module/im/service/rtc/ImRtcCallServiceImplTest.java | 34 ++++++++++++++++++---------------- yudao-module-im/src/test/java/cn/iocoder/yudao/module/im/service/sensitiveword/ImSensitiveWordServiceImplTest.java | 18 +++++++++--------- yudao-module-im/src/test/java/cn/iocoder/yudao/module/im/service/websocket/ImWebSocketServiceImplTest.java | 6 +++--- 11 files changed, 210 insertions(+), 203 deletions(-) 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 16a13aa..2f1d093 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 @@ -1,5 +1,6 @@ package cn.iocoder.yudao.module.im.dal.mysql.message; +import cn.hutool.core.collection.ListUtil; import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; import cn.iocoder.yudao.module.im.dal.dataobject.message.ImGroupMessageDO; import cn.iocoder.yudao.module.im.enums.message.ImGroupMessageReceiptStatusEnum; @@ -10,7 +11,6 @@ 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.*; /** @@ -36,7 +36,7 @@ public class ImGroupMessageMapperTest extends BaseDbUnitTest { mapper.insert(msg20); // 调用:只查群 10 - List result = mapper.selectListByMinId(listOf(10L), 0L, FAR_PAST, 100); + List result = mapper.selectListByMinId(ListUtil.of(10L), 0L, FAR_PAST, 100); // 断言:只有 msg10 assertEquals(1, result.size()); @@ -51,7 +51,7 @@ public class ImGroupMessageMapperTest extends BaseDbUnitTest { ImGroupMessageDO recalled = buildMessage(10L, 1L, ImMessageStatusEnum.RECALL); mapper.insert(recalled); - List result = mapper.selectListByMinId(listOf(10L), 0L, FAR_PAST, 100); + List result = mapper.selectListByMinId(ListUtil.of(10L), 0L, FAR_PAST, 100); // 断言:撤回消息一并返回,由客户端按 status 切换渲染 assertEquals(2, result.size()); @@ -67,7 +67,7 @@ public class ImGroupMessageMapperTest extends BaseDbUnitTest { outWindow.setSendTime(LocalDateTime.now().minusDays(40)); mapper.insert(outWindow); - List result = mapper.selectListByMinId(listOf(10L), 0L, + List result = mapper.selectListByMinId(ListUtil.of(10L), 0L, LocalDateTime.now().minusDays(30), 100); assertEquals(1, result.size()); @@ -85,7 +85,7 @@ public class ImGroupMessageMapperTest extends BaseDbUnitTest { mapper.insert(m3); // 调用:size=2,返回 id 最小的 2 条 - List result = mapper.selectListByMinId(listOf(10L), 0L, FAR_PAST, 2); + List result = mapper.selectListByMinId(ListUtil.of(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 a3c9c1d..0bbf441 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 @@ -1,5 +1,6 @@ package cn.iocoder.yudao.module.im.service.friend; +import cn.hutool.core.collection.ListUtil; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.exception.ServiceException; import cn.iocoder.yudao.framework.test.core.ut.BaseMockitoUnitTest; @@ -24,7 +25,6 @@ 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; @@ -229,7 +229,7 @@ public class ImFriendRequestServiceImplTest extends BaseMockitoUnitTest { friendRequestService.agreeFriendRequest(2L, 100L); // 断言:双向建立好友 + 推 APPROVED 给发起方 - verify(adminUserApi).validateUserList(listOf(1L, 2L)); + verify(adminUserApi).validateUserList(ListUtil.of(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 6522093..1d8aafc 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 @@ -1,5 +1,6 @@ package cn.iocoder.yudao.module.im.service.friend; +import cn.hutool.core.collection.ListUtil; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.exception.ServiceException; import cn.iocoder.yudao.framework.test.core.ut.BaseMockitoUnitTest; @@ -22,7 +23,6 @@ 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; @@ -249,7 +249,7 @@ public class ImFriendServiceImplTest extends BaseMockitoUnitTest { @Test public void testGetFriendList() { - List list = listOf( + List list = ListUtil.of( ImFriendDO.builder().id(1L).userId(1L).friendUserId(2L) .status(CommonStatusEnum.ENABLE.getStatus()).build(), ImFriendDO.builder().id(2L).userId(1L).friendUserId(3L) @@ -277,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(listOf(friend2, friend3)); + .thenReturn(ListUtil.of(friend2, friend3)); when(imFriendMapper.selectListByUserIdsAndFriendUserIdAndStatus(anyCollection(), eq(1L), - eq(CommonStatusEnum.ENABLE.getStatus()))).thenReturn(listOf( + eq(CommonStatusEnum.ENABLE.getStatus()))).thenReturn(ListUtil.of( 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 27e0b23..7d2dc75 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 @@ -1,5 +1,6 @@ package cn.iocoder.yudao.module.im.service.group; +import cn.hutool.core.collection.ListUtil; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.exception.ServiceException; import cn.iocoder.yudao.framework.test.core.ut.BaseMockitoUnitTest; @@ -18,7 +19,6 @@ 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.*; @@ -117,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(listOf(exist3, exist4)); + .thenReturn(ListUtil.of(exist3, exist4)); // 调用 - groupMemberService.addGroupMembers(10L, listOf(2L, 3L, 4L)); + groupMemberService.addGroupMembers(10L, ListUtil.of(2L, 3L, 4L)); // 断言:updates 只有用户 3;inserts 只有用户 2 verify(groupMemberMapper).updateRejoinFields(eq(30L), eq(CommonStatusEnum.ENABLE.getStatus()), @@ -132,7 +132,7 @@ public class ImGroupMemberServiceImplTest extends BaseMockitoUnitTest { @Test public void testAddGroupMembers_allExisting_onlyUpdates() { // 准备:传入的 3 个用户都已有记录(全部 DISABLE) → 只做 update,不做 insert - List existing = listOf( + List existing = ListUtil.of( ImGroupMemberDO.builder().id(1L).groupId(10L).userId(2L) .status(CommonStatusEnum.DISABLE.getStatus()).build(), ImGroupMemberDO.builder().id(2L).groupId(10L).userId(3L) @@ -141,7 +141,7 @@ public class ImGroupMemberServiceImplTest extends BaseMockitoUnitTest { when(groupMemberMapper.selectListByGroupIdAndUserIds(eq(10L), anyCollection())) .thenReturn(existing); - groupMemberService.addGroupMembers(10L, listOf(2L, 3L)); + groupMemberService.addGroupMembers(10L, ListUtil.of(2L, 3L)); verify(groupMemberMapper, times(2)).updateRejoinFields(anyLong(), eq(CommonStatusEnum.ENABLE.getStatus()), any(), eq(ImGroupMemberRoleEnum.NORMAL.getRole()), isNull(), isNull()); @@ -152,9 +152,9 @@ public class ImGroupMemberServiceImplTest extends BaseMockitoUnitTest { public void testAddGroupMembers_allNew_onlyInserts() { // 准备:都不存在 → 只做 insert when(groupMemberMapper.selectListByGroupIdAndUserIds(eq(10L), anyCollection())) - .thenReturn(listOf()); + .thenReturn(ListUtil.of()); - groupMemberService.addGroupMembers(10L, listOf(2L, 3L)); + groupMemberService.addGroupMembers(10L, ListUtil.of(2L, 3L)); verify(groupMemberMapper, never()).updateRejoinFields(anyLong(), anyInt(), any(), anyInt(), any(), any()); verify(groupMemberMapper).insertBatch(anyList()); @@ -163,14 +163,14 @@ public class ImGroupMemberServiceImplTest extends BaseMockitoUnitTest { @Test public void testAddGroupMembers_allExistingEnabled_nothingHappens() { // 准备:都已存在且 ENABLE → 既不 update 也不 insert - List existing = listOf( + List existing = ListUtil.of( ImGroupMemberDO.builder().id(1L).groupId(10L).userId(2L) .status(CommonStatusEnum.ENABLE.getStatus()).build() ); when(groupMemberMapper.selectListByGroupIdAndUserIds(eq(10L), anyCollection())) .thenReturn(existing); - groupMemberService.addGroupMembers(10L, listOf(2L)); + groupMemberService.addGroupMembers(10L, ListUtil.of(2L)); verify(groupMemberMapper, never()).updateRejoinFields(anyLong(), anyInt(), any(), anyInt(), any(), any()); verify(groupMemberMapper, never()).insertBatch(anyList()); @@ -180,14 +180,14 @@ public class ImGroupMemberServiceImplTest extends BaseMockitoUnitTest { public void testAddGroupMembers_batchInsertDuplicateFallback() { // 准备:两个新增成员,批量插入失败时降级为逐个 addGroupMember when(groupMemberMapper.selectListByGroupIdAndUserIds(eq(10L), anyCollection())) - .thenReturn(listOf()); + .thenReturn(ListUtil.of()); doThrow(new DuplicateKeyException("concurrent batch insert")) .when(groupMemberMapper).insertBatch(anyList()); // addGroupMember 单条兜底逻辑 when(groupMemberMapper.selectByGroupIdAndUserId(eq(10L), anyLong())).thenReturn(null); // 调用 - groupMemberService.addGroupMembers(10L, listOf(2L, 3L)); + groupMemberService.addGroupMembers(10L, ListUtil.of(2L, 3L)); // 断言:降级为逐条调用 insert verify(groupMemberMapper, times(2)).insert(any(ImGroupMemberDO.class)); @@ -245,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(listOf(1L)), + verify(groupMessageService).sendGroupMessage(eq(1L), eq(ListUtil.of(1L)), any(cn.iocoder.yudao.module.im.service.message.dto.ImGroupMessageSendDTO.class)); } @@ -279,7 +279,7 @@ public class ImGroupMemberServiceImplTest extends BaseMockitoUnitTest { @Test public void testRemoveGroupMembers_batch() { - groupMemberService.removeGroupMembers(10L, listOf(2L, 3L)); + groupMemberService.removeGroupMembers(10L, ListUtil.of(2L, 3L)); ArgumentCaptor captor = ArgumentCaptor.forClass(ImGroupMemberDO.class); verify(groupMemberMapper).updateByGroupIdAndUserIdsAndStatus(eq(10L), anyCollection(), @@ -304,7 +304,7 @@ public class ImGroupMemberServiceImplTest extends BaseMockitoUnitTest { @Test public void testGetActiveGroupMemberUserIdsByGroupId_extractsUserIds() { // 准备:3 个 ENABLE 成员 - List members = listOf( + List members = ListUtil.of( ImGroupMemberDO.builder().groupId(10L).userId(1L) .status(CommonStatusEnum.ENABLE.getStatus()).build(), ImGroupMemberDO.builder().groupId(10L).userId(2L) @@ -319,13 +319,13 @@ public class ImGroupMemberServiceImplTest extends BaseMockitoUnitTest { List userIds = groupMemberService.getActiveGroupMemberUserIdsByGroupId(10L); // 断言:只返回 userId、顺序保留 - assertEquals(listOf(1L, 2L, 3L), userIds); + assertEquals(ListUtil.of(1L, 2L, 3L), userIds); } @Test public void testGetActiveGroupMemberUserIdsByGroupId_emptyList() { when(groupMemberMapper.selectListByGroupIdAndStatus( - 10L, CommonStatusEnum.ENABLE.getStatus())).thenReturn(listOf()); + 10L, CommonStatusEnum.ENABLE.getStatus())).thenReturn(ListUtil.of()); List userIds = groupMemberService.getActiveGroupMemberUserIdsByGroupId(10L); @@ -334,8 +334,8 @@ public class ImGroupMemberServiceImplTest extends BaseMockitoUnitTest { @Test public void testGetGroupMemberListByOwnerAndAdmin_passesRoles() { - List roles = listOf(ImGroupMemberRoleEnum.OWNER.getRole(), ImGroupMemberRoleEnum.ADMIN.getRole()); - List members = listOf(ImGroupMemberDO.builder().groupId(10L).userId(1L).build()); + List roles = ListUtil.of(ImGroupMemberRoleEnum.OWNER.getRole(), ImGroupMemberRoleEnum.ADMIN.getRole()); + List members = ListUtil.of(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 79b7fca..c4f41a7 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 @@ -1,5 +1,7 @@ package cn.iocoder.yudao.module.im.service.group; +import cn.hutool.core.collection.ListUtil; +import cn.hutool.core.map.MapUtil; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.exception.ServiceException; import cn.iocoder.yudao.framework.test.core.ut.BaseMockitoUnitTest; @@ -28,7 +30,6 @@ 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.*; @@ -94,7 +95,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(listOf( + when(groupMemberService.getGroupMemberListByOwnerAndAdmin(10L)).thenReturn(ListUtil.of( ImGroupMemberDO.builder().groupId(10L).userId(99L) .role(ImGroupMemberRoleEnum.OWNER.getRole()) .status(CommonStatusEnum.ENABLE.getStatus()).build(), @@ -126,7 +127,7 @@ public class ImGroupRequestServiceImplTest extends BaseMockitoUnitTest { .joinApproval(true) .status(CommonStatusEnum.ENABLE.getStatus()).build(); when(groupService.validateGroupExists(10L)).thenReturn(group); - when(groupMemberService.getGroupMemberListByOwnerAndAdmin(10L)).thenReturn(listOf( + when(groupMemberService.getGroupMemberListByOwnerAndAdmin(10L)).thenReturn(ListUtil.of( ImGroupMemberDO.builder().groupId(10L).userId(99L) .role(ImGroupMemberRoleEnum.OWNER.getRole()) .status(CommonStatusEnum.ENABLE.getStatus()).build())); @@ -191,7 +192,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(listOf( + when(groupMemberService.getGroupMemberListByOwnerAndAdmin(10L)).thenReturn(ListUtil.of( ImGroupMemberDO.builder().groupId(10L).userId(99L) .role(ImGroupMemberRoleEnum.OWNER.getRole()) .status(CommonStatusEnum.ENABLE.getStatus()).build())); @@ -269,7 +270,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(listOf( + when(groupMemberService.getGroupMemberListByOwnerAndAdmin(10L)).thenReturn(ListUtil.of( ImGroupMemberDO.builder().groupId(10L).userId(1L) .role(ImGroupMemberRoleEnum.OWNER.getRole()) .status(CommonStatusEnum.ENABLE.getStatus()).build())); @@ -290,16 +291,17 @@ 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(listOf( + when(groupMemberService.getGroupMemberListByOwnerAndAdmin(10L)).thenReturn(ListUtil.of( ImGroupMemberDO.builder().groupId(10L).userId(99L) .role(ImGroupMemberRoleEnum.OWNER.getRole()) .status(CommonStatusEnum.ENABLE.getStatus()).build())); - when(adminUserApi.getUserMap(anyCollection())).thenReturn(mapOf( - 2L, buildUser(2L, "用户A"), - 3L, buildUser(3L, "用户B"))); + when(adminUserApi.getUserMap(anyCollection())).thenReturn(MapUtil.builder() + .put(2L, buildUser(2L, "用户A")) + .put(3L, buildUser(3L, "用户B")) + .build()); // 调用:邀请人 1L 邀请 2L、3L(都没有旧记录) - groupRequestService.createInviteRequestList(10L, 1L, listOf(2L, 3L)); + groupRequestService.createInviteRequestList(10L, 1L, ListUtil.of(2L, 3L)); // 断言:插入 2 条 + 推 1503 给 owner(每条 1 帧)共 2 帧 ArgumentCaptor captor = ArgumentCaptor.forClass(ImGroupRequestDO.class); @@ -324,14 +326,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(listOf( + when(groupMemberService.getGroupMemberListByOwnerAndAdmin(10L)).thenReturn(ListUtil.of( ImGroupMemberDO.builder().groupId(10L).userId(99L) .role(ImGroupMemberRoleEnum.OWNER.getRole()) .status(CommonStatusEnum.ENABLE.getStatus()).build())); - when(adminUserApi.getUserMap(anyCollection())).thenReturn(mapOf(2L, buildUser(2L, "用户A"))); + when(adminUserApi.getUserMap(anyCollection())).thenReturn(MapUtil.of(2L, buildUser(2L, "用户A"))); // 调用 - groupRequestService.createInviteRequestList(10L, 1L, listOf(2L)); + groupRequestService.createInviteRequestList(10L, 1L, ListUtil.of(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 991ee97..044a91d 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 @@ -1,5 +1,8 @@ package cn.iocoder.yudao.module.im.service.group; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.collection.ListUtil; +import cn.hutool.core.map.MapUtil; import cn.hutool.extra.spring.SpringUtil; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.exception.ServiceException; @@ -43,7 +46,6 @@ 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.*; @@ -109,13 +111,13 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest { // 准备:创建者 + 2 个初始成员,都是好友 ImGroupCreateReqVO reqVO = new ImGroupCreateReqVO(); reqVO.setName("测试群"); - reqVO.setMemberUserIds(new ArrayList<>(listOf(2L, 3L))); + reqVO.setMemberUserIds(new ArrayList<>(ListUtil.of(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(listOf( + when(friendService.getActiveFriendList(eq(1L), anyCollection())).thenReturn(ListUtil.of( ImFriendDO.builder().userId(1L).friendUserId(2L) .status(CommonStatusEnum.ENABLE.getStatus()).build(), ImFriendDO.builder().userId(1L).friendUserId(3L) @@ -141,15 +143,15 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest { // 准备:初始成员里有非好友 ImGroupCreateReqVO reqVO = new ImGroupCreateReqVO(); reqVO.setName("测试群"); - reqVO.setMemberUserIds(new ArrayList<>(listOf(2L, 3L))); + reqVO.setMemberUserIds(new ArrayList<>(ListUtil.of(2L, 3L))); // 只有 2 是好友,3 不是 - when(friendService.getActiveFriendList(eq(1L), anyCollection())).thenReturn(listOf( + when(friendService.getActiveFriendList(eq(1L), anyCollection())).thenReturn(ListUtil.of( 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(mapOf(3L, u3)); + when(adminUserApi.getUserMap(anyCollection())).thenReturn(MapUtil.of(3L, u3)); // 调用并断言 ServiceException exception = assertThrows(ServiceException.class, @@ -328,8 +330,8 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest { // 被邀请人 2 和 3 都是好友 ImGroupMemberInviteReqVO reqVO = new ImGroupMemberInviteReqVO(); reqVO.setGroupId(10L); - reqVO.setMemberUserIds(new ArrayList<>(listOf(2L, 3L))); - List friends = listOf( + reqVO.setMemberUserIds(new ArrayList<>(ListUtil.of(2L, 3L))); + List friends = ListUtil.of( ImFriendDO.builder().userId(1L).friendUserId(2L) .status(CommonStatusEnum.ENABLE.getStatus()).build(), ImFriendDO.builder().userId(1L).friendUserId(3L) @@ -367,7 +369,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(listOf( + when(groupMemberService.getActiveGroupMemberListByGroupId(10L)).thenReturn(ListUtil.of( ImGroupMemberDO.builder().groupId(10L).userId(99L) .role(ImGroupMemberRoleEnum.OWNER.getRole()) .status(CommonStatusEnum.ENABLE.getStatus()).build(), @@ -377,8 +379,8 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest { ImGroupMemberInviteReqVO reqVO = new ImGroupMemberInviteReqVO(); reqVO.setGroupId(10L); - reqVO.setMemberUserIds(new ArrayList<>(listOf(2L, 3L))); - when(friendService.getActiveFriendList(eq(1L), anyCollection())).thenReturn(listOf( + reqVO.setMemberUserIds(new ArrayList<>(ListUtil.of(2L, 3L))); + when(friendService.getActiveFriendList(eq(1L), anyCollection())).thenReturn(ListUtil.of( ImFriendDO.builder().userId(1L).friendUserId(2L) .status(CommonStatusEnum.ENABLE.getStatus()).build(), ImFriendDO.builder().userId(1L).friendUserId(3L) @@ -409,15 +411,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(listOf( + when(groupMemberService.getActiveGroupMemberListByGroupId(10L)).thenReturn(ListUtil.of( 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<>(listOf(2L, 3L))); - when(friendService.getActiveFriendList(eq(1L), anyCollection())).thenReturn(listOf( + reqVO.setMemberUserIds(new ArrayList<>(ListUtil.of(2L, 3L))); + when(friendService.getActiveFriendList(eq(1L), anyCollection())).thenReturn(ListUtil.of( ImFriendDO.builder().userId(1L).friendUserId(2L) .status(CommonStatusEnum.ENABLE.getStatus()).build(), ImFriendDO.builder().userId(1L).friendUserId(3L) @@ -446,18 +448,18 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest { .status(CommonStatusEnum.ENABLE.getStatus()).build(); when(groupMapper.selectById(10L)).thenReturn(group); when(groupMemberService.getActiveGroupMemberListByGroupId(10L)) - .thenReturn(listOf(ImGroupMemberDO.builder().groupId(10L).userId(1L) + .thenReturn(ListUtil.of(ImGroupMemberDO.builder().groupId(10L).userId(1L) .status(CommonStatusEnum.ENABLE.getStatus()).build())); ImGroupMemberInviteReqVO reqVO = new ImGroupMemberInviteReqVO(); reqVO.setGroupId(10L); - reqVO.setMemberUserIds(new ArrayList<>(listOf(2L, 3L))); + reqVO.setMemberUserIds(new ArrayList<>(ListUtil.of(2L, 3L))); // 只有 2 是好友,3 不是 - when(friendService.getActiveFriendList(eq(1L), anyCollection())).thenReturn(listOf( + when(friendService.getActiveFriendList(eq(1L), anyCollection())).thenReturn(ListUtil.of( 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(mapOf(3L, u3)); + when(adminUserApi.getUserMap(anyCollection())).thenReturn(MapUtil.of(3L, u3)); ServiceException exception = assertThrows(ServiceException.class, () -> groupService.inviteGroupMember(1L, reqVO)); @@ -485,9 +487,9 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest { ImGroupMemberInviteReqVO reqVO = new ImGroupMemberInviteReqVO(); reqVO.setGroupId(10L); - reqVO.setMemberUserIds(new ArrayList<>(listOf(600L, 601L))); + reqVO.setMemberUserIds(new ArrayList<>(ListUtil.of(600L, 601L))); // 被邀请人都是好友 - when(friendService.getActiveFriendList(eq(1L), anyCollection())).thenReturn(listOf( + when(friendService.getActiveFriendList(eq(1L), anyCollection())).thenReturn(ListUtil.of( ImFriendDO.builder().userId(1L).friendUserId(600L) .status(CommonStatusEnum.ENABLE.getStatus()).build(), ImFriendDO.builder().userId(1L).friendUserId(601L) @@ -513,7 +515,7 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest { .status(CommonStatusEnum.ENABLE.getStatus()).build(); when(groupMapper.selectById(10L)).thenReturn(group); // 用户 2 已在群中 - when(groupMemberService.getActiveGroupMemberListByGroupId(10L)).thenReturn(listOf( + when(groupMemberService.getActiveGroupMemberListByGroupId(10L)).thenReturn(ListUtil.of( ImGroupMemberDO.builder().groupId(10L).userId(1L) .status(CommonStatusEnum.ENABLE.getStatus()).build(), ImGroupMemberDO.builder().groupId(10L).userId(2L) @@ -522,7 +524,7 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest { ImGroupMemberInviteReqVO reqVO = new ImGroupMemberInviteReqVO(); reqVO.setGroupId(10L); - reqVO.setMemberUserIds(new ArrayList<>(listOf(2L))); // 只邀请 2,他已在群中 + reqVO.setMemberUserIds(new ArrayList<>(ListUtil.of(2L))); // 只邀请 2,他已在群中 // 调用 groupService.inviteGroupMember(1L, reqVO); @@ -607,7 +609,7 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest { ImGroupMemberRemoveReqVO reqVO = new ImGroupMemberRemoveReqVO(); reqVO.setGroupId(10L); - reqVO.setMemberUserIds(listOf(1L, 2L)); + reqVO.setMemberUserIds(ListUtil.of(1L, 2L)); ServiceException exception = assertThrows(ServiceException.class, () -> groupService.removeGroupMember(1L, reqVO)); @@ -629,7 +631,7 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest { ImGroupMemberDO.builder().groupId(10L).userId(1L) .role(ImGroupMemberRoleEnum.OWNER.getRole()).build()); // 目标:两个普通成员 - when(groupMemberService.getGroupMembers(eq(10L), anyCollection())).thenReturn(listOf( + when(groupMemberService.getGroupMembers(eq(10L), anyCollection())).thenReturn(ListUtil.of( ImGroupMemberDO.builder().groupId(10L).userId(2L) .role(ImGroupMemberRoleEnum.NORMAL.getRole()) .status(CommonStatusEnum.ENABLE.getStatus()).build(), @@ -639,7 +641,7 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest { ImGroupMemberRemoveReqVO reqVO = new ImGroupMemberRemoveReqVO(); reqVO.setGroupId(10L); - reqVO.setMemberUserIds(listOf(2L, 3L)); + reqVO.setMemberUserIds(ListUtil.of(2L, 3L)); groupService.removeGroupMember(1L, reqVO); @@ -666,14 +668,14 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest { ImGroupMemberDO.builder().groupId(10L).userId(1L) .role(ImGroupMemberRoleEnum.ADMIN.getRole()).build()); // 目标:另一个管理员 - when(groupMemberService.getGroupMembers(eq(10L), anyCollection())).thenReturn(listOf( + when(groupMemberService.getGroupMembers(eq(10L), anyCollection())).thenReturn(ListUtil.of( ImGroupMemberDO.builder().groupId(10L).userId(2L) .role(ImGroupMemberRoleEnum.ADMIN.getRole()) .status(CommonStatusEnum.ENABLE.getStatus()).build())); ImGroupMemberRemoveReqVO reqVO = new ImGroupMemberRemoveReqVO(); reqVO.setGroupId(10L); - reqVO.setMemberUserIds(listOf(2L)); + reqVO.setMemberUserIds(ListUtil.of(2L)); ServiceException exception = assertThrows(ServiceException.class, () -> groupService.removeGroupMember(1L, reqVO)); @@ -695,14 +697,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(listOf( + when(groupMemberService.getGroupMembers(eq(10L), anyCollection())).thenReturn(ListUtil.of( ImGroupMemberDO.builder().groupId(10L).userId(99L) .role(ImGroupMemberRoleEnum.OWNER.getRole()) .status(CommonStatusEnum.ENABLE.getStatus()).build())); ImGroupMemberRemoveReqVO reqVO = new ImGroupMemberRemoveReqVO(); reqVO.setGroupId(10L); - reqVO.setMemberUserIds(listOf(99L)); + reqVO.setMemberUserIds(ListUtil.of(99L)); ServiceException exception = assertThrows(ServiceException.class, () -> groupService.removeGroupMember(1L, reqVO)); @@ -724,7 +726,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(listOf( + when(groupMemberService.getGroupMembers(eq(10L), anyCollection())).thenReturn(ListUtil.of( ImGroupMemberDO.builder().groupId(10L).userId(2L) .role(ImGroupMemberRoleEnum.NORMAL.getRole()) .status(CommonStatusEnum.ENABLE.getStatus()).build(), @@ -734,17 +736,17 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest { ImGroupMemberRemoveReqVO reqVO = new ImGroupMemberRemoveReqVO(); reqVO.setGroupId(10L); - reqVO.setMemberUserIds(listOf(2L, 3L)); + reqVO.setMemberUserIds(ListUtil.of(2L, 3L)); groupService.removeGroupMember(1L, reqVO); // 仅有效成员 2L 进入移除 / 已读清理,已退群的 3L 被跳过 ArgumentCaptor removeCaptor = ArgumentCaptor.forClass(Collection.class); verify(groupMemberService).removeGroupMembers(eq(10L), removeCaptor.capture()); - assertEquals(setOf(2L), setCopyOf(removeCaptor.getValue())); + assertEquals(CollUtil.newHashSet(2L), CollUtil.newHashSet(removeCaptor.getValue())); ArgumentCaptor readCaptor = ArgumentCaptor.forClass(Collection.class); verify(groupMessageService).deleteReadMaxMessageIds(eq(10L), readCaptor.capture()); - assertEquals(setOf(2L), setCopyOf(readCaptor.getValue())); + assertEquals(CollUtil.newHashSet(2L), CollUtil.newHashSet(readCaptor.getValue())); } } @@ -760,7 +762,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(listOf( + when(groupMemberService.getGroupMembers(eq(10L), anyCollection())).thenReturn(ListUtil.of( ImGroupMemberDO.builder().userId(3L).status(CommonStatusEnum.ENABLE.getStatus()) .role(ImGroupMemberRoleEnum.NORMAL.getRole()).build())); // 群里已有 1 个 ADMIN,1 + 1 ≤ 3 不超上限 @@ -771,7 +773,7 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest { ImGroupAdminAddReqVO reqVO = new ImGroupAdminAddReqVO(); reqVO.setId(10L); - reqVO.setUserIds(listOf(3L)); + reqVO.setUserIds(ListUtil.of(3L)); groupService.addGroupAdmin(1L, reqVO); @@ -790,7 +792,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(listOf( + when(groupMemberService.getGroupMembers(eq(10L), anyCollection())).thenReturn(ListUtil.of( ImGroupMemberDO.builder().userId(5L).status(CommonStatusEnum.ENABLE.getStatus()) .role(ImGroupMemberRoleEnum.NORMAL.getRole()).build())); // 群里已有 3 个 ADMIN(达到上限),再加 1 会超 @@ -799,7 +801,7 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest { ImGroupAdminAddReqVO reqVO = new ImGroupAdminAddReqVO(); reqVO.setId(10L); - reqVO.setUserIds(listOf(5L)); + reqVO.setUserIds(ListUtil.of(5L)); ServiceException exception = assertThrows(ServiceException.class, () -> groupService.addGroupAdmin(1L, reqVO)); @@ -817,13 +819,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(listOf( + when(groupMemberService.getGroupMembers(eq(10L), anyCollection())).thenReturn(ListUtil.of( ImGroupMemberDO.builder().userId(1L).status(CommonStatusEnum.ENABLE.getStatus()) .role(ImGroupMemberRoleEnum.OWNER.getRole()).build())); ImGroupAdminAddReqVO reqVO = new ImGroupAdminAddReqVO(); reqVO.setId(10L); - reqVO.setUserIds(listOf(1L)); + reqVO.setUserIds(ListUtil.of(1L)); ServiceException exception = assertThrows(ServiceException.class, () -> groupService.addGroupAdmin(1L, reqVO)); @@ -841,13 +843,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(listOf( + when(groupMemberService.getGroupMembers(eq(10L), anyCollection())).thenReturn(ListUtil.of( ImGroupMemberDO.builder().userId(2L).status(CommonStatusEnum.ENABLE.getStatus()) .role(ImGroupMemberRoleEnum.ADMIN.getRole()).build())); ImGroupAdminAddReqVO reqVO = new ImGroupAdminAddReqVO(); reqVO.setId(10L); - reqVO.setUserIds(listOf(2L)); + reqVO.setUserIds(ListUtil.of(2L)); groupService.addGroupAdmin(1L, reqVO); @@ -867,7 +869,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(listOf( + when(groupMemberService.getGroupMembers(eq(10L), anyCollection())).thenReturn(ListUtil.of( ImGroupMemberDO.builder().userId(2L).status(CommonStatusEnum.ENABLE.getStatus()) .role(ImGroupMemberRoleEnum.ADMIN.getRole()).build())); when(groupMemberService.updateGroupMemberRole(eq(10L), anyCollection(), @@ -875,7 +877,7 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest { ImGroupAdminRemoveReqVO reqVO = new ImGroupAdminRemoveReqVO(); reqVO.setId(10L); - reqVO.setUserIds(listOf(2L)); + reqVO.setUserIds(ListUtil.of(2L)); groupService.removeGroupAdmin(1L, reqVO); @@ -895,13 +897,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(listOf( + when(groupMemberService.getGroupMembers(eq(10L), anyCollection())).thenReturn(ListUtil.of( ImGroupMemberDO.builder().userId(2L).status(CommonStatusEnum.ENABLE.getStatus()) .role(ImGroupMemberRoleEnum.NORMAL.getRole()).build())); ImGroupAdminRemoveReqVO reqVO = new ImGroupAdminRemoveReqVO(); reqVO.setId(10L); - reqVO.setUserIds(listOf(2L)); + reqVO.setUserIds(ListUtil.of(2L)); groupService.removeGroupAdmin(1L, reqVO); @@ -923,9 +925,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(setOf(2L)), + when(groupMemberService.updateGroupMemberRole(eq(10L), eq(CollUtil.newHashSet(2L)), eq(ImGroupMemberRoleEnum.OWNER.getRole()))).thenReturn(1); - when(groupMemberService.updateGroupMemberRole(eq(10L), eq(setOf(1L)), + when(groupMemberService.updateGroupMemberRole(eq(10L), eq(CollUtil.newHashSet(1L)), eq(ImGroupMemberRoleEnum.NORMAL.getRole()))).thenReturn(1); ImGroupTransferOwnerReqVO reqVO = new ImGroupTransferOwnerReqVO(); @@ -939,9 +941,9 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest { verify(groupMapper).updateById(groupCaptor.capture()); assertEquals(2L, groupCaptor.getValue().getOwnerUserId()); // 旧群主 → MEMBER;新群主 → OWNER - verify(groupMemberService).updateGroupMemberRole(eq(10L), eq(setOf(1L)), + verify(groupMemberService).updateGroupMemberRole(eq(10L), eq(CollUtil.newHashSet(1L)), eq(ImGroupMemberRoleEnum.NORMAL.getRole())); - verify(groupMemberService).updateGroupMemberRole(eq(10L), eq(setOf(2L)), + verify(groupMemberService).updateGroupMemberRole(eq(10L), eq(CollUtil.newHashSet(2L)), eq(ImGroupMemberRoleEnum.OWNER.getRole())); } } @@ -1121,7 +1123,7 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest { @Test public void testGetMyGroupList_success() { // 活跃群成员 - when(groupMemberService.getActiveGroupMemberListByUserId(1L)).thenReturn(new ArrayList<>(listOf( + when(groupMemberService.getActiveGroupMemberListByUserId(1L)).thenReturn(new ArrayList<>(ListUtil.of( ImGroupMemberDO.builder().groupId(10L).userId(1L) .status(CommonStatusEnum.ENABLE.getStatus()).build(), ImGroupMemberDO.builder().groupId(20L).userId(1L) @@ -1129,11 +1131,11 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest { ))); // 最近退群成员(最近 30 天内) when(groupMemberService.getQuitGroupMemberListByUserId(eq(1L), any(LocalDateTime.class))) - .thenReturn(new ArrayList<>(listOf( + .thenReturn(new ArrayList<>(ListUtil.of( ImGroupMemberDO.builder().groupId(30L).userId(1L) .status(CommonStatusEnum.DISABLE.getStatus()).build() ))); - List groups = listOf( + List groups = ListUtil.of( 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 360bff4..5ccce80 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 @@ -1,5 +1,7 @@ package cn.iocoder.yudao.module.im.service.message; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.collection.ListUtil; import cn.hutool.extra.spring.SpringUtil; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.exception.ServiceException; @@ -34,7 +36,6 @@ 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.*; @@ -97,7 +98,7 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest { when(groupMemberService.validateMemberInGroup(10L, 1L)).thenReturn(member); when(groupMemberService.getActiveGroupMemberUserIdsByGroupId(10L)) - .thenReturn(listOf(1L, 2L, 3L)); + .thenReturn(ListUtil.of(1L, 2L, 3L)); when(groupMessageMapper.insert(any(ImGroupMessageDO.class))).thenAnswer(invocation -> { ImGroupMessageDO msg = invocation.getArgument(0); msg.setId(99L); @@ -169,7 +170,7 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest { .groupId(10L).userId(1L) .status(CommonStatusEnum.ENABLE.getStatus()) .joinTime(joinTime).build(); - when(groupMemberService.getActiveGroupMemberListByUserId(1L)).thenReturn(listOf(member)); + when(groupMemberService.getActiveGroupMemberListByUserId(1L)).thenReturn(ListUtil.of(member)); // 入群前 1 条 + 入群后 1 条 ImGroupMessageDO beforeJoin = ImGroupMessageDO.builder() @@ -178,11 +179,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(listOf(10L)), eq(0L), + when(groupMessageMapper.selectListByMinId(eq(ListUtil.of(10L)), eq(0L), any(LocalDateTime.class), eq(100))) - .thenReturn(listOf(beforeJoin, afterJoin)); + .thenReturn(ListUtil.of(beforeJoin, afterJoin)); when(groupMemberService.getQuitGroupMemberListByUserId(eq(1L), any(LocalDateTime.class))) - .thenReturn(listOf()); + .thenReturn(ListUtil.of()); // 调用 List result = groupMessageService.pullGroupMessageList(1L, 0L, 100); @@ -201,26 +202,26 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest { .groupId(10L).userId(1L) .status(CommonStatusEnum.ENABLE.getStatus()) .joinTime(joinTime).build(); - when(groupMemberService.getActiveGroupMemberListByUserId(1L)).thenReturn(listOf(member)); + when(groupMemberService.getActiveGroupMemberListByUserId(1L)).thenReturn(ListUtil.of(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(listOf(2L, 3L)) + .receiverUserIds(ListUtil.of(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(listOf(10L)), eq(0L), + when(groupMessageMapper.selectListByMinId(eq(ListUtil.of(10L)), eq(0L), any(LocalDateTime.class), eq(2))) - .thenReturn(listOf(beforeJoin, directedMsg)); - when(groupMessageMapper.selectListByMinId(eq(listOf(10L)), eq(2L), + .thenReturn(ListUtil.of(beforeJoin, directedMsg)); + when(groupMessageMapper.selectListByMinId(eq(ListUtil.of(10L)), eq(2L), any(LocalDateTime.class), eq(2))) - .thenReturn(listOf(visibleMsg)); + .thenReturn(ListUtil.of(visibleMsg)); when(groupMemberService.getQuitGroupMemberListByUserId(eq(1L), any(LocalDateTime.class))) - .thenReturn(listOf()); + .thenReturn(ListUtil.of()); // 调用 List result = groupMessageService.pullGroupMessageList(1L, 0L, 2); @@ -228,9 +229,9 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest { // 断言:仅返回第二批的可见消息;两批 selectListByMinId 各被调用一次 assertEquals(1, result.size()); assertEquals(3L, result.get(0).getId()); - verify(groupMessageMapper).selectListByMinId(eq(listOf(10L)), eq(0L), + verify(groupMessageMapper).selectListByMinId(eq(ListUtil.of(10L)), eq(0L), any(LocalDateTime.class), eq(2)); - verify(groupMessageMapper).selectListByMinId(eq(listOf(10L)), eq(2L), + verify(groupMessageMapper).selectListByMinId(eq(ListUtil.of(10L)), eq(2L), any(LocalDateTime.class), eq(2)); } @@ -242,14 +243,14 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest { .groupId(10L).userId(1L) .status(CommonStatusEnum.ENABLE.getStatus()) .joinTime(now.minusDays(10)).build(); - when(groupMemberService.getActiveGroupMemberListByUserId(1L)).thenReturn(listOf(activeMember)); + when(groupMemberService.getActiveGroupMemberListByUserId(1L)).thenReturn(ListUtil.of(activeMember)); ImGroupMessageDO activeMsg = ImGroupMessageDO.builder() .id(5L).groupId(10L).senderId(2L) .sendTime(now.minusHours(2)).build(); - when(groupMessageMapper.selectListByMinId(eq(listOf(10L)), eq(0L), + when(groupMessageMapper.selectListByMinId(eq(ListUtil.of(10L)), eq(0L), any(LocalDateTime.class), eq(100))) - .thenReturn(listOf(activeMsg)); + .thenReturn(ListUtil.of(activeMsg)); // 已退群:退群时间在窗口内(minId=0,minQuitTime 直接用 minSendTime) LocalDateTime quitTime = now.minusDays(3); @@ -259,14 +260,14 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest { .joinTime(now.minusDays(20)) .quitTime(quitTime).build(); when(groupMemberService.getQuitGroupMemberListByUserId(eq(1L), any(LocalDateTime.class))) - .thenReturn(listOf(quitMember)); + .thenReturn(ListUtil.of(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(listOf(quitGroupMsg)); + .thenReturn(ListUtil.of(quitGroupMsg)); // 调用 List result = groupMessageService.pullGroupMessageList(1L, 0L, 100); @@ -281,14 +282,14 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest { public void testPullMessages_quitMemberFilteredByBoundarySendTime() { // 准备:minId > 0,边界消息 sendTime 晚于窗口起点,应当被用作 minQuitTime LocalDateTime now = LocalDateTime.now(); - when(groupMemberService.getActiveGroupMemberListByUserId(1L)).thenReturn(listOf()); + when(groupMemberService.getActiveGroupMemberListByUserId(1L)).thenReturn(ListUtil.of()); 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(listOf()); + .thenReturn(ListUtil.of()); // 调用 List result = groupMessageService.pullGroupMessageList(1L, 8L, 100); @@ -307,24 +308,24 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest { .groupId(10L).userId(1L) .status(CommonStatusEnum.ENABLE.getStatus()) .joinTime(joinTime).build(); - when(groupMemberService.getActiveGroupMemberListByUserId(1L)).thenReturn(listOf(activeMember)); + when(groupMemberService.getActiveGroupMemberListByUserId(1L)).thenReturn(ListUtil.of(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(listOf(2L, 3L)) + .receiverUserIds(ListUtil.of(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(listOf(10L)), eq(8L), + when(groupMessageMapper.selectListByMinId(eq(ListUtil.of(10L)), eq(8L), any(LocalDateTime.class), eq(2))) - .thenReturn(listOf(beforeJoin, directedMsg)); - when(groupMessageMapper.selectListByMinId(eq(listOf(10L)), eq(101L), + .thenReturn(ListUtil.of(beforeJoin, directedMsg)); + when(groupMessageMapper.selectListByMinId(eq(ListUtil.of(10L)), eq(101L), any(LocalDateTime.class), eq(2))) - .thenReturn(listOf(visibleActiveMsg)); + .thenReturn(ListUtil.of(visibleActiveMsg)); LocalDateTime boundarySendTime = now.minusDays(2); ImGroupMessageDO boundary = ImGroupMessageDO.builder() @@ -338,14 +339,14 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest { .joinTime(now.minusDays(10)) .quitTime(quitTime).build(); when(groupMemberService.getQuitGroupMemberListByUserId(1L, boundarySendTime)) - .thenReturn(listOf(quitMember)); + .thenReturn(ListUtil.of(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(listOf(quitGroupMsg)); + .thenReturn(ListUtil.of(quitGroupMsg)); // 调用 List result = groupMessageService.pullGroupMessageList(1L, 8L, 2); @@ -354,9 +355,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(listOf(10L)), eq(8L), + verify(groupMessageMapper).selectListByMinId(eq(ListUtil.of(10L)), eq(8L), any(LocalDateTime.class), eq(2)); - verify(groupMessageMapper).selectListByMinId(eq(listOf(10L)), eq(101L), + verify(groupMessageMapper).selectListByMinId(eq(ListUtil.of(10L)), eq(101L), any(LocalDateTime.class), eq(2)); verify(groupMemberService).getQuitGroupMemberListByUserId(1L, boundarySendTime); verify(groupMessageMapper).selectListByGroupIdAndMinIdAndQuitTimeBefore(eq(20L), eq(8L), @@ -373,22 +374,22 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest { .groupId(10L).userId(1L) .status(CommonStatusEnum.ENABLE.getStatus()) .joinTime(now.minusDays(10)).build(); - when(groupMemberService.getActiveGroupMemberListByUserId(1L)).thenReturn(listOf(member)); + when(groupMemberService.getActiveGroupMemberListByUserId(1L)).thenReturn(ListUtil.of(member)); // 定向接收消息:只给用户 2 和 3 ImGroupMessageDO directedMsg = ImGroupMessageDO.builder() .id(1L).groupId(10L).senderId(5L) - .receiverUserIds(listOf(2L, 3L)) + .receiverUserIds(ListUtil.of(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(listOf(10L)), eq(0L), + when(groupMessageMapper.selectListByMinId(eq(ListUtil.of(10L)), eq(0L), any(LocalDateTime.class), eq(100))) - .thenReturn(listOf(directedMsg, allMsg)); + .thenReturn(ListUtil.of(directedMsg, allMsg)); when(groupMemberService.getQuitGroupMemberListByUserId(eq(1L), any(LocalDateTime.class))) - .thenReturn(listOf()); + .thenReturn(ListUtil.of()); // 调用 List result = groupMessageService.pullGroupMessageList(1L, 0L, 100); @@ -406,24 +407,24 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest { .groupId(10L).userId(1L) .status(CommonStatusEnum.ENABLE.getStatus()) .joinTime(now.minusDays(10)).build(); - when(groupMemberService.getActiveGroupMemberListByUserId(1L)).thenReturn(listOf(member)); + when(groupMemberService.getActiveGroupMemberListByUserId(1L)).thenReturn(ListUtil.of(member)); ImGroupMessageDO atMsg = ImGroupMessageDO.builder() .id(1L).groupId(10L).senderId(2L) - .atUserIds(listOf(1L, 3L)) + .atUserIds(ListUtil.of(1L, 3L)) .sendTime(now.minusHours(1)).build(); - when(groupMessageMapper.selectListByMinId(eq(listOf(10L)), eq(0L), + when(groupMessageMapper.selectListByMinId(eq(ListUtil.of(10L)), eq(0L), any(LocalDateTime.class), eq(100))) - .thenReturn(listOf(atMsg)); + .thenReturn(ListUtil.of(atMsg)); when(groupMemberService.getQuitGroupMemberListByUserId(eq(1L), any(LocalDateTime.class))) - .thenReturn(listOf()); + .thenReturn(ListUtil.of()); // 调用 List result = groupMessageService.pullGroupMessageList(1L, 0L, 100); // 断言:@ 字段正确返回 assertEquals(1, result.size()); - assertEquals(listOf(1L, 3L), result.get(0).getAtUserIds()); + assertEquals(ListUtil.of(1L, 3L), result.get(0).getAtUserIds()); } @Test @@ -433,15 +434,15 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest { .groupId(10L).userId(1L) .status(CommonStatusEnum.ENABLE.getStatus()) .joinTime(now.minusDays(10)).build(); - when(groupMemberService.getActiveGroupMemberListByUserId(1L)).thenReturn(listOf(activeMember)); + when(groupMemberService.getActiveGroupMemberListByUserId(1L)).thenReturn(ListUtil.of(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(listOf(10L)), eq(0L), + when(groupMessageMapper.selectListByMinId(eq(ListUtil.of(10L)), eq(0L), any(LocalDateTime.class), eq(2))) - .thenReturn(listOf(activeMsg1, activeMsg2)); + .thenReturn(ListUtil.of(activeMsg1, activeMsg2)); LocalDateTime quitTime = now.minusDays(1); ImGroupMemberDO quitMember = ImGroupMemberDO.builder() @@ -450,7 +451,7 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest { .joinTime(now.minusDays(20)) .quitTime(quitTime).build(); when(groupMemberService.getQuitGroupMemberListByUserId(eq(1L), any(LocalDateTime.class))) - .thenReturn(listOf(quitMember)); + .thenReturn(ListUtil.of(quitMember)); ImGroupMessageDO quit1 = ImGroupMessageDO.builder() .id(150L).groupId(20L).senderId(99L).sendTime(now.minusDays(5)).build(); @@ -458,7 +459,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(listOf(quit1, quit2)); + .thenReturn(ListUtil.of(quit1, quit2)); when(groupMessageReadRedisDAO.getReadMaxMessageId(anyLong(), eq(1L))).thenReturn(null); @@ -476,7 +477,7 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest { .groupId(10L).userId(1L) .status(CommonStatusEnum.ENABLE.getStatus()) .joinTime(now.minusDays(10)).build(); - when(groupMemberService.getActiveGroupMemberListByUserId(1L)).thenReturn(listOf(member)); + when(groupMemberService.getActiveGroupMemberListByUserId(1L)).thenReturn(ListUtil.of(member)); ImGroupMessageDO low = ImGroupMessageDO.builder() .id(5L).groupId(10L).senderId(2L).status(ImMessageStatusEnum.UNREAD.getStatus()) @@ -484,11 +485,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(listOf(10L)), eq(0L), + when(groupMessageMapper.selectListByMinId(eq(ListUtil.of(10L)), eq(0L), any(LocalDateTime.class), eq(100))) - .thenReturn(listOf(low, high)); + .thenReturn(ListUtil.of(low, high)); when(groupMemberService.getQuitGroupMemberListByUserId(eq(1L), any(LocalDateTime.class))) - .thenReturn(listOf()); + .thenReturn(ListUtil.of()); when(groupMessageReadRedisDAO.getReadMaxMessageId(10L, 1L)).thenReturn(7L); @@ -506,18 +507,18 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest { .groupId(10L).userId(1L) .status(CommonStatusEnum.ENABLE.getStatus()) .joinTime(now.minusDays(10)).build(); - when(groupMemberService.getActiveGroupMemberListByUserId(1L)).thenReturn(listOf(member)); + when(groupMemberService.getActiveGroupMemberListByUserId(1L)).thenReturn(ListUtil.of(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(listOf(10L)), eq(0L), + when(groupMessageMapper.selectListByMinId(eq(ListUtil.of(10L)), eq(0L), any(LocalDateTime.class), eq(100))) - .thenReturn(listOf(receiptMsg)); + .thenReturn(ListUtil.of(receiptMsg)); when(groupMemberService.getQuitGroupMemberListByUserId(eq(1L), any(LocalDateTime.class))) - .thenReturn(listOf()); + .thenReturn(ListUtil.of()); when(groupMessageReadRedisDAO.getReadMaxMessageId(10L, 1L)).thenReturn(100L); Map positions = new HashMap<>(); @@ -526,7 +527,7 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest { positions.put(3L, 50L); when(groupMessageReadRedisDAO.getReadMaxMessageIdMap(10L)).thenReturn(positions); - List allMembers = listOf( + List allMembers = ListUtil.of( member, ImGroupMemberDO.builder().groupId(10L).userId(2L) .status(CommonStatusEnum.ENABLE.getStatus()) @@ -565,7 +566,7 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest { when(groupMessageMapper.insert(any(ImGroupMessageDO.class))).thenReturn(1); when(groupMemberService.getActiveGroupMemberUserIdsByGroupId(10L)) - .thenReturn(listOf(1L, 2L)); + .thenReturn(ListUtil.of(1L, 2L)); // 调用 ImGroupMessageDO result = groupMessageService.recallGroupMessage(1L, 50L); @@ -670,7 +671,7 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest { // 用户 2: 正常,入群在消息之前 // 用户 3: 正常,但入群在消息之后 → 不可见 // 用户 5: 发送者,不计入回执 - List allMembers = listOf( + List allMembers = ListUtil.of( currentMember, ImGroupMemberDO.builder().groupId(10L).userId(1L) .status(CommonStatusEnum.ENABLE.getStatus()) @@ -740,7 +741,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(listOf(1L)); + when(groupMemberService.getActiveGroupMemberUserIdsByGroupId(10L)).thenReturn(ListUtil.of(1L)); when(groupMessageMapper.insert(any(ImGroupMessageDO.class))).thenReturn(1); // 调用 @@ -822,7 +823,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(listOf()); + when(groupMessageMapper.selectListByGroupIdAndPendingReceipt(10L, 5L, 100L)).thenReturn(ListUtil.of()); // 调用 groupMessageService.readGroupMessages(1L, 10L, 100L); @@ -876,7 +877,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(listOf(1L, 2L)); + when(groupMemberService.getActiveGroupMemberUserIdsByGroupId(10L)).thenReturn(ListUtil.of(1L, 2L)); ImGroupMessageDO result = groupMessageService.sendGroupMessage(1L, reqVO); @@ -933,8 +934,8 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest { .receiptStatus(ImGroupMessageReceiptStatusEnum.PENDING.getStatus()) .status(ImMessageStatusEnum.UNREAD.getStatus()).build(); when(groupMessageMapper.selectListByGroupIdAndPendingReceipt(10L, 0L, 100L)) - .thenReturn(listOf(pending)); - List activeMembers = listOf( + .thenReturn(ListUtil.of(pending)); + List activeMembers = ListUtil.of( ImGroupMemberDO.builder().groupId(10L).userId(5L) .status(CommonStatusEnum.ENABLE.getStatus()) .joinTime(LocalDateTime.now().minusDays(10)).build(), @@ -972,8 +973,8 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest { .receiptStatus(ImGroupMessageReceiptStatusEnum.PENDING.getStatus()) .status(ImMessageStatusEnum.UNREAD.getStatus()).build(); when(groupMessageMapper.selectListByGroupIdAndPendingReceipt(10L, 0L, 100L)) - .thenReturn(listOf(pending)); - List activeMembers = listOf( + .thenReturn(ListUtil.of(pending)); + List activeMembers = ListUtil.of( ImGroupMemberDO.builder().groupId(10L).userId(5L) .status(CommonStatusEnum.ENABLE.getStatus()) .joinTime(LocalDateTime.now().minusDays(10)).build(), @@ -1007,7 +1008,7 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest { .setGroupId(10L).setType(ImMessageTypeEnum.RECALL.getType()) .setContent("{\"messageId\":1}"); when(groupMemberService.getActiveGroupMemberUserIdsByGroupId(10L)) - .thenReturn(listOf(1L, 2L, 3L, 4L)); + .thenReturn(ListUtil.of(1L, 2L, 3L, 4L)); groupMessageService.sendGroupMessage(1L, dto); @@ -1024,9 +1025,9 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest { ImGroupMessageSendDTO dto = new ImGroupMessageSendDTO() .setGroupId(10L).setType(ImMessageTypeEnum.RECALL.getType()) .setContent("{\"messageId\":1}") - .setReceiverUserIds(listOf(2L, 3L)); + .setReceiverUserIds(ListUtil.of(2L, 3L)); when(groupMemberService.getActiveGroupMemberUserIdsByGroupId(10L)) - .thenReturn(listOf(1L, 2L, 3L, 4L)); + .thenReturn(ListUtil.of(1L, 2L, 3L, 4L)); groupMessageService.sendGroupMessage(1L, dto); @@ -1043,9 +1044,9 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest { ImGroupMessageSendDTO dto = new ImGroupMessageSendDTO() .setGroupId(10L).setType(ImMessageTypeEnum.RECALL.getType()) .setContent("{\"messageId\":1}") - .setReceiverUserIds(listOf(2L, 3L)); + .setReceiverUserIds(ListUtil.of(2L, 3L)); when(groupMemberService.getActiveGroupMemberUserIdsByGroupId(10L)) - .thenReturn(listOf(1L, 2L, 3L, 4L)); + .thenReturn(ListUtil.of(1L, 2L, 3L, 4L)); groupMessageService.sendGroupMessage(99L, dto); @@ -1062,7 +1063,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(listOf(1L)); + when(groupMemberService.getActiveGroupMemberUserIdsByGroupId(10L)).thenReturn(ListUtil.of(1L)); groupMessageService.sendGroupMessage(1L, dto); @@ -1086,7 +1087,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(listOf(1L)); + when(groupMemberService.getActiveGroupMemberUserIdsByGroupId(10L)).thenReturn(ListUtil.of(1L)); groupMessageService.sendGroupMessage(1L, dto); @@ -1100,7 +1101,7 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest { // 准备:persistent=false 类型(RECEIPT 回执)→ 不入库,仅推送 ImGroupMessageSendDTO dto = new ImGroupMessageSendDTO() .setGroupId(10L).setType(ImMessageTypeEnum.RECEIPT.getType()); - when(groupMemberService.getActiveGroupMemberUserIdsByGroupId(10L)).thenReturn(listOf(1L, 2L)); + when(groupMemberService.getActiveGroupMemberUserIdsByGroupId(10L)).thenReturn(ListUtil.of(1L, 2L)); groupMessageService.sendGroupMessage(1L, dto); @@ -1111,7 +1112,7 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest { @Test public void testSendGroupMessage_threeArg_explicitTargetsBypassActiveMembers() { // 准备:调用方传入显式 targets(解散场景成员已被批量 DISABLE,必须按移除前快照推送) - Set targets = setOf(1L, 2L, 3L); + Set targets = CollUtil.newHashSet(1L, 2L, 3L); ImGroupMessageSendDTO dto = new ImGroupMessageSendDTO() .setGroupId(10L).setType(ImMessageTypeEnum.GROUP_DISSOLVE.getType()).setContent("{}"); @@ -1139,7 +1140,7 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest { reqVO.setMaxId(100L); reqVO.setLimit(20); - List mockList = listOf( + List mockList = ListUtil.of( ImGroupMessageDO.builder().id(99L).groupId(10L).senderId(2L) .sendTime(joinTime.plusMinutes(1)).build() ); @@ -1182,9 +1183,9 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest { @Test public void testDeleteReadMaxMessageIds_delegatesToRedis() { - groupMessageService.deleteReadMaxMessageIds(10L, listOf(1L, 2L)); + groupMessageService.deleteReadMaxMessageIds(10L, ListUtil.of(1L, 2L)); - verify(groupMessageReadRedisDAO).deleteReadMaxMessageIds(10L, listOf(1L, 2L)); + verify(groupMessageReadRedisDAO).deleteReadMaxMessageIds(10L, ListUtil.of(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 f710579..dd64cac 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 @@ -1,5 +1,6 @@ package cn.iocoder.yudao.module.im.service.message; +import cn.hutool.core.collection.ListUtil; import cn.iocoder.yudao.framework.common.exception.ServiceException; import cn.iocoder.yudao.framework.test.core.ut.BaseMockitoUnitTest; import cn.iocoder.yudao.module.im.controller.admin.message.vo.privates.ImPrivateMessageListReqVO; @@ -25,7 +26,6 @@ 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.*; @@ -136,7 +136,7 @@ public class ImPrivateMessageServiceImplTest extends BaseMockitoUnitTest { @Test public void testPullMessages_success() { // 准备 - List mockMessages = listOf( + List mockMessages = ListUtil.of( ImPrivateMessageDO.builder().id(1L).senderId(1L).receiverId(2L).build(), ImPrivateMessageDO.builder().id(2L).senderId(2L).receiverId(1L).build() ); @@ -416,7 +416,7 @@ public class ImPrivateMessageServiceImplTest extends BaseMockitoUnitTest { reqVO.setReceiverId(2L); reqVO.setMaxId(100L); reqVO.setLimit(20); - List mockList = listOf( + List mockList = ListUtil.of( 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 e4301c3..9173b87 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 @@ -1,5 +1,8 @@ package cn.iocoder.yudao.module.im.service.rtc; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.collection.ListUtil; +import cn.hutool.core.map.MapUtil; import cn.iocoder.yudao.framework.common.exception.ServiceException; import cn.iocoder.yudao.framework.test.core.ut.BaseMockitoUnitTest; import cn.iocoder.yudao.module.im.controller.admin.rtc.vo.ImRtcCallCreateReqVO; @@ -37,7 +40,6 @@ import java.util.concurrent.Callable; 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.*; @@ -104,8 +106,8 @@ public class ImRtcCallServiceImplTest extends BaseMockitoUnitTest { // 准备:候选非空但每个 CAS 都失败(并发已变状态) ImRtcParticipantDO p = buildParticipant(10L, "r1", 100L, ImRtcParticipantStatusEnum.INVITING); when(rtcParticipantMapper.selectListByStatusAndInviteTimeBefore(any(), any())) - .thenReturn(listOf(p)); - when(adminUserApi.getUserMap(anySet())).thenReturn(mapOf(100L, buildUser(100L))); + .thenReturn(ListUtil.of(p)); + when(adminUserApi.getUserMap(anySet())).thenReturn(MapUtil.of(100L, buildUser(100L))); when(rtcParticipantMapper.updateByIdAndStatus(eq(10L), eq(ImRtcParticipantStatusEnum.INVITING.getStatus()), any())) .thenReturn(0); @@ -123,15 +125,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(listOf(p)); - when(adminUserApi.getUserMap(anySet())).thenReturn(mapOf(100L, buildUser(100L))); + .thenReturn(ListUtil.of(p)); + when(adminUserApi.getUserMap(anySet())).thenReturn(MapUtil.of(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(listOf(200L, 201L)); + when(groupMemberService.getActiveGroupMemberUserIdsByGroupId(999L)).thenReturn(ListUtil.of(200L, 201L)); // 房内 2 个 JOINED + 1 个 INVITING → shouldCloseGroupRoom 返 false - when(rtcParticipantMapper.selectListByRoom("r1")).thenReturn(listOf( + when(rtcParticipantMapper.selectListByRoom("r1")).thenReturn(ListUtil.of( buildParticipant(20L, "r1", 200L, ImRtcParticipantStatusEnum.JOINED), buildParticipant(21L, "r1", 201L, ImRtcParticipantStatusEnum.JOINED), buildParticipant(22L, "r1", 202L, ImRtcParticipantStatusEnum.INVITING) @@ -151,8 +153,8 @@ public class ImRtcCallServiceImplTest extends BaseMockitoUnitTest { // 准备:CAS 成功后通话主表缺失(异常兜底场景) ImRtcParticipantDO p = buildParticipant(10L, "r1", 100L, ImRtcParticipantStatusEnum.INVITING); when(rtcParticipantMapper.selectListByStatusAndInviteTimeBefore(any(), any())) - .thenReturn(listOf(p)); - when(adminUserApi.getUserMap(anySet())).thenReturn(mapOf(100L, buildUser(100L))); + .thenReturn(ListUtil.of(p)); + when(adminUserApi.getUserMap(anySet())).thenReturn(MapUtil.of(100L, buildUser(100L))); when(rtcParticipantMapper.updateByIdAndStatus(eq(10L), eq(ImRtcParticipantStatusEnum.INVITING.getStatus()), any())) .thenReturn(1); when(rtcCallMapper.selectByRoom("r1")).thenReturn(null); @@ -220,15 +222,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(listOf(timeoutTarget)); - when(adminUserApi.getUserMap(anySet())).thenReturn(mapOf(101L, buildUser(101L))); + .thenReturn(ListUtil.of(timeoutTarget)); + when(adminUserApi.getUserMap(anySet())).thenReturn(MapUtil.of(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(listOf(200L, 201L)); + when(groupMemberService.getActiveGroupMemberUserIdsByGroupId(999L)).thenReturn(ListUtil.of(200L, 201L)); // 让 shouldCloseGroupRoom 返 false - when(rtcParticipantMapper.selectListByRoom("r1")).thenReturn(listOf( + when(rtcParticipantMapper.selectListByRoom("r1")).thenReturn(ListUtil.of( buildParticipant(20L, "r1", 200L, ImRtcParticipantStatusEnum.JOINED), buildParticipant(21L, "r1", 201L, ImRtcParticipantStatusEnum.JOINED) )); @@ -254,7 +256,7 @@ public class ImRtcCallServiceImplTest extends BaseMockitoUnitTest { ImRtcCallCreateReqVO reqVO = new ImRtcCallCreateReqVO(); reqVO.setConversationType(ImConversationTypeEnum.GROUP.getType()); reqVO.setGroupId(10L); - reqVO.setInviteeIds(setOf(100L)); + reqVO.setInviteeIds(CollUtil.newHashSet(100L)); ServiceException exception = assertThrows(ServiceException.class, () -> rtcCallService.createCall(100L, reqVO)); @@ -336,14 +338,14 @@ public class ImRtcCallServiceImplTest extends BaseMockitoUnitTest { Callable callable = invocation.getArgument(1); return callable.call(); }); - when(rtcParticipantMapper.selectListByRoom("r1")).thenReturn(listOf( + when(rtcParticipantMapper.selectListByRoom("r1")).thenReturn(ListUtil.of( 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(setOf(203L)); + reqVO.setInviteeIds(CollUtil.newHashSet(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 08a912d..548a63e 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 @@ -1,5 +1,6 @@ package cn.iocoder.yudao.module.im.service.sensitiveword; +import cn.hutool.core.collection.ListUtil; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.exception.ServiceException; import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder; @@ -19,7 +20,6 @@ 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.*; @@ -45,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(listOf( + .thenReturn(ListUtil.of( ImSensitiveWordDO.builder().id(1L).word("badword") .status(CommonStatusEnum.ENABLE.getStatus()).build(), ImSensitiveWordDO.builder().id(2L).word("违禁词") @@ -119,7 +119,7 @@ public class ImSensitiveWordServiceImplTest extends BaseMockitoUnitTest { // 准备:mapper 返回新词库(额外多一个 newbad),并让 createSensitiveWord 走通 when(imSensitiveWordMapper.selectListByStatus(CommonStatusEnum.ENABLE.getStatus())) - .thenReturn(listOf( + .thenReturn(ListUtil.of( ImSensitiveWordDO.builder().id(1L).word("badword") .status(CommonStatusEnum.ENABLE.getStatus()).build(), ImSensitiveWordDO.builder().id(2L).word("违禁词") @@ -179,7 +179,7 @@ public class ImSensitiveWordServiceImplTest extends BaseMockitoUnitTest { when(imSensitiveWordMapper.selectByWord("updatedbad")).thenReturn(null); // 准备:reload 时返回新词库 when(imSensitiveWordMapper.selectListByStatus(CommonStatusEnum.ENABLE.getStatus())) - .thenReturn(listOf( + .thenReturn(ListUtil.of( ImSensitiveWordDO.builder().id(1L).word("updatedbad") .status(CommonStatusEnum.ENABLE.getStatus()).build() )); @@ -212,7 +212,7 @@ public class ImSensitiveWordServiceImplTest extends BaseMockitoUnitTest { .status(CommonStatusEnum.ENABLE.getStatus()).build()); // 准备:reload 时返回剩余词库(只剩中文那条) when(imSensitiveWordMapper.selectListByStatus(CommonStatusEnum.ENABLE.getStatus())) - .thenReturn(listOf( + .thenReturn(ListUtil.of( ImSensitiveWordDO.builder().id(2L).word("违禁词") .status(CommonStatusEnum.ENABLE.getStatus()).build() )); @@ -252,24 +252,24 @@ public class ImSensitiveWordServiceImplTest extends BaseMockitoUnitTest { // 准备:reload 时返回空词库 when(imSensitiveWordMapper.selectListByStatus(CommonStatusEnum.ENABLE.getStatus())) - .thenReturn(listOf()); + .thenReturn(ListUtil.of()); // 调用:批量删除,触发 invalidate - sensitiveWordService.deleteSensitiveWordList(listOf(1L, 2L)); + sensitiveWordService.deleteSensitiveWordList(ListUtil.of(1L, 2L)); // 调用 + 断言:所有词都不再命中 assertDoesNotThrow(() -> sensitiveWordService.validateText("contains badword here")); assertDoesNotThrow(() -> sensitiveWordService.validateText("这条消息里有违禁词哦")); // 断言:deleteByIds 被调用 1 次;selectListByStatus 共 2 次 - verify(imSensitiveWordMapper, times(1)).deleteByIds(listOf(1L, 2L)); + verify(imSensitiveWordMapper, times(1)).deleteByIds(ListUtil.of(1L, 2L)); verify(imSensitiveWordMapper, times(2)).selectListByStatus(CommonStatusEnum.ENABLE.getStatus()); } @Test public void testDeleteSensitiveWordList_emptyIds_skip() { // 调用:空列表直接返回 - sensitiveWordService.deleteSensitiveWordList(listOf()); + sensitiveWordService.deleteSensitiveWordList(ListUtil.of()); // 断言: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 0fe4019..ba11735 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 @@ -1,5 +1,6 @@ package cn.iocoder.yudao.module.im.service.websocket; +import cn.hutool.core.collection.ListUtil; import cn.hutool.extra.spring.SpringUtil; import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; import cn.iocoder.yudao.framework.test.core.ut.BaseMockitoUnitTest; @@ -18,7 +19,6 @@ 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.*; @@ -108,7 +108,7 @@ public class ImWebSocketServiceImplTest extends BaseMockitoUnitTest { dto.setGroupId(10L); dto.setSenderId(1L); - imWebSocketService.sendGroupMessageAsync(listOf(1L, 2L, 3L), dto); + imWebSocketService.sendGroupMessageAsync(ListUtil.of(1L, 2L, 3L), dto); verify(webSocketMessageSender).sendObject( eq(UserTypeEnum.ADMIN.getValue()), eq(1L), eq(ImGroupMessageDTO.TYPE), eq(dto)); @@ -131,7 +131,7 @@ public class ImWebSocketServiceImplTest extends BaseMockitoUnitTest { doThrow(new RuntimeException("user offline")) .when(webSocketMessageSender).sendObject(anyInt(), eq(1L), anyString(), any()); - imWebSocketService.sendGroupMessageAsync(listOf(1L, 2L, 3L), dto); + imWebSocketService.sendGroupMessageAsync(ListUtil.of(1L, 2L, 3L), dto); // 2L 和 3L 也都被推送 verify(webSocketMessageSender).sendObject(anyInt(), eq(2L), anyString(), any()); -- libgit2 0.21.4