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
+    );
