/** @vitest-environment jsdom */ import React from 'react'; import { describe, expect, it, vi } from 'vitest'; import { ResourceEditSurface } from '../src/view/project-development/ResourceEditSurface'; import { fireEvent, render, screen, waitFor } from './appSurface/harness'; describe('统一资源编辑面板', () => { it('失败后锁定原请求字段并使用相同输入重试', async () => { const submit = vi .fn<(input: { prompt: string; assetName: string }) => Promise>() .mockRejectedValueOnce(new Error('网络暂不可用')) .mockResolvedValueOnce(undefined); render( undefined} onSubmit={submit} />, ); const name = screen.getByLabelText('派生资源名称'); const prompt = screen.getByLabelText('编辑提示词'); fireEvent.change(name, { target: { value: '红发角色规则' } }); fireEvent.change(prompt, { target: { value: '把角色头发设定改为红色' } }); fireEvent.click(screen.getByRole('button', { name: '生成派生资源' })); expect((await screen.findByRole('alert')).textContent).toContain( '网络暂不可用', ); expect((name as HTMLInputElement).disabled).toBe(true); expect((prompt as HTMLTextAreaElement).disabled).toBe(true); fireEvent.click(screen.getByRole('button', { name: '使用原请求重试' })); await waitFor(() => expect(submit).toHaveBeenCalledTimes(2)); expect(submit.mock.calls[0]?.[0]).toEqual(submit.mock.calls[1]?.[0]); }); it('对音频显示语义派生边界', () => { render( undefined} onSubmit={async () => undefined} />, ); expect(screen.getByText(/不会修改原音频波形/)).not.toBeNull(); }); });