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 | 4 | import cn.iocoder.yudao.module.im.dal.dataobject.message.ImChannelMessageDO; |
| 5 | 5 | import jakarta.annotation.Resource; |
| 6 | 6 | import org.junit.jupiter.api.Test; |
| 7 | -import org.springframework.test.context.jdbc.Sql; | |
| 8 | 7 | |
| 9 | 8 | import java.time.LocalDateTime; |
| 9 | +import java.util.Arrays; | |
| 10 | +import java.util.Collections; | |
| 10 | 11 | import java.util.List; |
| 11 | 12 | |
| 13 | +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList; | |
| 12 | 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 | 21 | public class ImChannelMessageMapperTest extends BaseDbUnitTest { |
| 16 | 22 | |
| 17 | 23 | @Resource |
| 18 | - private ImChannelMessageMapper mapper; | |
| 24 | + private ImChannelMessageMapper channelMessageMapper; | |
| 19 | 25 | |
| 20 | 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 | 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 | 61 | ImChannelMessageDO message = ImChannelMessageDO.builder() |
| 48 | 62 | .channelId(10L) |
| 49 | 63 | .materialId(20L) |
| ... | ... | @@ -52,7 +66,7 @@ public class ImChannelMessageMapperTest extends BaseDbUnitTest { |
| 52 | 66 | .receiverUserIds(receiverUserIds) |
| 53 | 67 | .sendTime(LocalDateTime.now()) |
| 54 | 68 | .build(); |
| 55 | - mapper.insert(message); | |
| 69 | + channelMessageMapper.insert(message); | |
| 56 | 70 | return message; |
| 57 | 71 | } |
| 58 | 72 | ... | ... |