package voice import ( "context" "testing" ) func TestChain_STTWithProvider(t *testing.T) { t.Parallel() steps := []Provider{ &stubProvider{name: "cloud", stt: &stubSTT{err: ErrNotConfigured}}, &stubProvider{name: "local", stt: &stubSTT{text: "hi"}}, } text, rung, err := NewChain(steps...).STTWithProvider(context.Background(), Audio{Format: "wav", Data: []byte("x")}) if err != nil { t.Fatalf("STTWithProvider error: %v", err) } if text != "hi" || rung != "local" { t.Errorf("text/rung = %q/%q, want hi/local", text, rung) } } func TestChain_TTSWithProvider_Silent(t *testing.T) { t.Parallel() steps := []Provider{ &stubProvider{name: "cloud", tts: &stubTTS{err: ErrNotConfigured}}, SilentProvider(), } audio, rung, err := NewChain(steps...).TTSWithProvider(context.Background(), "hi") if err != nil { t.Fatalf("TTSWithProvider error: %v", err) } if len(audio.Data) != 0 || rung != "silent" { t.Errorf("audio/rung = %+v/%q, want empty/silent", audio, rung) } } func TestService_TTSWithProvider(t *testing.T) { t.Parallel() svc := NewService(NewChain(NewProvider("edge-tts", nil, &stubTTS{audio: Audio{Format: "mp3", Data: []byte("a")}}))) defer svc.Close() audio, rung, err := svc.TTSWithProvider(context.Background(), "hi") if err != nil { t.Fatalf("TTSWithProvider error: %v", err) } if string(audio.Data) != "a" || rung != "edge-tts" { t.Errorf("audio/rung = %+v/%q, want a/edge-tts", audio, rung) } }