Skip to content

Commit 293f359

Browse files
lmtr0hannesrudolph
authored andcommitted
feat(Ctrl+Enter to send): added tests for setting
1 parent f0913a0 commit 293f359

File tree

1 file changed

+79
-0
lines changed

1 file changed

+79
-0
lines changed

webview-ui/src/components/chat/__tests__/ChatTextArea.spec.tsx

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1058,6 +1058,85 @@ describe("ChatTextArea", () => {
10581058
})
10591059
})
10601060

1061+
describe("keyboard handling with requireCtrlEnterToSend", () => {
1062+
beforeEach(() => {
1063+
;(useExtensionState as ReturnType<typeof vi.fn>).mockReturnValue({
1064+
filePaths: [],
1065+
openedTabs: [],
1066+
apiConfiguration: {
1067+
apiProvider: "anthropic",
1068+
},
1069+
taskHistory: [],
1070+
cwd: "/test/workspace",
1071+
requireCtrlEnterToSend: true,
1072+
})
1073+
})
1074+
1075+
it("should send message with Ctrl+Enter when requireCtrlEnterToSend is enabled", () => {
1076+
const onSend = vi.fn()
1077+
const { container } = render(<ChatTextArea {...defaultProps} onSend={onSend} inputValue="Test message" />)
1078+
1079+
const textarea = container.querySelector("textarea")!
1080+
fireEvent.keyDown(textarea, { key: "Enter", ctrlKey: true })
1081+
1082+
expect(onSend).toHaveBeenCalled()
1083+
})
1084+
1085+
it("should send message with Cmd+Enter when requireCtrlEnterToSend is enabled", () => {
1086+
const onSend = vi.fn()
1087+
const { container } = render(<ChatTextArea {...defaultProps} onSend={onSend} inputValue="Test message" />)
1088+
1089+
const textarea = container.querySelector("textarea")!
1090+
fireEvent.keyDown(textarea, { key: "Enter", metaKey: true })
1091+
1092+
expect(onSend).toHaveBeenCalled()
1093+
})
1094+
1095+
it("should not send message with regular Enter when requireCtrlEnterToSend is enabled", () => {
1096+
const onSend = vi.fn()
1097+
const { container } = render(<ChatTextArea {...defaultProps} onSend={onSend} inputValue="Test message" />)
1098+
1099+
const textarea = container.querySelector("textarea")!
1100+
fireEvent.keyDown(textarea, { key: "Enter" })
1101+
1102+
expect(onSend).not.toHaveBeenCalled()
1103+
})
1104+
1105+
it("should insert newline with Shift+Enter when requireCtrlEnterToSend is enabled", () => {
1106+
const setInputValue = vi.fn()
1107+
const { container } = render(
1108+
<ChatTextArea {...defaultProps} setInputValue={setInputValue} inputValue="Test message" />,
1109+
)
1110+
1111+
const textarea = container.querySelector("textarea")!
1112+
fireEvent.keyDown(textarea, { key: "Enter", shiftKey: true })
1113+
1114+
// Should not call onSend, allowing default behavior (insert newline)
1115+
expect(setInputValue).not.toHaveBeenCalled()
1116+
})
1117+
1118+
it("should send message with regular Enter when requireCtrlEnterToSend is disabled", () => {
1119+
;(useExtensionState as ReturnType<typeof vi.fn>).mockReturnValue({
1120+
filePaths: [],
1121+
openedTabs: [],
1122+
apiConfiguration: {
1123+
apiProvider: "anthropic",
1124+
},
1125+
taskHistory: [],
1126+
cwd: "/test/workspace",
1127+
requireCtrlEnterToSend: false,
1128+
})
1129+
1130+
const onSend = vi.fn()
1131+
const { container } = render(<ChatTextArea {...defaultProps} onSend={onSend} inputValue="Test message" />)
1132+
1133+
const textarea = container.querySelector("textarea")!
1134+
fireEvent.keyDown(textarea, { key: "Enter" })
1135+
1136+
expect(onSend).toHaveBeenCalled()
1137+
})
1138+
})
1139+
10611140
describe("send button visibility", () => {
10621141
it("should show send button when there are images but no text", () => {
10631142
const { container } = render(

0 commit comments

Comments
 (0)