071faa482c
纳入 AGC Cargo workspace 的统一 rustfmt 检查与格式化入口 完成项目 TypeScript/Prettier 与 Rust 全量格式化 修复 Pingora expected executable 门禁的空白敏感误报 同步开发运维文档与 AGC skill pack 格式化忽略规则
72 lines
2.0 KiB
TypeScript
72 lines
2.0 KiB
TypeScript
/* @vitest-environment jsdom */
|
|
|
|
import {
|
|
fireEvent,
|
|
render,
|
|
screen,
|
|
waitFor,
|
|
within,
|
|
} from '@testing-library/react';
|
|
import { afterEach, expect, test, vi } from 'vitest';
|
|
|
|
import * as clipboardService from '../../services/clipboard';
|
|
import { PlatformReportDialog } from './PlatformReportDialog';
|
|
|
|
vi.mock('../../services/clipboard', () => ({
|
|
copyTextToClipboard: vi.fn(),
|
|
}));
|
|
|
|
vi.mock('../auth/AuthUiContext', () => ({
|
|
useAuthUi: () => ({ platformTheme: 'dark' }),
|
|
}));
|
|
|
|
afterEach(() => {
|
|
vi.clearAllMocks();
|
|
});
|
|
|
|
test('renders report fields and copies the joined report lines', async () => {
|
|
vi.mocked(clipboardService.copyTextToClipboard).mockResolvedValue(true);
|
|
|
|
render(
|
|
<PlatformReportDialog
|
|
open
|
|
title="统一报告"
|
|
onClose={() => {}}
|
|
copyIdleLabel="复制内容"
|
|
fields={[
|
|
{ label: '来源', value: '拼图草稿 puzzle-session-1' },
|
|
{ label: '状态', value: '已完成', multiline: true },
|
|
]}
|
|
/>,
|
|
);
|
|
|
|
const dialog = screen.getByRole('dialog', { name: '统一报告' });
|
|
expect(dialog.parentElement?.className).toContain('platform-theme--light');
|
|
expect(dialog.parentElement?.className).not.toContain('platform-theme--dark');
|
|
expect(within(dialog).getByText('拼图草稿 puzzle-session-1')).toBeTruthy();
|
|
expect(within(dialog).getByText('已完成')).toBeTruthy();
|
|
|
|
fireEvent.click(within(dialog).getByRole('button', { name: '复制内容' }));
|
|
|
|
expect(clipboardService.copyTextToClipboard).toHaveBeenCalledWith(
|
|
['来源:拼图草稿 puzzle-session-1', '状态:已完成'].join('\n'),
|
|
);
|
|
await waitFor(() => {
|
|
expect(within(dialog).getByRole('button', { name: '已复制' })).toBeTruthy();
|
|
});
|
|
});
|
|
|
|
test('does not render report fields when closed', () => {
|
|
render(
|
|
<PlatformReportDialog
|
|
open={false}
|
|
title="统一报告"
|
|
onClose={() => {}}
|
|
copyIdleLabel="复制内容"
|
|
fields={[]}
|
|
/>,
|
|
);
|
|
|
|
expect(screen.queryByRole('dialog', { name: '统一报告' })).toBeNull();
|
|
});
|