/* @vitest-environment jsdom */ import { fireEvent, render, screen } from '@testing-library/react'; import { useState } from 'react'; import { describe, expect, it, vi } from 'vitest'; import type { GenerateDialogState } from './ImageCanvasEditorTypes'; import { ImageCanvasEditGenerationModalView } from './ImageCanvasEditGenerationModalView'; function createDialog( patch: Partial = {}, ): GenerateDialogState { return { mode: 'edit', prompt: '旧修改提示', status: 'idle', sourceLayerId: 'layer-a', ...patch, }; } function EditGenerationModalHarness({ initialDialog = createDialog(), onSubmit = vi.fn(), }: { initialDialog?: GenerateDialogState | null; onSubmit?: (dialog: GenerateDialogState) => void; }) { const [dialog, setDialog] = useState( initialDialog, ); return (
{dialog ? 'open' : 'closed'} {dialog?.prompt ?? '-'}
); } describe('ImageCanvasEditGenerationModalView', () => { it('updates prompt and submits edit generation', () => { const submitEdit = vi.fn(); render(); fireEvent.change(screen.getByLabelText('生成提示词'), { target: { value: '新的修改提示' }, }); fireEvent.click(screen.getByRole('button', { name: '修改' })); expect(screen.getByLabelText('当前提示词').textContent).toBe( '新的修改提示', ); expect(submitEdit).toHaveBeenCalledWith( expect.objectContaining({ prompt: '新的修改提示' }), ); }); it('renders failure state and closes through the modal close button', () => { render( , ); expect(screen.getByRole('alert').textContent).toContain('修改失败'); fireEvent.click(screen.getByRole('button', { name: '关闭修改图片' })); expect(screen.getByLabelText('弹窗状态').textContent).toBe('closed'); }); it('stays hidden for non-edit dialogs and generating edit dialogs', () => { const { rerender } = render( , ); expect(screen.queryByRole('dialog', { name: '修改图片' })).toBeNull(); rerender( , ); expect(screen.queryByRole('dialog', { name: '修改图片' })).toBeNull(); }); });