Commit 52ddafb14a5d97b65a138e00a91a594c41cee290
1 parent
04a05af1
style(im): 对齐频道消息 Mapper 单测风格和清理方式
Showing
2 changed files
with
39 additions
and
24 deletions
yudao-module-im/src/test/java/cn/iocoder/yudao/module/im/dal/mysql/message/ImChannelMessageMapperTest.java
| @@ -4,46 +4,60 @@ import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; | @@ -4,46 +4,60 @@ import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; | ||
| 4 | import cn.iocoder.yudao.module.im.dal.dataobject.message.ImChannelMessageDO; | 4 | import cn.iocoder.yudao.module.im.dal.dataobject.message.ImChannelMessageDO; |
| 5 | import jakarta.annotation.Resource; | 5 | import jakarta.annotation.Resource; |
| 6 | import org.junit.jupiter.api.Test; | 6 | import org.junit.jupiter.api.Test; |
| 7 | -import org.springframework.test.context.jdbc.Sql; | ||
| 8 | 7 | ||
| 9 | import java.time.LocalDateTime; | 8 | import java.time.LocalDateTime; |
| 9 | +import java.util.Arrays; | ||
| 10 | +import java.util.Collections; | ||
| 10 | import java.util.List; | 11 | import java.util.List; |
| 11 | 12 | ||
| 13 | +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList; | ||
| 12 | import static org.junit.jupiter.api.Assertions.assertEquals; | 14 | import static org.junit.jupiter.api.Assertions.assertEquals; |
| 13 | 15 | ||
| 14 | -@Sql(statements = "DELETE FROM im_channel_message", executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD) | 16 | +/** |
| 17 | + * {@link ImChannelMessageMapper} 的单元测试 | ||
| 18 | + * | ||
| 19 | + * @author 芋道源码 | ||
| 20 | + */ | ||
| 15 | public class ImChannelMessageMapperTest extends BaseDbUnitTest { | 21 | public class ImChannelMessageMapperTest extends BaseDbUnitTest { |
| 16 | 22 | ||
| 17 | @Resource | 23 | @Resource |
| 18 | - private ImChannelMessageMapper mapper; | 24 | + private ImChannelMessageMapper channelMessageMapper; |
| 19 | 25 | ||
| 20 | @Test | 26 | @Test |
| 21 | - public void testSelectListByUserAndMinId_includesBroadcastAndMatchingRecipients() { | ||
| 22 | - ImChannelMessageDO nullRecipients = insertMessage(null); | ||
| 23 | - ImChannelMessageDO emptyRecipients = insertMessage(List.of()); | ||
| 24 | - ImChannelMessageDO matchingRecipients = insertMessage(List.of(1L, 2L)); | ||
| 25 | - insertMessage(List.of(2L, 11L)); // 用户 1 不应误命中用户 11 | ||
| 26 | - ImChannelMessageDO deleted = insertMessage(List.of(1L)); | ||
| 27 | - mapper.deleteById(deleted.getId()); | ||
| 28 | - | ||
| 29 | - List<ImChannelMessageDO> result = mapper.selectListByUserAndMinId(1L, 0L, 100); | ||
| 30 | - | ||
| 31 | - assertEquals(List.of(nullRecipients.getId(), emptyRecipients.getId(), matchingRecipients.getId()), | ||
| 32 | - result.stream().map(ImChannelMessageDO::getId).toList()); | 27 | + public void testSelectListByUserAndMinId_broadcastAndMatched() { |
| 28 | + // mock 数据:全员(null) | ||
| 29 | + ImChannelMessageDO nullReceiverMessage = createChannelMessage(null); | ||
| 30 | + // mock 数据:全员(空列表) | ||
| 31 | + ImChannelMessageDO emptyReceiverMessage = createChannelMessage(Collections.emptyList()); | ||
| 32 | + // mock 数据:定向,包含用户 1 | ||
| 33 | + ImChannelMessageDO matchedMessage = createChannelMessage(Arrays.asList(1L, 2L)); | ||
| 34 | + // mock 数据:定向,不包含用户 1(用户 1 不应误命中用户 11) | ||
| 35 | + createChannelMessage(Arrays.asList(2L, 11L)); | ||
| 36 | + // mock 数据:已删除 | ||
| 37 | + ImChannelMessageDO deletedMessage = createChannelMessage(Collections.singletonList(1L)); | ||
| 38 | + channelMessageMapper.deleteById(deletedMessage.getId()); | ||
| 39 | + | ||
| 40 | + // 调用 | ||
| 41 | + List<ImChannelMessageDO> list = channelMessageMapper.selectListByUserAndMinId(1L, 0L, 100); | ||
| 42 | + // 断言 | ||
| 43 | + assertEquals(Arrays.asList(nullReceiverMessage.getId(), emptyReceiverMessage.getId(), matchedMessage.getId()), | ||
| 44 | + convertList(list, ImChannelMessageDO::getId)); | ||
| 33 | } | 45 | } |
| 34 | 46 | ||
| 35 | @Test | 47 | @Test |
| 36 | - public void testSelectListByUserAndMinId_respectsCursorAndLimit() { | ||
| 37 | - ImChannelMessageDO cursor = insertMessage(null); | ||
| 38 | - ImChannelMessageDO next = insertMessage(List.of()); | ||
| 39 | - insertMessage(List.of(1L)); | ||
| 40 | - | ||
| 41 | - List<ImChannelMessageDO> result = mapper.selectListByUserAndMinId(1L, cursor.getId(), 1); | 48 | + public void testSelectListByUserAndMinId_cursorAndLimit() { |
| 49 | + // mock 数据 | ||
| 50 | + ImChannelMessageDO cursorMessage = createChannelMessage(null); | ||
| 51 | + ImChannelMessageDO nextMessage = createChannelMessage(Collections.emptyList()); | ||
| 52 | + createChannelMessage(Collections.singletonList(1L)); | ||
| 42 | 53 | ||
| 43 | - assertEquals(List.of(next.getId()), result.stream().map(ImChannelMessageDO::getId).toList()); | 54 | + // 调用:从游标之后拉取 1 条 |
| 55 | + List<ImChannelMessageDO> list = channelMessageMapper.selectListByUserAndMinId(1L, cursorMessage.getId(), 1); | ||
| 56 | + // 断言 | ||
| 57 | + assertEquals(Collections.singletonList(nextMessage.getId()), convertList(list, ImChannelMessageDO::getId)); | ||
| 44 | } | 58 | } |
| 45 | 59 | ||
| 46 | - private ImChannelMessageDO insertMessage(List<Long> receiverUserIds) { | 60 | + private ImChannelMessageDO createChannelMessage(List<Long> receiverUserIds) { |
| 47 | ImChannelMessageDO message = ImChannelMessageDO.builder() | 61 | ImChannelMessageDO message = ImChannelMessageDO.builder() |
| 48 | .channelId(10L) | 62 | .channelId(10L) |
| 49 | .materialId(20L) | 63 | .materialId(20L) |
| @@ -52,7 +66,7 @@ public class ImChannelMessageMapperTest extends BaseDbUnitTest { | @@ -52,7 +66,7 @@ public class ImChannelMessageMapperTest extends BaseDbUnitTest { | ||
| 52 | .receiverUserIds(receiverUserIds) | 66 | .receiverUserIds(receiverUserIds) |
| 53 | .sendTime(LocalDateTime.now()) | 67 | .sendTime(LocalDateTime.now()) |
| 54 | .build(); | 68 | .build(); |
| 55 | - mapper.insert(message); | 69 | + channelMessageMapper.insert(message); |
| 56 | return message; | 70 | return message; |
| 57 | } | 71 | } |
| 58 | 72 |
yudao-module-im/src/test/resources/sql/clean.sql
| 1 | DELETE FROM "im_private_message"; | 1 | DELETE FROM "im_private_message"; |
| 2 | DELETE FROM "im_group_message"; | 2 | DELETE FROM "im_group_message"; |
| 3 | +DELETE FROM "im_channel_message"; | ||
| 3 | DELETE FROM "im_conversation_read"; | 4 | DELETE FROM "im_conversation_read"; |
| 4 | DELETE FROM "im_group"; | 5 | DELETE FROM "im_group"; |
| 5 | DELETE FROM "im_group_member"; | 6 | DELETE FROM "im_group_member"; |