import { beforeEach, describe, expect, it, vi } from "vitest" ;
import { ErrorCodes } from "../protocol/index.js" ;
const mocks = vi.hoisted(() => ({
loadConfig: vi.fn(() => ({})),
resolveExplicitTtsOverrides: vi.fn(() => ({})),
textToSpeech: vi.fn(async () => ({
success: true ,
audioPath: "/tmp/tts.mp3" ,
provider: "openai" ,
outputFormat: "mp3" ,
voiceCompatible: false ,
})),
}));
vi.mock("../../config/config.js" , () => ({
loadConfig: mocks.loadConfig as typeof import ("../../config/config.js" ).loadConfig,
}));
vi.mock("../../tts/provider-registry.js" , () => ({
canonicalizeSpeechProviderId: vi.fn(),
getSpeechProvider: vi.fn(),
listSpeechProviders: vi.fn(() => []),
}));
vi.mock("../../tts/tts.js" , () => ({
getResolvedSpeechProviderConfig: vi.fn(),
getTtsProvider: vi.fn(() => "openai" ),
isTtsEnabled: vi.fn(() => true ),
isTtsProviderConfigured: vi.fn(() => true ),
resolveExplicitTtsOverrides:
mocks.resolveExplicitTtsOverrides as typeof import ("../../tts/tts.js" ).resolveExplicitTtsOverrides,
resolveTtsAutoMode: vi.fn(() => false ),
resolveTtsConfig: vi.fn(() => ({})),
resolveTtsPrefsPath: vi.fn(() => "/tmp/tts.json" ),
resolveTtsProviderOrder: vi.fn(() => ["openai" ]),
setTtsEnabled: vi.fn(),
setTtsProvider: vi.fn(),
textToSpeech: mocks.textToSpeech as typeof import ("../../tts/tts.js" ).textToSpeech,
}));
describe("ttsHandlers" , () => {
beforeEach(() => {
mocks.loadConfig.mockReset();
mocks.loadConfig.mockReturnValue({});
mocks.resolveExplicitTtsOverrides.mockReset();
mocks.resolveExplicitTtsOverrides.mockReturnValue({});
mocks.textToSpeech.mockReset();
mocks.textToSpeech.mockResolvedValue({
success: true ,
audioPath: "/tmp/tts.mp3" ,
provider: "openai" ,
outputFormat: "mp3" ,
voiceCompatible: false ,
});
});
it("returns INVALID_REQUEST when TTS override validation fails" , async () => {
mocks.resolveExplicitTtsOverrides.mockImplementation(() => {
throw new Error('Unknown TTS provider "bad".' );
});
const { ttsHandlers } = await import ("./tts.js" );
const respond = vi.fn();
await ttsHandlers["tts.convert" ]({
params: {
text: "hello" ,
provider: "bad" ,
},
respond,
} as never);
expect(respond).toHaveBeenCalledWith(
false ,
undefined,
expect.objectContaining({
code: ErrorCodes.INVALID_REQUEST,
message: 'Error: Unknown TTS provider "bad".' ,
}),
);
expect(mocks.textToSpeech).not.toHaveBeenCalled();
});
});
Messung V0.5 in Prozent C=96 H=98 G=96
¤ Dauer der Verarbeitung: 0.9 Sekunden
(vorverarbeitet am 2026-06-10)
¤
*© Formatika GbR, Deutschland