import { describe, it, expect, vi, beforeEach } from 'vitest';
import { render, screen, waitFor } from '@testing-library/react';
import userEvent from '@testing-library/user-event';
import { DashboardPage } from '@/client/admin/pages/Dashboard';
// Mock 导航功能
const mockNavigate = vi.fn();
vi.mock('react-router', () => ({
useNavigate: () => mockNavigate,
}));
describe('DashboardPage 集成测试', () => {
beforeEach(() => {
vi.clearAllMocks();
});
it('应该正确渲染核心指标卡片', async () => {
render();
// 验证统计卡片显示
expect(screen.getByText('活跃用户')).toBeInTheDocument();
expect(screen.getByText('112,893')).toBeInTheDocument();
expect(screen.getByText('较昨日增长 12.5%')).toBeInTheDocument();
expect(screen.getByText('系统消息')).toBeInTheDocument();
expect(screen.getByText('93')).toBeInTheDocument();
expect(screen.getByText('在线用户')).toBeInTheDocument();
expect(screen.getByText('1,128')).toBeInTheDocument();
});
it('应该正确渲染系统性能指标', async () => {
render();
// 验证系统性能部分
expect(screen.getByText('系统性能')).toBeInTheDocument();
expect(screen.getByText('当前系统各项资源的使用情况')).toBeInTheDocument();
expect(screen.getByText('CPU使用率')).toBeInTheDocument();
expect(screen.getByText('65%')).toBeInTheDocument();
expect(screen.getByText('内存使用率')).toBeInTheDocument();
expect(screen.getByText('78%')).toBeInTheDocument();
expect(screen.getByText('磁盘使用率')).toBeInTheDocument();
expect(screen.getByText('45%')).toBeInTheDocument();
expect(screen.getByText('网络使用率')).toBeInTheDocument();
expect(screen.getByText('32%')).toBeInTheDocument();
});
it('应该正确渲染最近活动列表', async () => {
render();
// 验证最近活动部分
expect(screen.getByText('最近活动')).toBeInTheDocument();
expect(screen.getByText('系统最新操作记录')).toBeInTheDocument();
expect(screen.getByText('张三 登录系统')).toBeInTheDocument();
expect(screen.getByText('2分钟前')).toBeInTheDocument();
expect(screen.getByText('李四 创建了新用户')).toBeInTheDocument();
expect(screen.getByText('5分钟前')).toBeInTheDocument();
expect(screen.getByText('王五 删除了用户')).toBeInTheDocument();
expect(screen.getByText('10分钟前')).toBeInTheDocument();
expect(screen.getByText('赵六 修改了配置')).toBeInTheDocument();
expect(screen.getByText('15分钟前')).toBeInTheDocument();
});
it('应该正确渲染快捷操作卡片', async () => {
render();
// 验证快捷操作部分
expect(screen.getByText('快捷操作')).toBeInTheDocument();
expect(screen.getByText('常用的管理功能')).toBeInTheDocument();
expect(screen.getByText('用户管理')).toBeInTheDocument();
expect(screen.getByText('查看和管理所有用户')).toBeInTheDocument();
expect(screen.getByText('系统设置')).toBeInTheDocument();
expect(screen.getByText('配置系统参数')).toBeInTheDocument();
expect(screen.getByText('数据备份')).toBeInTheDocument();
expect(screen.getByText('执行数据备份操作')).toBeInTheDocument();
expect(screen.getByText('日志查看')).toBeInTheDocument();
expect(screen.getByText('查看系统日志')).toBeInTheDocument();
});
it('应该正确渲染页面标题和描述', async () => {
render();
expect(screen.getByText('仪表盘')).toBeInTheDocument();
expect(screen.getByText('欢迎回来!这里是系统概览和关键指标。')).toBeInTheDocument();
});
it('应该具有正确的响应式布局类名', async () => {
const { container } = render();
// 验证网格布局类名
const gridElements = container.querySelectorAll('.grid');
expect(gridElements.length).toBeGreaterThan(0);
// 验证响应式类名存在 - 使用更宽松的检查
const hasResponsiveClasses = container.innerHTML.includes('md:grid-cols-2') ||
container.innerHTML.includes('lg:grid-cols-3');
expect(hasResponsiveClasses).toBe(true);
});
it('应该包含正确的图标和视觉元素', async () => {
render();
// 验证卡片标题存在
expect(screen.getByText('活跃用户')).toBeInTheDocument();
expect(screen.getByText('系统消息')).toBeInTheDocument();
expect(screen.getByText('在线用户')).toBeInTheDocument();
// 验证进度条存在 - 使用更通用的检查
const progressElements = document.querySelectorAll('[role="progressbar"]');
expect(progressElements.length).toBeGreaterThan(0);
});
});