follow+sendMessage
Change-Id: I3e9bbcc89dfc53b9651fd8722da1b445a597629a
diff --git a/src/test/java/com/example/g8backend/service/TorrentServiceTest.java b/src/test/java/com/example/g8backend/service/TorrentServiceTest.java
index 5063501..6ddca58 100644
--- a/src/test/java/com/example/g8backend/service/TorrentServiceTest.java
+++ b/src/test/java/com/example/g8backend/service/TorrentServiceTest.java
@@ -4,6 +4,7 @@
import com.example.g8backend.entity.Torrent;
import com.example.g8backend.mapper.TorrentMapper;
import com.example.g8backend.service.impl.TorrentServiceImpl;
+
import com.example.g8backend.util.TorrentUtil;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
diff --git a/src/test/java/com/example/g8backend/service/UserServiceImplTest.java b/src/test/java/com/example/g8backend/service/UserServiceImplTest.java
new file mode 100644
index 0000000..96cf868
--- /dev/null
+++ b/src/test/java/com/example/g8backend/service/UserServiceImplTest.java
@@ -0,0 +1,149 @@
+package com.example.g8backend.service;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.example.g8backend.entity.Follow;
+import com.example.g8backend.entity.Message;
+import com.example.g8backend.entity.User;
+import com.example.g8backend.mapper.FollowMapper;
+import com.example.g8backend.mapper.MessageMapper;
+import com.example.g8backend.mapper.UserMapper;
+import com.example.g8backend.service.impl.UserServiceImpl;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.junit.jupiter.MockitoExtension;
+import org.springframework.test.util.ReflectionTestUtils;
+
+import java.time.LocalDateTime;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import static org.junit.jupiter.api.Assertions.*;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyLong;
+import static org.mockito.Mockito.*;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+
+@ExtendWith(MockitoExtension.class)
+public class UserServiceImplTest {
+
+ @Mock
+ private UserMapper userMapper;
+
+ @Mock
+ private FollowMapper followMapper;
+
+ @Mock
+ private MessageMapper messageMapper;
+
+ @InjectMocks
+ private UserServiceImpl userService;
+
+ private User user1;
+ private User user2;
+ private Follow follow;
+ private Message message;
+
+ @BeforeEach
+ void setUp() {
+ user1 = new User().setUserId(1L).setUserName("user1");
+ user2 = new User().setUserId(2L).setUserName("user2");
+ ReflectionTestUtils.setField(userService, "baseMapper", userMapper);
+
+ follow = new Follow().setFollowerId(1L).setFollowedId(2L);
+ message = new Message()
+ .setMessageId(100L)
+ .setSenderId(1L)
+ .setReceiverId(2L)
+ .setContent("Hello")
+ .setIsRead(false)
+ .setSentAt(LocalDateTime.now());
+ }
+
+ // ------------------------- 关注功能测试 -------------------------
+ @Test
+ void followUser_Success() {
+ // 模拟Mapper行为
+ when(followMapper.insert(any(Follow.class))).thenReturn(1);
+
+ // 测试关注
+ boolean result = userService.followUser(1L, 2L);
+ assertTrue(result);
+ verify(followMapper, times(1)).insert(any(Follow.class));
+ }
+
+ @Test
+ void followUser_SelfFollow_Fail() {
+ // 尝试关注自己
+ boolean result = userService.followUser(1L, 1L);
+ assertFalse(result);
+ verify(followMapper, never()).insert((Follow) any());
+ }
+
+ @Test
+ void unfollowUser_Success() {
+ // 模拟Mapper行为
+ when(followMapper.deleteByPair(1L, 2L)).thenReturn(1);
+
+ // 测试取消关注
+ boolean result = userService.unfollowUser(1L, 2L);
+ assertTrue(result);
+ verify(followMapper, times(1)).deleteByPair(1L, 2L);
+ }
+
+
+ @Test
+ void getFollowers_EmptyList() {
+ // 模拟无粉丝
+ when(followMapper.selectFollowers(1L)).thenReturn(Collections.emptyList());
+
+ // 测试获取粉丝列表
+ List<User> followers = userService.getFollowers(1L);
+ assertTrue(followers.isEmpty());
+ }
+
+ // ------------------------- 私信功能测试 -------------------------
+ @Test
+ void sendMessage_Success() {
+ // 模拟用户存在
+ when(userMapper.selectById(2L)).thenReturn(user2);
+ when(messageMapper.insert(any(Message.class))).thenAnswer(invocation -> {
+ Message msg = invocation.getArgument(0);
+ msg.setMessageId(100L);
+ return 1;
+ });
+
+ // 测试发送消息
+ Long messageId = userService.sendMessage(1L, 2L, "Hello");
+ assertNotNull(messageId);
+ verify(messageMapper, times(1)).insert(any(Message.class));
+ }
+
+ @Test
+ void sendMessage_ReceiverNotExist_ThrowException() {
+ // 模拟用户不存在
+ when(userMapper.selectById(99L)).thenReturn(null);
+
+ // 测试异常
+ assertThrows(RuntimeException.class, () ->
+ userService.sendMessage(1L, 99L, "Hello")
+ );
+ verify(messageMapper, never()).insert((Message) any());
+ }
+
+ @Test
+ void getMessageHistory_SortedByTime() {
+ // 模拟历史消息
+ Message oldMessage = message.setSentAt(LocalDateTime.now().minusHours(1));
+ when(messageMapper.selectUserMessages(1L))
+ .thenReturn(Arrays.asList(oldMessage, message));
+
+ // 测试按时间倒序排序
+ List<Message> history = userService.getMessageHistory(1L);
+ assertEquals(message.getMessageId(), history.get(0).getMessageId());
+ }
+}
\ No newline at end of file