feat(AI设计): 支持输入框回车发送
需求:AI 设计输入框监听 Enter 并发送消息。 实现:复用现有发送链路,保留 Shift+Enter 换行并保护输入法组合状态;补充聚焦回归测试。
This commit is contained in:
@@ -372,6 +372,42 @@ describe('ImageCanvas Workspace-first design experience', () => {
|
||||
expect(confirmImageWorkspaceGenerationMock).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('sends the design message with Enter', async () => {
|
||||
render(<MemoryRouter><ImageCanvas /></MemoryRouter>);
|
||||
await screen.findByText('云端角色设定');
|
||||
const composer = screen.getByLabelText('设计需求');
|
||||
|
||||
fireEvent.change(composer, {
|
||||
target: { value: '让画面增加一层晨雾' },
|
||||
});
|
||||
fireEvent.keyDown(composer, { key: 'Enter' });
|
||||
|
||||
await waitFor(() => expect(sendImageWorkspaceMessageMock).toHaveBeenCalledWith(
|
||||
'workspace-cloud',
|
||||
1,
|
||||
'让画面增加一层晨雾',
|
||||
expect.stringMatching(/^turn-/),
|
||||
));
|
||||
expect(composer).toHaveValue('');
|
||||
expect(screen.getByTestId('image-workspace-composer'))
|
||||
.toHaveTextContent('Enter 发送 · Shift+Enter 换行');
|
||||
});
|
||||
|
||||
it('keeps Shift+Enter for newlines and ignores Enter during IME composition', async () => {
|
||||
render(<MemoryRouter><ImageCanvas /></MemoryRouter>);
|
||||
await screen.findByText('云端角色设定');
|
||||
const composer = screen.getByLabelText('设计需求');
|
||||
|
||||
fireEvent.change(composer, {
|
||||
target: { value: '正在输入中文设计描述' },
|
||||
});
|
||||
fireEvent.keyDown(composer, { key: 'Enter', shiftKey: true });
|
||||
fireEvent.keyDown(composer, { key: 'Enter', isComposing: true });
|
||||
|
||||
expect(sendImageWorkspaceMessageMock).not.toHaveBeenCalled();
|
||||
expect(composer).toHaveValue('正在输入中文设计描述');
|
||||
});
|
||||
|
||||
it('renders the pending user turn and assistant deltas while the command is running', async () => {
|
||||
const response = deferred<DesignWorkspace>();
|
||||
sendImageWorkspaceMessageMock.mockReturnValueOnce(response.promise);
|
||||
|
||||
Reference in New Issue
Block a user