UserToolbar.test.tsx
2.57 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
// REQ-USR-003: UserToolbar 工具栏单测(BR8/BR9/BR13/D7/D10)
import { describe, it, expect, vi, beforeEach } from 'vitest';
import { screen } from '@testing-library/react';
import userEvent from '@testing-library/user-event';
import { renderShell } from './renderShell';
import UserToolbar from '../../src/pages/usr/UserList/UserToolbar';
function setup(over?: { exporting?: boolean; loading?: boolean }) {
const onRefresh = vi.fn();
const onAdd = vi.fn();
const onExport = vi.fn();
renderShell(
<UserToolbar
onRefresh={onRefresh}
onAdd={onAdd}
onExport={onExport}
exporting={over?.exporting ?? false}
loading={over?.loading ?? false}
/>,
{ preloadedAuth: { token: 't', user: { id: 1, sUserName: 'a', sUserType: 'x', sLanguage: '中文' } } },
);
return { onRefresh, onAdd, onExport };
}
describe('UserToolbar', () => {
beforeEach(() => {
vi.clearAllMocks();
});
it('renders 刷新/新增/导出Excel/设置 buttons', () => {
setup();
expect(screen.getByTestId('btn-refresh')).toBeInTheDocument();
expect(screen.getByText('刷新')).toBeInTheDocument();
expect(screen.getByText('新增')).toBeInTheDocument();
expect(screen.getByText('导出Excel')).toBeInTheDocument();
expect(screen.getByTestId('btn-gear')).toBeInTheDocument();
});
it('click 刷新 calls onRefresh / click 新增 calls onAdd (BR8/BR13)', async () => {
const user = userEvent.setup();
const { onRefresh, onAdd } = setup();
await user.click(screen.getByTestId('btn-refresh'));
expect(onRefresh).toHaveBeenCalledTimes(1);
await user.click(screen.getByTestId('btn-add'));
expect(onAdd).toHaveBeenCalledTimes(1);
});
it('click 导出Excel calls onExport (BR9)', async () => {
const user = userEvent.setup();
const { onExport } = setup();
await user.click(screen.getByTestId('btn-export'));
expect(onExport).toHaveBeenCalledTimes(1);
});
it('exporting disables 导出Excel and shows loading (BR9)', async () => {
const user = userEvent.setup();
const { onExport } = setup({ exporting: true });
const btn = screen.getByTestId('btn-export');
expect(btn).toBeDisabled();
await user.click(btn);
expect(onExport).not.toHaveBeenCalled();
});
it('gear setting is placeholder (no callback) (D7)', async () => {
const user = userEvent.setup();
const { onRefresh, onAdd, onExport } = setup();
await user.click(screen.getByTestId('btn-gear'));
expect(onRefresh).not.toHaveBeenCalled();
expect(onAdd).not.toHaveBeenCalled();
expect(onExport).not.toHaveBeenCalled();
});
});