From 00f17d2f472f7e713b2d2052f6ea54728aa8cfff Mon Sep 17 00:00:00 2001 From: Peanut Date: Sun, 19 Jul 2026 12:22:25 +0800 Subject: [PATCH] =?UTF-8?q?test(server):=20ShortNovelController=20?= =?UTF-8?q?=E9=9B=86=E6=88=90=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/ShortNovelControllerTest.java | 79 +++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 server/src/test/java/com/emotion/controller/ShortNovelControllerTest.java diff --git a/server/src/test/java/com/emotion/controller/ShortNovelControllerTest.java b/server/src/test/java/com/emotion/controller/ShortNovelControllerTest.java new file mode 100644 index 0000000..d10c58c --- /dev/null +++ b/server/src/test/java/com/emotion/controller/ShortNovelControllerTest.java @@ -0,0 +1,79 @@ +package com.emotion.controller; + +import com.emotion.service.ShortNovelService; +import com.emotion.util.JwtUtil; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.http.MediaType; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.web.servlet.mvc.method.annotation.SseEmitter; + +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +/** + * ShortNovelController 测试 + * + * @author huazhongmin + * @date 2026-07-19 + */ +@SpringBootTest +@AutoConfigureMockMvc(addFilters = false) +public class ShortNovelControllerTest { + + @Autowired + private MockMvc mockMvc; + + @MockBean + private ShortNovelService shortNovelService; + + @MockBean + private JwtUtil jwtUtil; + + @BeforeEach + public void setUp() { + when(jwtUtil.validateToken("test-token")).thenReturn(true); + when(jwtUtil.getUserIdFromToken("test-token")).thenReturn("test-user"); + when(jwtUtil.getUsernameFromToken("test-token")).thenReturn("tester"); + when(jwtUtil.getUserTypeFromToken("test-token")).thenReturn("user"); + } + + @Test + public void testStreamEndpoint() throws Exception { + SseEmitter emitter = new SseEmitter(); + when(shortNovelService.stream(any())).thenReturn(emitter); + + mockMvc.perform(post("/shortNovel/stream") + .header("Authorization", "Bearer test-token") + .contentType(MediaType.APPLICATION_JSON) + .content("{\"query\":\"今天我想当 CEO\"}")) + .andExpect(status().isOk()); + } + + @Test + public void testFollowupEndpoint() throws Exception { + SseEmitter emitter = new SseEmitter(); + when(shortNovelService.followup(any())).thenReturn(emitter); + + mockMvc.perform(post("/shortNovel/followup") + .header("Authorization", "Bearer test-token") + .contentType(MediaType.APPLICATION_JSON) + .content("{\"sessionId\":\"sess-123\",\"action\":\"confirm_outline\",\"payload\":{}}")) + .andExpect(status().isOk()); + } + + @Test + public void testStreamWithBlankQuery() throws Exception { + mockMvc.perform(post("/shortNovel/stream") + .header("Authorization", "Bearer test-token") + .contentType(MediaType.APPLICATION_JSON) + .content("{\"query\":\"\"}")) + .andExpect(status().isBadRequest()); + } +} \ No newline at end of file