Files
Genarrative/src/components/platform-entry/PlatformErrorDialog.test.tsx
2026-05-26 15:57:39 +08:00

108 lines
3.3 KiB
TypeScript

/* @vitest-environment jsdom */
import {
fireEvent,
render,
screen,
waitFor,
within,
} from '@testing-library/react';
import { afterEach, describe, expect, test, vi } from 'vitest';
import * as clipboardService from '../../services/clipboard';
import { PlatformErrorDialog } from './PlatformErrorDialog';
import { PlatformTaskCompletionDialog } from './PlatformTaskCompletionDialog';
vi.mock('../../services/clipboard', () => ({
copyTextToClipboard: vi.fn(),
}));
afterEach(() => {
vi.clearAllMocks();
});
describe('PlatformErrorDialog', () => {
test('shows source, message, and copies the full error report', async () => {
vi.mocked(clipboardService.copyTextToClipboard).mockResolvedValue(true);
render(
<PlatformErrorDialog
error={{
source: '拼图草稿 puzzle-session-123',
message: '图片生成失败,请稍后再试。',
}}
onClose={() => {}}
/>,
);
const dialog = screen.getByRole('dialog', { name: '发生错误' });
expect(within(dialog).getByText('拼图草稿 puzzle-session-123')).toBeTruthy();
expect(within(dialog).getByText('图片生成失败,请稍后再试。')).toBeTruthy();
fireEvent.click(within(dialog).getByRole('button', { name: '复制报错' }));
expect(clipboardService.copyTextToClipboard).toHaveBeenCalledWith(
['来源:拼图草稿 puzzle-session-123', '错误:图片生成失败,请稍后再试。'].join(
'\n',
),
);
await waitFor(() => {
expect(
within(dialog).getByRole('button', { name: '已复制' }),
).toBeTruthy();
});
});
test('does not render when there is no active error', () => {
render(<PlatformErrorDialog error={null} onClose={() => {}} />);
expect(screen.queryByRole('dialog', { name: '发生错误' })).toBeNull();
});
});
describe('PlatformTaskCompletionDialog', () => {
test('shows source, message, and copies the full completion report', async () => {
vi.mocked(clipboardService.copyTextToClipboard).mockResolvedValue(true);
render(
<PlatformTaskCompletionDialog
completion={{
source: '抓大鹅草稿 match3d-notice-session-1',
message: '生成任务已完成,可以继续查看草稿。',
}}
onClose={() => {}}
/>,
);
const dialog = screen.getByRole('dialog', { name: '生成完成' });
expect(
within(dialog).getByText('抓大鹅草稿 match3d-notice-session-1'),
).toBeTruthy();
expect(
within(dialog).getByText('生成任务已完成,可以继续查看草稿。'),
).toBeTruthy();
fireEvent.click(within(dialog).getByRole('button', { name: '复制内容' }));
expect(clipboardService.copyTextToClipboard).toHaveBeenCalledWith(
[
'来源:抓大鹅草稿 match3d-notice-session-1',
'状态:生成任务已完成,可以继续查看草稿。',
].join('\n'),
);
await waitFor(() => {
expect(
within(dialog).getByRole('button', { name: '已复制' }),
).toBeTruthy();
});
});
test('does not render when there is no active completion', () => {
render(
<PlatformTaskCompletionDialog completion={null} onClose={() => {}} />,
);
expect(screen.queryByRole('dialog', { name: '生成完成' })).toBeNull();
});
});