From 329cc4f9c8c5b19b3396672c6beabbbd5fc33283 Mon Sep 17 00:00:00 2001 From: lmtr0 Date: Tue, 7 Oct 2025 21:00:47 -0300 Subject: [PATCH] feat(Ctrl+Enter to send): added tests for setting --- .../chat/__tests__/ChatTextArea.spec.tsx | 79 +++++++++++++++++++ 1 file changed, 79 insertions(+) diff --git a/webview-ui/src/components/chat/__tests__/ChatTextArea.spec.tsx b/webview-ui/src/components/chat/__tests__/ChatTextArea.spec.tsx index af7704aa1b..8732115221 100644 --- a/webview-ui/src/components/chat/__tests__/ChatTextArea.spec.tsx +++ b/webview-ui/src/components/chat/__tests__/ChatTextArea.spec.tsx @@ -1058,6 +1058,85 @@ describe("ChatTextArea", () => { }) }) + describe("keyboard handling with requireCtrlEnterToSend", () => { + beforeEach(() => { + ;(useExtensionState as ReturnType).mockReturnValue({ + filePaths: [], + openedTabs: [], + apiConfiguration: { + apiProvider: "anthropic", + }, + taskHistory: [], + cwd: "/test/workspace", + requireCtrlEnterToSend: true, + }) + }) + + it("should send message with Ctrl+Enter when requireCtrlEnterToSend is enabled", () => { + const onSend = vi.fn() + const { container } = render() + + const textarea = container.querySelector("textarea")! + fireEvent.keyDown(textarea, { key: "Enter", ctrlKey: true }) + + expect(onSend).toHaveBeenCalled() + }) + + it("should send message with Cmd+Enter when requireCtrlEnterToSend is enabled", () => { + const onSend = vi.fn() + const { container } = render() + + const textarea = container.querySelector("textarea")! + fireEvent.keyDown(textarea, { key: "Enter", metaKey: true }) + + expect(onSend).toHaveBeenCalled() + }) + + it("should not send message with regular Enter when requireCtrlEnterToSend is enabled", () => { + const onSend = vi.fn() + const { container } = render() + + const textarea = container.querySelector("textarea")! + fireEvent.keyDown(textarea, { key: "Enter" }) + + expect(onSend).not.toHaveBeenCalled() + }) + + it("should insert newline with Shift+Enter when requireCtrlEnterToSend is enabled", () => { + const setInputValue = vi.fn() + const { container } = render( + , + ) + + const textarea = container.querySelector("textarea")! + fireEvent.keyDown(textarea, { key: "Enter", shiftKey: true }) + + // Should not call onSend, allowing default behavior (insert newline) + expect(setInputValue).not.toHaveBeenCalled() + }) + + it("should send message with regular Enter when requireCtrlEnterToSend is disabled", () => { + ;(useExtensionState as ReturnType).mockReturnValue({ + filePaths: [], + openedTabs: [], + apiConfiguration: { + apiProvider: "anthropic", + }, + taskHistory: [], + cwd: "/test/workspace", + requireCtrlEnterToSend: false, + }) + + const onSend = vi.fn() + const { container } = render() + + const textarea = container.querySelector("textarea")! + fireEvent.keyDown(textarea, { key: "Enter" }) + + expect(onSend).toHaveBeenCalled() + }) + }) + describe("send button visibility", () => { it("should show send button when there are images but no text", () => { const { container } = render(