等级更新

Change-Id: I1ced9fab16019e2175ce165b4bd16c1bbef3e05b
diff --git a/src/test/java/com/ptp/ptplatform/controller/InviteCodeTest.java b/src/test/java/com/ptp/ptplatform/controller/InviteCodeTest.java
index 9c000f3..0a50c00 100644
--- a/src/test/java/com/ptp/ptplatform/controller/InviteCodeTest.java
+++ b/src/test/java/com/ptp/ptplatform/controller/InviteCodeTest.java
@@ -1,10 +1,9 @@
 package com.ptp.ptplatform.controller;
 
 import com.ptp.ptplatform.entity.INVITE_CODE;
-import com.ptp.ptplatform.entity.USER;
+import com.ptp.ptplatform.entity.User;
 import com.ptp.ptplatform.mapper.InviteCodeMapper;
 import com.ptp.ptplatform.mapper.UserMapper;
-import com.ptp.ptplatform.utils.JwtUtils;
 import com.ptp.ptplatform.utils.Result;
 import jakarta.servlet.http.HttpServletRequest;
 import org.junit.jupiter.api.BeforeEach;
@@ -12,7 +11,6 @@
 import org.mockito.InjectMocks;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
-import org.springframework.http.ResponseEntity;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -37,14 +35,14 @@
     @InjectMocks
     private InviteCodeController inviteCodeController;
 
-    private USER testUser;
+    private User testUser;
     private INVITE_CODE testInviteCode;
 
     @BeforeEach
     void setUp() {
         MockitoAnnotations.openMocks(this);
 
-        testUser = new USER();
+        testUser = new User();
         testUser.setUsername("testUser");
         testUser.setMagicPoints(15);
 
diff --git a/src/test/java/com/ptp/ptplatform/controller/UserControllerTest.java b/src/test/java/com/ptp/ptplatform/controller/UserControllerTest.java
index bc8250f..d69c4ea 100644
--- a/src/test/java/com/ptp/ptplatform/controller/UserControllerTest.java
+++ b/src/test/java/com/ptp/ptplatform/controller/UserControllerTest.java
@@ -1,12 +1,12 @@
 package com.ptp.ptplatform.controller;
 
 import com.ptp.ptplatform.entity.INVITE_CODE;
-import com.ptp.ptplatform.entity.USER;
+import com.ptp.ptplatform.entity.User;
 import com.ptp.ptplatform.mapper.InviteCodeMapper;
 import com.ptp.ptplatform.mapper.UserMapper;
+import com.ptp.ptplatform.service.UserLevelService;
 import com.ptp.ptplatform.utils.JwtUtils;
 import com.ptp.ptplatform.utils.Result;
-import com.ptp.ptplatform.utils.SizeCalculation;
 import io.jsonwebtoken.Claims;
 import jakarta.servlet.http.HttpServletRequest;
 import org.junit.jupiter.api.BeforeEach;
@@ -16,13 +16,18 @@
 import org.mockito.MockedStatic;
 import org.mockito.MockitoAnnotations;
 import org.springframework.mock.web.MockHttpServletRequest;
+import org.springframework.test.web.servlet.MockMvc;
+import org.springframework.test.web.servlet.setup.MockMvcBuilders;
 
 import java.util.*;
 
 import static org.junit.jupiter.api.Assertions.*;
 import static org.mockito.Mockito.*;
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
 
 class UserControllerTest {
+    private MockMvc mockMvc;
 
     @Mock
     private UserMapper userMapper;
@@ -33,17 +38,20 @@
     @Mock
     private HttpServletRequest request;
 
+    @Mock
+    private UserLevelService userLevelService;
+
     @InjectMocks
     private UserController userController;
 
-    private USER testUser;
+    private User testUser;
     private INVITE_CODE testInviteCode;
 
     @BeforeEach
     void setUp() {
         MockitoAnnotations.openMocks(this);
 
-        testUser = new USER();
+        testUser = new User();
         testUser.setUsername("testUser");
         testUser.setPassword("testPassword");
         testUser.setLastLogin(new Date());
@@ -53,6 +61,9 @@
         testInviteCode = new INVITE_CODE("testUser");
         testInviteCode.setCode("TESTCODE123");
         testInviteCode.setIsUsed(false);
+        mockMvc = MockMvcBuilders
+                .standaloneSetup(userController)
+                .build();
     }
 
     @Test
@@ -129,7 +140,7 @@
         // Assert
         assertTrue(result.isSuccess());
         assertEquals("新建用户成功", result.getMessage());
-        verify(userMapper, times(1)).insertUser(any(USER.class));
+        verify(userMapper, times(1)).insertUser(any(User.class));
         verify(inviteCodeMapper, times(1)).updateCodeUser("VALIDCODE");
     }
 
@@ -270,7 +281,7 @@
             when(userMapper.selectByUsername(testUser.getUsername())).thenReturn(testUser);
 
             // Act
-            USER result = userController.getUserInRequest(request);
+            User result = userController.getUserInRequest(request);
 
             // Assert
             assertEquals(testUser, result);
@@ -288,13 +299,13 @@
             mockedJwtUtils.when(() -> JwtUtils.getClaimByToken(anyString())).thenReturn(mockClaims);
 
             // 模拟用户查询
-            USER mockUser = new USER("testUser", "password", USER.Authority.USER);
+            User mockUser = new User("testUser", "password", User.Authority.USER);
             when(userMapper.selectByUsername("testUser")).thenReturn(mockUser);
 
             // 模拟搜索结果
-            List<USER> mockResults = Arrays.asList(
-                    new USER("user1", "pass1", USER.Authority.USER),
-                    new USER("user2", "pass2", USER.Authority.USER)
+            List<User> mockResults = Arrays.asList(
+                    new User("user1", "pass1", User.Authority.USER),
+                    new User("user2", "pass2", User.Authority.USER)
             );
             when(userMapper.searchUsername("testUser", "zzz")).thenReturn(mockResults);
 
@@ -318,10 +329,10 @@
     @Test
     public void testGetAllUser() {
         // 模拟返回所有用户
-        List<USER> mockUsers = Arrays.asList(
-                new USER("admin", "adminPass", USER.Authority.ADMIN),
-                new USER("user1", "pass1", USER.Authority.USER),
-                new USER("user2", "pass2", USER.Authority.USER)
+        List<User> mockUsers = Arrays.asList(
+                new User("admin", "adminPass", User.Authority.ADMIN),
+                new User("user1", "pass1", User.Authority.USER),
+                new User("user2", "pass2", User.Authority.USER)
         );
         when(userMapper.selectAllUsers()).thenReturn(mockUsers);
 
@@ -344,14 +355,22 @@
         authorityMap.put("changeUsername", "testUser");
         authorityMap.put("authority", "ADMIN");
 
-        USER mockUser = new USER("testUser", "password", USER.Authority.USER);
+        User mockUser = new User("testUser", "password", User.Authority.USER);
         when(userMapper.selectByUsername("testUser")).thenReturn(mockUser);
-        when(userMapper.updateUser(any(USER.class))).thenReturn(1);
+        when(userMapper.updateUser(any(User.class))).thenReturn(1);
 
         Result successResult = userController.changeAuthority(new MockHttpServletRequest(), authorityMap);
         assertEquals(200, successResult.getCode());
         assertEquals("修改用户权限成功", successResult.getMessage());
 
     }
+    @Test
+    void whenPostRefreshLevel_thenServiceCalled_andReturnOk() throws Exception {
+        mockMvc.perform(post("/user/refreshLevel"))
+                .andExpect(status().isOk());
 
-}
\ No newline at end of file
+        // 验证 service 方法被调用
+        verify(userLevelService).refreshAllUserLevels();
+    }
+}
+
diff --git a/src/test/resources/schema.sql b/src/test/resources/schema.sql
index 677d41c..945e692 100644
--- a/src/test/resources/schema.sql
+++ b/src/test/resources/schema.sql
@@ -38,3 +38,16 @@
                                create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP(),
                                CONSTRAINT fk_seed_comments_post FOREIGN KEY (post_id) REFERENCES seed_posts(id) ON DELETE CASCADE
 );
+
+CREATE TABLE IF NOT EXISTS "user" (
+                                      username     VARCHAR(20)  NOT NULL PRIMARY KEY,
+    password     VARCHAR(200) NOT NULL,
+    authority    VARCHAR(10)  NOT NULL,
+    level        INT          NOT NULL DEFAULT 0,
+    registTime   DATE         NOT NULL,
+    lastLogin    DATE         NULL,
+    upload       BIGINT       NOT NULL DEFAULT 0,
+    download     BIGINT       NOT NULL DEFAULT 0,
+    shareRate    DOUBLE       NULL,
+    magicPoints  BIGINT       NOT NULL DEFAULT 0
+    );