package com.emotion.service; import com.emotion.dto.response.DashboardStatsResponse; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.ActiveProfiles; import static org.junit.jupiter.api.Assertions.*; /** * 仪表盘服务测试类 * * @author system * @date 2025-10-31 */ @SpringBootTest @ActiveProfiles("local") public class DashboardServiceTest { @Autowired private DashboardService dashboardService; @Test public void testGetDashboardStats() { // 测试获取仪表盘统计数据 DashboardStatsResponse stats = dashboardService.getDashboardStats(); assertNotNull(stats, "仪表盘统计数据不应为空"); assertNotNull(stats.getUserStats(), "用户统计数据不应为空"); assertNotNull(stats.getContentStats(), "内容统计数据不应为空"); assertNotNull(stats.getAiServiceStats(), "AI服务统计数据不应为空"); assertNotNull(stats.getSystemStats(), "系统统计数据不应为空"); assertNotNull(stats.getUpdateTime(), "更新时间不应为空"); // 验证用户统计数据 DashboardStatsResponse.UserStats userStats = stats.getUserStats(); assertTrue(userStats.getTotalUsers() >= 0, "总用户数应大于等于0"); assertTrue(userStats.getTodayNewUsers() >= 0, "今日新增用户数应大于等于0"); assertTrue(userStats.getActiveUsers() >= 0, "活跃用户数应大于等于0"); assertTrue(userStats.getGuestUsers() >= 0, "访客用户数应大于等于0"); // 验证内容统计数据 DashboardStatsResponse.ContentStats contentStats = stats.getContentStats(); assertTrue(contentStats.getTotalConversations() >= 0, "总对话数应大于等于0"); assertTrue(contentStats.getTotalMessages() >= 0, "总消息数应大于等于0"); assertTrue(contentStats.getDiaryPosts() >= 0, "日记帖子数应大于等于0"); assertTrue(contentStats.getCommunityPosts() >= 0, "社区帖子数应大于等于0"); assertTrue(contentStats.getEmotionRecords() >= 0, "情绪记录数应大于等于0"); // 验证AI服务统计数据 DashboardStatsResponse.AiServiceStats aiStats = stats.getAiServiceStats(); assertTrue(aiStats.getTotalApiCalls() >= 0, "总API调用次数应大于等于0"); assertTrue(aiStats.getTodayApiCalls() >= 0, "今日API调用次数应大于等于0"); assertTrue(aiStats.getSuccessfulCalls() >= 0, "成功调用次数应大于等于0"); assertTrue(aiStats.getFailedCalls() >= 0, "失败调用次数应大于等于0"); assertTrue(aiStats.getAvgResponseTime() >= 0, "平均响应时间应大于等于0"); assertTrue(aiStats.getAiConfigCount() >= 0, "AI配置数量应大于等于0"); // 验证系统统计数据 DashboardStatsResponse.SystemStats systemStats = stats.getSystemStats(); assertTrue(systemStats.getAdminCount() >= 0, "管理员数量应大于等于0"); assertTrue(systemStats.getAchievementCount() >= 0, "成就数量应大于等于0"); assertTrue(systemStats.getRewardCount() >= 0, "奖励数量应大于等于0"); assertNotNull(systemStats.getUptime(), "系统运行时间不应为空"); System.out.println("=== 仪表盘统计数据测试结果 ==="); System.out.println("总用户数: " + userStats.getTotalUsers()); System.out.println("今日新增用户: " + userStats.getTodayNewUsers()); System.out.println("活跃用户数: " + userStats.getActiveUsers()); System.out.println("访客用户数: " + userStats.getGuestUsers()); System.out.println("总对话数: " + contentStats.getTotalConversations()); System.out.println("总消息数: " + contentStats.getTotalMessages()); System.out.println("日记帖子数: " + contentStats.getDiaryPosts()); System.out.println("社区帖子数: " + contentStats.getCommunityPosts()); System.out.println("情绪记录数: " + contentStats.getEmotionRecords()); System.out.println("总API调用次数: " + aiStats.getTotalApiCalls()); System.out.println("今日API调用次数: " + aiStats.getTodayApiCalls()); System.out.println("成功调用次数: " + aiStats.getSuccessfulCalls()); System.out.println("失败调用次数: " + aiStats.getFailedCalls()); System.out.println("平均响应时间: " + aiStats.getAvgResponseTime() + "ms"); System.out.println("AI配置数量: " + aiStats.getAiConfigCount()); System.out.println("管理员数量: " + systemStats.getAdminCount()); System.out.println("成就数量: " + systemStats.getAchievementCount()); System.out.println("奖励数量: " + systemStats.getRewardCount()); System.out.println("系统运行时间: " + systemStats.getUptime()); System.out.println("最近活动数量: " + stats.getRecentActivities().size()); System.out.println("用户增长趋势数量: " + (stats.getUserGrowthTrends() != null ? stats.getUserGrowthTrends().size() : 0)); System.out.println("最近登录用户数量: " + (stats.getRecentLogins() != null ? stats.getRecentLogins().size() : 0)); } @Test public void testGetUserStats() { // 测试获取用户统计数据 DashboardStatsResponse.UserStats userStats = dashboardService.getUserStats(); assertNotNull(userStats, "用户统计数据不应为空"); assertTrue(userStats.getTotalUsers() >= 0, "总用户数应大于等于0"); assertTrue(userStats.getTodayNewUsers() >= 0, "今日新增用户数应大于等于0"); assertTrue(userStats.getActiveUsers() >= 0, "活跃用户数应大于等于0"); assertTrue(userStats.getGuestUsers() >= 0, "访客用户数应大于等于0"); } @Test public void testGetContentStats() { // 测试获取内容统计数据 DashboardStatsResponse.ContentStats contentStats = dashboardService.getContentStats(); assertNotNull(contentStats, "内容统计数据不应为空"); assertTrue(contentStats.getTotalConversations() >= 0, "总对话数应大于等于0"); assertTrue(contentStats.getTotalMessages() >= 0, "总消息数应大于等于0"); assertTrue(contentStats.getDiaryPosts() >= 0, "日记帖子数应大于等于0"); assertTrue(contentStats.getCommunityPosts() >= 0, "社区帖子数应大于等于0"); assertTrue(contentStats.getEmotionRecords() >= 0, "情绪记录数应大于等于0"); } @Test public void testGetAiServiceStats() { // 测试获取AI服务统计数据 DashboardStatsResponse.AiServiceStats aiStats = dashboardService.getAiServiceStats(); assertNotNull(aiStats, "AI服务统计数据不应为空"); assertTrue(aiStats.getTotalApiCalls() >= 0, "总API调用次数应大于等于0"); assertTrue(aiStats.getTodayApiCalls() >= 0, "今日API调用次数应大于等于0"); assertTrue(aiStats.getSuccessfulCalls() >= 0, "成功调用次数应大于等于0"); assertTrue(aiStats.getFailedCalls() >= 0, "失败调用次数应大于等于0"); assertTrue(aiStats.getAvgResponseTime() >= 0, "平均响应时间应大于等于0"); assertTrue(aiStats.getAiConfigCount() >= 0, "AI配置数量应大于等于0"); } @Test public void testGetSystemStats() { // 测试获取系统统计数据 DashboardStatsResponse.SystemStats systemStats = dashboardService.getSystemStats(); assertNotNull(systemStats, "系统统计数据不应为空"); assertTrue(systemStats.getAdminCount() >= 0, "管理员数量应大于等于0"); assertTrue(systemStats.getAchievementCount() >= 0, "成就数量应大于等于0"); assertTrue(systemStats.getRewardCount() >= 0, "奖励数量应大于等于0"); assertNotNull(systemStats.getUptime(), "系统运行时间不应为空"); } @Test public void testGetUserGrowthTrends() { // 测试获取用户增长趋势数据 var trends = dashboardService.getUserGrowthTrends(7); assertNotNull(trends, "用户增长趋势数据不应为空"); assertTrue(trends.size() <= 7, "趋势数据数量应不超过7天"); for (var trend : trends) { assertNotNull(trend.getDate(), "日期不应为空"); assertTrue(trend.getNewUsers() >= 0, "新增用户数应大于等于0"); assertTrue(trend.getTotalUsers() >= 0, "总用户数应大于等于0"); } System.out.println("=== 用户增长趋势测试结果 ==="); for (var trend : trends) { System.out.println(String.format("日期: %s, 新增: %d, 总计: %d", trend.getDate(), trend.getNewUsers(), trend.getTotalUsers())); } } @Test public void testGetRecentLogins() { // 测试获取最近登录用户 var recentLogins = dashboardService.getRecentLogins(10); assertNotNull(recentLogins, "最近登录用户数据不应为空"); assertTrue(recentLogins.size() <= 10, "最近登录用户数量应不超过10个"); for (var login : recentLogins) { assertNotNull(login.getUserId(), "用户ID不应为空"); assertNotNull(login.getUsername(), "用户名不应为空"); assertNotNull(login.getTimeDescription(), "时间描述不应为空"); } System.out.println("=== 最近登录用户测试结果 ==="); for (var login : recentLogins) { System.out.println(String.format("用户: %s (%s), 时间: %s", login.getNickname() != null ? login.getNickname() : login.getUsername(), login.getUsername(), login.getTimeDescription())); } } }