update
This commit is contained in:
89
internal/service/translate_test.go
Normal file
89
internal/service/translate_test.go
Normal file
@ -0,0 +1,89 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"context"
|
||||
"testing"
|
||||
|
||||
"fashionapi/internal/model"
|
||||
"fashionapi/internal/repository"
|
||||
)
|
||||
|
||||
type fakeTranslateBrandRepo struct{ repository.BrandRepository }
|
||||
|
||||
func (fakeTranslateBrandRepo) CrawlBrands(ctx context.Context, brandID uint32) ([]model.Brand, error) {
|
||||
return []model.Brand{
|
||||
{NameEn: "Chanel", NameCn: "香奈儿"},
|
||||
{NameEn: "Acne Studios", NameCn: "阿尼亚"},
|
||||
}, nil
|
||||
}
|
||||
|
||||
type fakeTranslateMem struct {
|
||||
m map[string]string
|
||||
repository.TranslateRepository
|
||||
}
|
||||
|
||||
func (f *fakeTranslateMem) GetTitleCnMemory(ctx context.Context, titleEn string) (string, bool, error) {
|
||||
v, ok := f.m[titleEn]
|
||||
return v, ok, nil
|
||||
}
|
||||
|
||||
func (f *fakeTranslateMem) UpsertTitleCnMemory(ctx context.Context, titleEn, titleCn string) error {
|
||||
if f.m == nil {
|
||||
f.m = map[string]string{}
|
||||
}
|
||||
f.m[titleEn] = titleCn
|
||||
return nil
|
||||
}
|
||||
|
||||
func newTranslateServiceForTest() *TranslateService {
|
||||
return &TranslateService{brandRepo: fakeTranslateBrandRepo{}, memRepo: &fakeTranslateMem{m: map[string]string{}}}
|
||||
}
|
||||
|
||||
func TestRuleTranslate(t *testing.T) {
|
||||
brandCN := map[string]string{"chanel": "香奈儿", "acne studios": "阿尼亚"}
|
||||
cases := []struct {
|
||||
en string
|
||||
want string
|
||||
ok bool
|
||||
}{
|
||||
{"Spring 2024 Ready-to-Wear", "春夏 2024 成衣", true},
|
||||
{"London Fashion Week Street Style", "伦敦 时装周 街拍", true},
|
||||
{"Chanel Spring 2024 Ready-to-Wear", "香奈儿 春夏 2024 成衣", true},
|
||||
{"Acne Studios Fall 2023 Couture", "阿尼亚 秋冬 2023 高级定制", true},
|
||||
// 含未知品牌 → 未完整翻译 → 失败(不写脏数据)
|
||||
{"UnknownBrand Spring 2024 Ready-to-Wear", "", false},
|
||||
{"", "", false},
|
||||
}
|
||||
for _, c := range cases {
|
||||
got, ok := RuleTranslate(c.en, brandCN)
|
||||
if ok != c.ok || got != c.want {
|
||||
t.Errorf("RuleTranslate(%q) = (%q, %v), want (%q, %v)", c.en, got, ok, c.want, c.ok)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestSuggestTitleCnMemory(t *testing.T) {
|
||||
svc := newTranslateServiceForTest()
|
||||
ctx := context.Background()
|
||||
if err := svc.Remember(ctx, "Foobar Fall 2023 Couture", "自定义中文"); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
got, err := svc.SuggestTitleCn(ctx, "Foobar Fall 2023 Couture")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if got != "自定义中文" {
|
||||
t.Fatalf("记忆未优先命中: got %q", got)
|
||||
}
|
||||
}
|
||||
|
||||
func TestSuggestTitleCnRule(t *testing.T) {
|
||||
svc := newTranslateServiceForTest()
|
||||
got, err := svc.SuggestTitleCn(context.Background(), "Chanel Spring 2024 Ready-to-Wear")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if got != "香奈儿 春夏 2024 成衣" {
|
||||
t.Fatalf("规则翻译不符: got %q", got)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user