/* @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 { ImageCanvasGenerationImageOptionsView } from './ImageCanvasGenerationImageOptionsView'; import { IMAGE_MODEL_GPT_IMAGE_2, IMAGE_MODEL_NANOBANANA2, } from './ImageCanvasGenerationModel'; function ImageOptionsHarness({ initialDialog, onRememberImageModel = vi.fn(), }: { initialDialog: GenerateDialogState; onRememberImageModel?: (model: string) => void; }) { const [dialog, setDialog] = useState( initialDialog, ); return dialog ? (
{dialog.imageModel} {dialog.aspectRatio} {dialog.imageSize} {dialog.status} {dialog.errorMessage ?? '-'}
) : null; } describe('ImageCanvasGenerationImageOptionsView', () => { it('updates dimensions and resets failed dialog state', () => { render( , ); fireEvent.click(screen.getByRole('button', { name: '16:9' })); fireEvent.click(screen.getByRole('button', { name: '2K' })); expect(screen.getByLabelText('当前比例').textContent).toBe('16:9'); expect(screen.getByLabelText('当前尺寸').textContent).toBe('2K'); expect(screen.getByLabelText('当前状态').textContent).toBe('idle'); expect(screen.getByLabelText('当前错误').textContent).toBe('-'); }); it('remembers model changes and keeps compatible dimensions', () => { const rememberImageModel = vi.fn(); render( , ); fireEvent.click(screen.getByRole('button', { name: 'gpt-image-2' })); expect(rememberImageModel).toHaveBeenCalledWith(IMAGE_MODEL_GPT_IMAGE_2); expect(screen.getByLabelText('当前模型').textContent).toBe( IMAGE_MODEL_GPT_IMAGE_2, ); expect(screen.getByLabelText('当前比例').textContent).toBe('9:16'); expect(screen.getByLabelText('当前尺寸').textContent).toBe('1K'); }); });