blob: 7e2f6912d2d38a7531c2bc0d866a30a7c0aff6b3 [file] [log] [blame]
Your Name695f6a62025-05-17 00:58:04 +08001package edu.bjtu.groupone.backend;
2
3import static org.assertj.core.api.Assertions.assertThat;
4import static org.mockito.Mockito.times;
5import static org.mockito.Mockito.verify;
6import static org.mockito.Mockito.when;
7import java.time.LocalDateTime;
8
9import ch.qos.logback.classic.Logger;
10import org.slf4j.LoggerFactory;
11import edu.bjtu.groupone.backend.mapper.UserMapper;
12import edu.bjtu.groupone.backend.mapper.InviteCodeMapper;
13import edu.bjtu.groupone.backend.model.User;
14import edu.bjtu.groupone.backend.model.InviteCode;
15import edu.bjtu.groupone.backend.service.impl.UserServImpl;
16import edu.bjtu.groupone.backend.service.impl.InviteCodeServiceImpl;
17import org.junit.jupiter.api.Test;
18import org.junit.jupiter.api.extension.ExtendWith;
19import org.mockito.InjectMocks;
20import org.mockito.Mock;
21import org.mockito.junit.jupiter.MockitoExtension;
22
23@ExtendWith(MockitoExtension.class)
24public class UserControllerTest {
25
26 // 初始化 Logger,避免空指针
27 private static final Logger log = (Logger) LoggerFactory.getLogger(UserControllerTest.class);
28
29 @Mock
30 private UserMapper userMapper;
31
32 @Mock
33 private InviteCodeMapper inviteCodeMapper;
34
35 @InjectMocks
36 private UserServImpl userService;
37
38 @InjectMocks
39 private InviteCodeServiceImpl inviteCodeService;
40
41 @Test
42 public void testLogin() {
43 User loginUser = new User();
44 loginUser.setIdentificationNumber(123456);
45 loginUser.setPassword("password123");
46 User expected = new User();
47 expected.setUsername("expectedUsername");
48
49 // 模拟 mapper 返回
50 when(userMapper.login(loginUser)).thenReturn(expected);
51
52 // 调用 service 并断言
53 User result = userService.login(loginUser);
54 assertThat(result).isNotNull();
55 assertThat(result.getUsername()).isEqualTo("expectedUsername");
56 verify(userMapper, times(1)).login(loginUser);
57 }
58
59 @Test
60 public void testUseInviteCode() {
61 String inviteCode = "TESTCODE";
62
63 // 构造一个有效的 InviteCode,注意设置 expiryTime
64 InviteCode dummy = new InviteCode();
65 dummy.setCode(inviteCode);
66 dummy.setRemainingUses(1);
67 // 设置有效期在未来,避免调用 expiryTime.isBefore(...)
68 dummy.setExpiryTime(LocalDateTime.now().plusDays(1));
69
70 // Stub 两个 Mapper 方法
71 when(inviteCodeMapper.selectByCode(inviteCode)).thenReturn(dummy);
72 when(inviteCodeMapper.decrementRemainingUses(inviteCode)).thenReturn(1);
73
74 // 调用 service
75 boolean used = inviteCodeService.useInviteCode(inviteCode);
76
77 // 断言和验证
78 assertThat(used).isTrue();
79 verify(inviteCodeMapper, times(1)).selectByCode(inviteCode);
80 verify(inviteCodeMapper, times(1)).decrementRemainingUses(inviteCode);
81 }
82}