Commit 52ddafb14a5d97b65a138e00a91a594c41cee290

Authored by YunaiV
1 parent 04a05af1

style(im): 对齐频道消息 Mapper 单测风格和清理方式

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";