Smail/backend/services/translate/translate_test.go
2026-10-18 11:02:23 +08:00

62 lines
1.5 KiB
Go

package translate
import (
"context"
"net/http"
"net/http/httptest"
"testing"
)
func TestTranslateEmptyText(t *testing.T) {
res, err := TranslateText(context.Background(), "", "zh-CN")
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
if res.TranslatedText != "" {
t.Fatalf("expected empty translated text, got %q", res.TranslatedText)
}
}
func TestTranslateMockServer(t *testing.T) {
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
if r.Method != http.MethodPost {
t.Errorf("expected POST method, got %s", r.Method)
}
if err := r.ParseForm(); err != nil {
t.Errorf("parse form failed: %v", err)
}
q := r.Form.Get("q")
if q != "Hello world" {
t.Errorf("expected q='Hello world', got %q", q)
}
w.Header().Set("Content-Type", "application/json")
// 模拟 Google GTX 翻译返回结构
w.WriteHeader(http.StatusOK)
_, _ = w.Write([]byte(`[[["你好世界","Hello world",null,null,10]],null,"en"]`))
}))
defer ts.Close()
oldURL := apiBaseURL
oldClient := defaultClient
defer func() {
SetApiBaseURL(oldURL)
SetDefaultClient(oldClient)
}()
SetApiBaseURL(ts.URL)
SetDefaultClient(ts.Client())
res, err := TranslateText(context.Background(), "Hello world", "zh-CN")
if err != nil {
t.Fatalf("TranslateText failed: %v", err)
}
if res.TranslatedText != "你好世界" {
t.Fatalf("expected '你好世界', got %q", res.TranslatedText)
}
if res.SourceLang != "en" {
t.Fatalf("expected source lang 'en', got %q", res.SourceLang)
}
}