mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-06 20:10:42 +00:00
36 lines
1.4 KiB
TypeScript
36 lines
1.4 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
import { buildElevenLabsSpeechProvider, isValidVoiceId } from "./speech-provider.js";
|
|
|
|
describe("elevenlabs speech provider", () => {
|
|
it("exposes the current ElevenLabs TTS model catalog", () => {
|
|
const provider = buildElevenLabsSpeechProvider();
|
|
|
|
expect(provider.models).toEqual(
|
|
expect.arrayContaining(["eleven_v3", "eleven_multilingual_v2"]),
|
|
);
|
|
});
|
|
|
|
it("validates ElevenLabs voice ID length and character rules", () => {
|
|
const cases = [
|
|
{ value: "pMsXgVXv3BLzUgSXRplE", expected: true },
|
|
{ value: "21m00Tcm4TlvDq8ikWAM", expected: true },
|
|
{ value: "VoiceAlias1234567890", expected: true },
|
|
{ value: "a1b2c3d4e5", expected: true },
|
|
{ value: "a".repeat(40), expected: true },
|
|
{ value: "", expected: false },
|
|
{ value: "abc", expected: false },
|
|
{ value: "123456789", expected: false },
|
|
{ value: "a".repeat(41), expected: false },
|
|
{ value: "a".repeat(100), expected: false },
|
|
{ value: "pMsXgVXv3BLz-gSXRplE", expected: false },
|
|
{ value: "pMsXgVXv3BLz_gSXRplE", expected: false },
|
|
{ value: "pMsXgVXv3BLz gSXRplE", expected: false },
|
|
{ value: "../../../etc/passwd", expected: false },
|
|
{ value: "voice?param=value", expected: false },
|
|
] as const;
|
|
for (const testCase of cases) {
|
|
expect(isValidVoiceId(testCase.value), testCase.value).toBe(testCase.expected);
|
|
}
|
|
});
|
|
});
|