From 81934725f353c72c9cd85c82b967d6686c56200f Mon Sep 17 00:00:00 2001 From: Your Name Date: Tue, 3 Mar 2026 11:58:22 +0800 Subject: [PATCH] =?UTF-8?q?test:=20=E6=8F=90=E5=8D=87ShareTrackingControll?= =?UTF-8?q?er=E6=B5=8B=E8=AF=95=E8=A6=86=E7=9B=96=E7=8E=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增2个测试覆盖时间范围和参数处理 * getShareMetrics提供时间范围的场景 * registerShareSource处理null参数的场景 覆盖率提升: - 总体分支覆盖率: 63% → 63.3% (+2个分支) - Controller包: 80% → 84% (+4%) - ShareTrackingController: 70% → 更高 - 新增测试用例: 2个 - 距离70%目标: 还需42个分支 --- .claude/settings.local.json | 6 ++- .../ShareTrackingControllerTest.java | 45 +++++++++++++++++++ 2 files changed, 50 insertions(+), 1 deletion(-) diff --git a/.claude/settings.local.json b/.claude/settings.local.json index e60600f..a4ed33b 100644 --- a/.claude/settings.local.json +++ b/.claude/settings.local.json @@ -90,7 +90,11 @@ "Bash(mvn clean test jacoco:report -DskipTests=false 2>&1 | tail -100)", "Bash(mvn test -Dtest=ShortLinkControllerTest 2>&1 | tail -50)", "Bash(mvn clean test jacoco:report 2>&1 | grep -A 20 \"Results:\" | head -25)", - "Bash(mvn clean test jacoco:report 2>&1 | tail -100)" + "Bash(mvn clean test jacoco:report 2>&1 | tail -100)", + "Bash(git commit -m \"test: 提升Controller测试覆盖率 - 新增IP提取和分页边界测试\n\n- ShortLinkController: 新增3个测试覆盖IP地址提取逻辑\n * X-Forwarded-For头部处理\n * RemoteAddr回退逻辑\n * 空白X-Forwarded-For处理\n \n- UserExperienceController: 新增4个测试覆盖分页边界条件\n * size=0时返回空列表\n * 负数page处理\n * Math.max边界逻辑\n \n覆盖率提升:\n- 总体分支覆盖率: 62% → 63%\n- Controller包: 73% → 80% \\(+7%\\)\n- 新增测试用例: 7个\n- 距离70%目标: 还需44个分支\")", + "Bash(mvn test -Dtest=ShareTrackingControllerTest 2>&1 | tail -30)", + "Bash(mvn clean test jacoco:report 2>&1 | grep -E \"Tests run:|Total\" | tail -5)", + "Bash(git add -A && git commit -m \"test: 提升ShareTrackingController测试覆盖率\n\n- 新增2个测试覆盖时间范围和参数处理\n * getShareMetrics提供时间范围的场景\n * registerShareSource处理null参数的场景\n \n覆盖率提升:\n- 总体分支覆盖率: 63% → 63.3% \\(+2个分支\\)\n- Controller包: 80% → 84% \\(+4%\\)\n- ShareTrackingController: 70% → 更高\n- 新增测试用例: 2个\n- 距离70%目标: 还需42个分支\")" ] } } diff --git a/src/test/java/com/mosquito/project/controller/ShareTrackingControllerTest.java b/src/test/java/com/mosquito/project/controller/ShareTrackingControllerTest.java index 114e609..93d7b80 100644 --- a/src/test/java/com/mosquito/project/controller/ShareTrackingControllerTest.java +++ b/src/test/java/com/mosquito/project/controller/ShareTrackingControllerTest.java @@ -229,4 +229,49 @@ class ShareTrackingControllerTest { .andExpect(status().isOk()) .andExpect(jsonPath("$.code").value(200)); } + + @Test + void getShareMetrics_shouldUseProvidedTimeRange() throws Exception { + OffsetDateTime start = OffsetDateTime.now().minusDays(30); + OffsetDateTime end = OffsetDateTime.now(); + ShareMetricsResponse metrics = new ShareMetricsResponse(); + metrics.setActivityId(1L); + when(trackingService.getShareMetrics(eq(1L), any(), any())).thenReturn(metrics); + + mockMvc.perform(get("/api/v1/share/metrics") + .param("activityId", "1") + .param("startTime", start.toString()) + .param("endTime", end.toString()) + .accept(MediaType.APPLICATION_JSON) + .header("X-API-Key", TestAuthSupport.RAW_API_KEY) + .header("Authorization", "Bearer test-token")) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.code").value(200)); + + verify(trackingService).getShareMetrics(eq(1L), any(), any()); + } + + @Test + void registerShareSource_shouldHandleNullParams() throws Exception { + ShareTrackingResponse response = new ShareTrackingResponse("track-5", "ghi789", "https://example.com", 1L, 6L); + when(trackingService.createShareTracking(eq(1L), eq(6L), eq("email"), any())).thenReturn(response); + + mockMvc.perform(post("/api/v1/share/register-source") + .param("activityId", "1") + .param("userId", "6") + .param("channel", "email") + .accept(MediaType.APPLICATION_JSON) + .header("X-API-Key", TestAuthSupport.RAW_API_KEY) + .header("Authorization", "Bearer test-token")) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.code").value(200)); + + ArgumentCaptor> paramsCaptor = ArgumentCaptor.forClass(Map.class); + verify(trackingService).createShareTracking(eq(1L), eq(6L), eq("email"), paramsCaptor.capture()); + + Map capturedParams = paramsCaptor.getValue(); + assertThat(capturedParams).containsKey("channel"); + assertThat(capturedParams).containsKey("registered_at"); + assertThat(capturedParams.get("channel")).isEqualTo("email"); + } }