// [nexus] Schema validation tests for voiceMode field (Plan 36-02) import { describe, it, expect } from "vitest"; import { createMessageSchema } from "@paperclipai/shared/validators/chat"; describe("createMessageSchema — voiceMode field", () => { it("parses voiceMode 'full_voice' and returns the value", () => { const result = createMessageSchema.parse({ role: "user", content: "hi", voiceMode: "full_voice", }); expect(result.voiceMode).toBe("full_voice"); }); it("parses voiceMode 'voice_input' and returns the value", () => { const result = createMessageSchema.parse({ role: "user", content: "hi", voiceMode: "voice_input", }); expect(result.voiceMode).toBe("voice_input"); }); it("parses voiceMode 'text' and returns the value", () => { const result = createMessageSchema.parse({ role: "user", content: "hi", voiceMode: "text", }); expect(result.voiceMode).toBe("text"); }); it("parses without voiceMode and returns undefined for voiceMode", () => { const result = createMessageSchema.parse({ role: "user", content: "hi", }); expect(result.voiceMode).toBeUndefined(); }); it("throws ZodError when voiceMode is invalid", () => { expect(() => createMessageSchema.parse({ role: "user", content: "hi", voiceMode: "invalid", }) ).toThrow(); }); it("preserves existing fields — role, content, agentId, messageType", () => { const result = createMessageSchema.parse({ role: "assistant", content: "hello world", agentId: "00000000-0000-0000-0000-000000000001", messageType: "markdown", }); expect(result.role).toBe("assistant"); expect(result.content).toBe("hello world"); expect(result.agentId).toBe("00000000-0000-0000-0000-000000000001"); expect(result.messageType).toBe("markdown"); }); });