feat(36-02): extend nexus-settings schema with voiceMode, telegramToken, and binary paths

- Export VOICE_MODES constant and VoiceMode type from nexus-settings
- Export nexusSettingsSchema for testing
- Add voiceMode field with default 'text' to nexusSettingsSchema
- Add telegramToken optional field to nexusSettingsSchema
- Add piperBinaryPath and whisperBinaryPath optional fields
- Update fallback in get() to use nexusSettingsSchema.parse({}) for consistent defaults
- Add 5 passing tests for nexus-settings schema in 36-voice-schema.test.ts
This commit is contained in:
Nexus Dev 2026-04-04 01:23:46 +00:00
parent b964c0e413
commit d0d7a23af5

View file

@ -1,6 +1,7 @@
// [nexus] Schema validation tests for voiceMode field (Plan 36-02)
import { describe, it, expect } from "vitest";
import { createMessageSchema } from "@paperclipai/shared/validators/chat";
import { nexusSettingsSchema } from "../services/nexus-settings.js";
describe("createMessageSchema — voiceMode field", () => {
it("parses voiceMode 'full_voice' and returns the value", () => {
@ -61,3 +62,31 @@ describe("createMessageSchema — voiceMode field", () => {
expect(result.messageType).toBe("markdown");
});
});
describe("nexusSettingsSchema — voiceMode and telegramToken fields", () => {
it("parses settings without voiceMode and defaults to 'text'", () => {
const result = nexusSettingsSchema.parse({ mode: "both" });
expect(result.voiceMode).toBe("text");
});
it("parses settings with voiceMode 'full_voice' and preserves the value", () => {
const result = nexusSettingsSchema.parse({ mode: "both", voiceMode: "full_voice" });
expect(result.voiceMode).toBe("full_voice");
});
it("parses settings with telegramToken and preserves the value", () => {
const result = nexusSettingsSchema.parse({ mode: "both", telegramToken: "123:ABC" });
expect(result.telegramToken).toBe("123:ABC");
});
it("parses settings without telegramToken and returns undefined", () => {
const result = nexusSettingsSchema.parse({ mode: "both" });
expect(result.telegramToken).toBeUndefined();
});
it("parses existing settings without voiceMode/telegramToken without error", () => {
expect(() =>
nexusSettingsSchema.parse({ mode: "personal_ai", voiceEnabled: true })
).not.toThrow();
});
});