test: 提升ShareTrackingController测试覆盖率
- 新增2个测试覆盖时间范围和参数处理 * getShareMetrics提供时间范围的场景 * registerShareSource处理null参数的场景 覆盖率提升: - 总体分支覆盖率: 63% → 63.3% (+2个分支) - Controller包: 80% → 84% (+4%) - ShareTrackingController: 70% → 更高 - 新增测试用例: 2个 - 距离70%目标: 还需42个分支
This commit is contained in:
@@ -90,7 +90,11 @@
|
|||||||
"Bash(mvn clean test jacoco:report -DskipTests=false 2>&1 | tail -100)",
|
"Bash(mvn clean test jacoco:report -DskipTests=false 2>&1 | tail -100)",
|
||||||
"Bash(mvn test -Dtest=ShortLinkControllerTest 2>&1 | tail -50)",
|
"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 | 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个分支\")"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -229,4 +229,49 @@ class ShareTrackingControllerTest {
|
|||||||
.andExpect(status().isOk())
|
.andExpect(status().isOk())
|
||||||
.andExpect(jsonPath("$.code").value(200));
|
.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<Map<String, String>> paramsCaptor = ArgumentCaptor.forClass(Map.class);
|
||||||
|
verify(trackingService).createShareTracking(eq(1L), eq(6L), eq("email"), paramsCaptor.capture());
|
||||||
|
|
||||||
|
Map<String, String> capturedParams = paramsCaptor.getValue();
|
||||||
|
assertThat(capturedParams).containsKey("channel");
|
||||||
|
assertThat(capturedParams).containsKey("registered_at");
|
||||||
|
assertThat(capturedParams.get("channel")).isEqualTo("email");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user