实现分区,作品,用户等的增删改查,并完成配套测试文件

Change-Id: Ibdcd6944106b7ffba30c63e4c878d66fa0213303
diff --git a/src/test/java/edu/bjtu/groupone/backend/UserServImplTest.java b/src/test/java/edu/bjtu/groupone/backend/UserServImplTest.java
index ab5a354..e877de8 100644
--- a/src/test/java/edu/bjtu/groupone/backend/UserServImplTest.java
+++ b/src/test/java/edu/bjtu/groupone/backend/UserServImplTest.java
@@ -1,9 +1,8 @@
 package edu.bjtu.groupone.backend;
 
-import edu.bjtu.groupone.backend.mapper.UserMapper;
-import edu.bjtu.groupone.backend.utils.EmailUtil;
-import edu.bjtu.groupone.backend.service.impl.UserServImpl;
 import edu.bjtu.groupone.backend.domain.entity.User;
+import edu.bjtu.groupone.backend.mapper.UserMapper;
+import edu.bjtu.groupone.backend.service.impl.UserServImpl;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
@@ -11,114 +10,81 @@
 import org.mockito.Mock;
 import org.mockito.junit.jupiter.MockitoExtension;
 
-import java.lang.reflect.Field;
+import java.util.Arrays;
+import java.util.List;
 
-import static org.assertj.core.api.Assertions.*;
+import static org.junit.jupiter.api.Assertions.*;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyInt;
 import static org.mockito.Mockito.*;
 
-/**
- * 单元测试 UserServImpl 的核心逻辑:登录、发/验注册码、发/验重置码、重置密码。
- */
 @ExtendWith(MockitoExtension.class)
-public class UserServImplTest {
+class UserServiceImplTest {
 
     @Mock
     private UserMapper userMapper;
 
-    @Mock
-    private EmailUtil emailUtil;
-
     @InjectMocks
     private UserServImpl userService;
 
+    private User testUser;
+
     @BeforeEach
-    void clearCaches() throws Exception {
-        clearMap("emailCodes");
-        clearMap("resetCodes");
+    void setUp() {
+        testUser = new User();
+        testUser.setUserId(1);
+        testUser.setUsername("testuser");
+        testUser.setEmail("test@example.com");
     }
 
     @Test
-    public void login_shouldReturnUser_whenCredentialsMatch() {
-        User in = new User();
-        in.setEmail("a@b.com");
-        in.setPassword("pwd");
-        User out = new User();
-        out.setUserId(1);
-        out.setUsername("alice");
-        out.setEmail("a@b.com");
-        when(userMapper.login(in)).thenReturn(out);
+    void deleteUser_shouldCallMapper() {
+        // 模拟
+        when(userMapper.deleteUser(1)).thenReturn(1);
 
-        User result = userService.login(in);
-        assertThat(result).isSameAs(out);
-        verify(userMapper, times(1)).login(in);
+        // 调用
+        userService.deleteUser(1);
+
+        // 验证
+        verify(userMapper, times(1)).deleteUser(1);
     }
 
     @Test
-    public void sendVerification_and_verifyCode_workCorrectly() throws Exception {
-        String email = "test@x.com";
-        userService.sendVerificationCode(email);
-        verify(emailUtil).sendVerificationEmail(eq(email), anyString());
+    void updateUser_shouldCallMapper() {
+        // 模拟
+        when(userMapper.updateUser(any(User.class))).thenReturn(1);
 
-        String stored = readMap("emailCodes", email);
-        String code = stored.split("\\|")[0];
-        assertThat(userService.verifyCode(email, code)).isTrue();
-        assertThat(userService.verifyCode(email, "000000")).isFalse();
+        // 调用
+        userService.updateUser(testUser);
 
-        // 模拟过期
-        patchExpiry("emailCodes", email, -1000L);
-        assertThat(userService.verifyCode(email, code)).isFalse();
+        // 验证
+        verify(userMapper, times(1)).updateUser(any(User.class));
     }
 
     @Test
-    public void sendResetCode_and_resetPassword_workCorrectly() throws Exception {
-        String email = "reset@x.com";
-        when(userMapper.selectByEmail(email)).thenReturn(null);
-        assertThatThrownBy(() -> userService.sendResetCode(email))
-                .isInstanceOf(IllegalArgumentException.class);
+    void getUserById_shouldReturnUser() {
+        // 模拟
+        when(userMapper.selectUserById(1)).thenReturn(testUser);
 
-        User u = new User();
-        u.setEmail(email);
-        when(userMapper.selectByEmail(email)).thenReturn(u);
+        // 调用
+        User result = userService.getUserById(1);
 
-        userService.sendResetCode(email);
-        verify(emailUtil).sendVerificationEmail(eq(email), anyString());
-        String stored = readMap("resetCodes", email);
-        String code = stored.split("\\|")[0];
-
-        when(userMapper.updatePasswordByEmail(email, "newpwd")).thenReturn(1);
-        assertThat(userService.resetPassword(email, code, "newpwd")).isTrue();
-        assertThat(userService.resetPassword(email, code, "abc")).isFalse();
-
-        userService.sendResetCode(email);
-        String stored2 = readMap("resetCodes", email);
-        String code2 = stored2.split("\\|")[0];
-        patchExpiry("resetCodes", email, -2000L);
-        assertThat(userService.resetPassword(email, code2, "pw")).isFalse();
+        // 验证
+        assertEquals(testUser, result);
+        verify(userMapper, times(1)).selectUserById(1);
     }
 
-    // --- 反射辅助方法 ---
-    @SuppressWarnings("unchecked")
-    private void clearMap(String fieldName) throws Exception {
-        Field f = UserServImpl.class.getDeclaredField(fieldName);
-        f.setAccessible(true);
-        ((java.util.Map<String, String>)f.get(userService)).clear();
-    }
+    @Test
+    void getAllUsers_shouldReturnList() {
+        // 模拟
+        List<User> users = Arrays.asList(testUser, new User());
+        when(userMapper.selectAllUsers()).thenReturn(users);
 
-    @SuppressWarnings("unchecked")
-    private String readMap(String fieldName, String key) throws Exception {
-        Field f = UserServImpl.class.getDeclaredField(fieldName);
-        f.setAccessible(true);
-        return ((java.util.Map<String, String>)f.get(userService)).get(key);
-    }
+        // 调用
+        List<User> result = userService.getAllUsers();
 
-    @SuppressWarnings("unchecked")
-    private void patchExpiry(String fieldName, String key, long offsetMs) throws Exception {
-        String combined = readMap(fieldName, key);
-        String code = combined.split("\\|")[0];
-        long expire = System.currentTimeMillis() + offsetMs;
-        String updated = code + "|" + expire;
-        Field f = UserServImpl.class.getDeclaredField(fieldName);
-        f.setAccessible(true);
-        ((java.util.Map<String, String>)f.get(userService)).put(key, updated);
+        // 验证
+        assertEquals(2, result.size());
+        verify(userMapper, times(1)).selectAllUsers();
     }
-}
+}
\ No newline at end of file