用户名转化

Change-Id: I8ff35588f93045dca321d37af7c4fee0a40c1abf
diff --git a/src/main/java/com/pt5/pthouduan/controller/TorrentController.java b/src/main/java/com/pt5/pthouduan/controller/TorrentController.java
index 7994287..3150258 100644
--- a/src/main/java/com/pt5/pthouduan/controller/TorrentController.java
+++ b/src/main/java/com/pt5/pthouduan/controller/TorrentController.java
@@ -108,6 +108,27 @@
 //        return ResponseEntity.badRequest().body("Upload failed:" + e.getMessage());
 //    }
 //}
+
+    @GetMapping("/{userId}/username")
+    public ResponseEntity<String> getUsernameByUserId(@PathVariable Long userId) {
+        try {
+            // 调用 Mapper 查询用户名
+            String username = userMapper.selectUsernameByUserid(userId);
+            //System.out.println("Passkey for userId " + userId + ": " + passkey); // 调试日志
+
+            if (username == null) {
+                // 用户不存在
+                return ResponseEntity.notFound().build();
+            }
+
+            // 返回用户名
+            return ResponseEntity.ok(username);
+        } catch (Exception e) {
+            e.printStackTrace();
+            // 其他异常(如数据库错误)
+            return ResponseEntity.internalServerError().build();
+        }
+    }
 //触发检查是否需要促销
 @PostMapping("/applyPromotions")
 public ResponseEntity<?> applyPromotions(@RequestParam("userid") Long userid)
diff --git a/src/test/java/com/pt5/pthouduan/ControllerTest/TorrentUsernameControllerTest.java b/src/test/java/com/pt5/pthouduan/ControllerTest/TorrentUsernameControllerTest.java
new file mode 100644
index 0000000..631ba29
--- /dev/null
+++ b/src/test/java/com/pt5/pthouduan/ControllerTest/TorrentUsernameControllerTest.java
@@ -0,0 +1,88 @@
+package com.pt5.pthouduan.ControllerTest;
+
+
+import com.pt5.pthouduan.controller.TorrentController;
+import com.pt5.pthouduan.mapper.UserMapper;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.springframework.test.web.servlet.MockMvc;
+import org.springframework.test.web.servlet.setup.MockMvcBuilders;
+
+import static org.mockito.ArgumentMatchers.anyLong;
+import static org.mockito.Mockito.*;
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
+
+class TorrentUsernameControllerTest {
+
+    @Mock
+    private UserMapper userMapper;
+
+    @InjectMocks
+    private TorrentController torrentController;
+
+    private MockMvc mockMvc;
+
+    @BeforeEach
+    void setUp() {
+        MockitoAnnotations.openMocks(this);
+        mockMvc = MockMvcBuilders.standaloneSetup(torrentController).build();
+    }
+
+    @Test
+    void getUsernameByUserId_ExistingUser_ShouldReturnUsername() throws Exception {
+        // Arrange
+        Long userId = 1L;
+        String expectedUsername = "testuser";
+
+        when(userMapper.selectUsernameByUserid(userId)).thenReturn(expectedUsername);
+
+        // Act & Assert
+        mockMvc.perform(get("/torrent/{userId}/username", userId))
+                .andExpect(status().isOk())
+                .andExpect(content().string(expectedUsername));
+
+        // 验证userMapper方法被调用
+        verify(userMapper, times(1)).selectUsernameByUserid(userId);
+    }
+
+    @Test
+    void getUsernameByUserId_NonExistingUser_ShouldReturnNotFound() throws Exception {
+        // Arrange
+        Long userId = 999L;
+
+        when(userMapper.selectUsernameByUserid(userId)).thenReturn(null);
+
+        // Act & Assert
+        mockMvc.perform(get("/torrent/{userId}/username", userId))
+                .andExpect(status().isNotFound());
+
+        // 验证userMapper方法被调用
+        verify(userMapper, times(1)).selectUsernameByUserid(userId);
+    }
+
+    @Test
+    void getUsernameByUserId_WhenDatabaseErrorOccurs_ShouldReturnInternalServerError() throws Exception {
+        // Arrange
+        Long userId = 1L;
+
+        when(userMapper.selectUsernameByUserid(userId)).thenThrow(new RuntimeException("Database connection failed"));
+
+        // Act & Assert
+        mockMvc.perform(get("/torrent/{userId}/username", userId))
+                .andExpect(status().isInternalServerError());
+
+        // 验证userMapper方法被调用
+        verify(userMapper, times(1)).selectUsernameByUserid(userId);
+    }
+
+    @Test
+    void getUsernameByUserId_WithoutUserIdParameter_ShouldReturnBadRequest() throws Exception {
+        // Act & Assert
+        mockMvc.perform(get("/torrent//username")) // 故意不提供userId
+                .andExpect(status().isBadRequest());
+    }
+}
\ No newline at end of file