Your Name | 695f6a6 | 2025-05-17 00:58:04 +0800 | [diff] [blame^] | 1 | package edu.bjtu.groupone.backend; |
| 2 | |
| 3 | import static org.assertj.core.api.Assertions.assertThat; |
| 4 | import static org.mockito.Mockito.times; |
| 5 | import static org.mockito.Mockito.verify; |
| 6 | import static org.mockito.Mockito.when; |
| 7 | import java.time.LocalDateTime; |
| 8 | |
| 9 | import ch.qos.logback.classic.Logger; |
| 10 | import org.slf4j.LoggerFactory; |
| 11 | import edu.bjtu.groupone.backend.mapper.UserMapper; |
| 12 | import edu.bjtu.groupone.backend.mapper.InviteCodeMapper; |
| 13 | import edu.bjtu.groupone.backend.model.User; |
| 14 | import edu.bjtu.groupone.backend.model.InviteCode; |
| 15 | import edu.bjtu.groupone.backend.service.impl.UserServImpl; |
| 16 | import edu.bjtu.groupone.backend.service.impl.InviteCodeServiceImpl; |
| 17 | import org.junit.jupiter.api.Test; |
| 18 | import org.junit.jupiter.api.extension.ExtendWith; |
| 19 | import org.mockito.InjectMocks; |
| 20 | import org.mockito.Mock; |
| 21 | import org.mockito.junit.jupiter.MockitoExtension; |
| 22 | |
| 23 | @ExtendWith(MockitoExtension.class) |
| 24 | public 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 | } |