import { describe, expect, it } from "vitest"; import { computeCanStartDictation, runAlternateSendAction, runDefaultSendAction } from "./state"; const connected = { isConnected: true } as never; const disconnected = { isConnected: false } as never; describe("computeCanStartDictation", () => { it("returns false when socket is disconnected", () => { expect( computeCanStartDictation({ client: disconnected, isReadyForDictation: true, disabled: false, dictationUnavailableMessage: null, }), ).toBe(false); }); it("returns false when isReadyForDictation is explicitly false", () => { expect( computeCanStartDictation({ client: connected, isReadyForDictation: false, disabled: false, dictationUnavailableMessage: null, }), ).toBe(false); }); it("returns true when connected and ready", () => { expect( computeCanStartDictation({ client: connected, isReadyForDictation: true, disabled: false, dictationUnavailableMessage: null, }), ).toBe(true); }); it("falls back to socket connected state when isReadyForDictation is undefined", () => { expect( computeCanStartDictation({ client: connected, isReadyForDictation: undefined, disabled: false, dictationUnavailableMessage: null, }), ).toBe(true); expect( computeCanStartDictation({ client: disconnected, isReadyForDictation: undefined, disabled: false, dictationUnavailableMessage: null, }), ).toBe(false); }); it("returns false when the input is disabled", () => { expect( computeCanStartDictation({ client: connected, isReadyForDictation: true, disabled: true, dictationUnavailableMessage: null, }), ).toBe(false); }); it("returns false when a dictation unavailable message is present", () => { expect( computeCanStartDictation({ client: connected, isReadyForDictation: true, disabled: false, dictationUnavailableMessage: "Microphone unavailable", }), ).toBe(false); }); it("returns false when client is null", () => { expect( computeCanStartDictation({ client: null, isReadyForDictation: true, disabled: false, dictationUnavailableMessage: null, }), ).toBe(false); }); }); describe("composer send behavior", () => { function actions() { const calls: string[] = []; return { calls, handleSendMessage: () => calls.push("send"), handleQueueMessage: () => calls.push("queue"), onQueue: () => undefined, }; } it("uses Enter to interrupt and Mod+Enter to queue when interrupt is selected", () => { const defaultAction = actions(); runDefaultSendAction({ defaultSendBehavior: "interrupt", isAgentRunning: true, onQueue: defaultAction.onQueue, handleSendMessage: defaultAction.handleSendMessage, handleQueueMessage: defaultAction.handleQueueMessage, }); const alternateAction = actions(); runAlternateSendAction({ defaultSendBehavior: "interrupt", isAgentRunning: true, onQueue: alternateAction.onQueue, handleSendMessage: alternateAction.handleSendMessage, handleQueueMessage: alternateAction.handleQueueMessage, }); expect(defaultAction.calls).toEqual(["send"]); expect(alternateAction.calls).toEqual(["queue"]); }); it("uses Enter to queue and Mod+Enter to submit when queue is selected", () => { const defaultAction = actions(); runDefaultSendAction({ defaultSendBehavior: "queue", isAgentRunning: true, onQueue: defaultAction.onQueue, handleSendMessage: defaultAction.handleSendMessage, handleQueueMessage: defaultAction.handleQueueMessage, }); const alternateAction = actions(); runAlternateSendAction({ defaultSendBehavior: "queue", isAgentRunning: true, onQueue: alternateAction.onQueue, handleSendMessage: alternateAction.handleSendMessage, handleQueueMessage: alternateAction.handleQueueMessage, }); expect(defaultAction.calls).toEqual(["queue"]); expect(alternateAction.calls).toEqual(["send"]); }); });