// REQ-USR-003: HomePage 落地页区域组合(KPI 头条 / 角色树 / 常用操作 / 页脚,BR8/BR11)
import { describe, it, expect } from 'vitest';
import { screen, within } from '@testing-library/react';
import userEvent from '@testing-library/user-event';
import { Routes, Route, useLocation } from 'react-router-dom';
import { renderShell } from './renderShell';
import HomePage from '../../src/pages/home/HomePage/HomePage';
function LocationProbe() {
const loc = useLocation();
return
{loc.pathname}
;
}
function renderHome() {
return renderShell(
<>
} />
users} />
>,
{
initialEntries: ['/'],
preloadedAuth: {
token: 't',
user: { id: 1, sUserName: '朱子纯', sUserType: '超级管理员', sLanguage: '中文' },
},
},
);
}
describe('HomePage', () => {
it('renders KPI head with title and stats', () => {
renderHome();
expect(screen.getByText('KPI监控')).toBeInTheDocument();
expect(screen.getByText('今日未处理:')).toBeInTheDocument();
expect(screen.getByText('37428')).toBeInTheDocument();
expect(screen.getByText('未清总数:')).toBeInTheDocument();
expect(screen.getByText('56433')).toBeInTheDocument();
expect(screen.getByText('小ai同学,请帮我安排今日工作')).toBeInTheDocument();
});
it('renders role/process tree groups', () => {
renderHome();
const tree = within(screen.getByTestId('role-tree'));
expect(tree.getByText('按角色')).toBeInTheDocument();
expect(tree.getByText('按流程')).toBeInTheDocument();
expect(tree.getByText(/所有部门/)).toBeInTheDocument();
expect(tree.getByText(/客服部/)).toBeInTheDocument();
});
it('tree item click highlights without navigation', async () => {
renderHome();
const tree = within(screen.getByTestId('role-tree'));
const item = tree.getByRole('button', { name: /核价人员/ });
await userEvent.click(item);
// 高亮(aria-pressed),不触发路由跳转
expect(item).toHaveAttribute('aria-pressed', 'true');
expect(screen.getByTestId('loc').textContent).toBe('/');
});
it('common ops user-list click navigates to /usr/users', async () => {
renderHome();
// 常用操作卡内「用户列表」
const opsUserList = screen.getByRole('button', { name: '用户列表' });
await userEvent.click(opsUserList);
expect(screen.getByTestId('loc').textContent).toBe('/usr/users');
});
it('renders footer copyright text', () => {
renderHome();
expect(screen.getByText(/©Copyright Antler Software/)).toBeInTheDocument();
expect(screen.getByText(/沪ICP备14034791号-1/)).toBeInTheDocument();
});
});