2026-10-18 16:34:43 +02:00
|
|
|
package provider
|
|
|
|
|
|
|
|
|
|
import "testing"
|
|
|
|
|
|
2026-10-24 11:15:35 +02:00
|
|
|
// TestResolveVoicePrecedence pins the documented precedence
|
|
|
|
|
// --voice pin > config mapping > repo default > en default.
|
|
|
|
|
func TestResolveVoicePrecedence(t *testing.T) {
|
2026-10-18 16:34:43 +02:00
|
|
|
cases := []struct {
|
|
|
|
|
name string
|
|
|
|
|
provider string
|
|
|
|
|
lang string
|
|
|
|
|
override string
|
|
|
|
|
cfg map[string]string
|
|
|
|
|
want string
|
|
|
|
|
}{
|
2026-10-24 11:15:35 +02:00
|
|
|
{"default edge de", "edge", "de", "", nil, "de-DE-KatjaNeural"},
|
|
|
|
|
{"default edge en", "edge", "en", "", nil, "en-US-AriaNeural"},
|
|
|
|
|
{"default elevenlabs de (neutral, not private)", "elevenlabs", "de", "", nil, "21m00Tcm4TlvDq8ikWAM"},
|
|
|
|
|
{"default openai en", "openai", "en", "", nil, "alloy"},
|
|
|
|
|
{"mapping beats default", "edge", "de", "", map[string]string{"de": "de-DE-ConradNeural"}, "de-DE-ConradNeural"},
|
|
|
|
|
{"pin beats mapping", "edge", "de", "Pinned", map[string]string{"de": "de-DE-ConradNeural"}, "Pinned"},
|
|
|
|
|
{"unknown language falls back to en default", "edge", "fr", "", nil, "en-US-AriaNeural"},
|
|
|
|
|
{"osbuiltin has no voice IDs", "osbuiltin", "de", "", nil, ""},
|
2026-10-18 16:34:43 +02:00
|
|
|
}
|
|
|
|
|
for _, tc := range cases {
|
|
|
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
|
|
|
if got := resolveVoice(tc.provider, tc.lang, tc.override, tc.cfg); got != tc.want {
|
|
|
|
|
t.Errorf("resolveVoice = %q, want %q", got, tc.want)
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
}
|