update
This commit is contained in:
96
internal/service/street_snap_i18n_test.go
Normal file
96
internal/service/street_snap_i18n_test.go
Normal file
@ -0,0 +1,96 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"context"
|
||||
"testing"
|
||||
|
||||
"fashionapi/internal/dto"
|
||||
"fashionapi/internal/model"
|
||||
"fashionapi/internal/pkg/imgurl"
|
||||
"fashionapi/internal/repository"
|
||||
)
|
||||
|
||||
// fakeSnapRepo 只实现测试路径用到的仓储方法;其余由嵌入的接口兜底(测试中不会调到未实现的方法)。
|
||||
type fakeSnapRepo struct {
|
||||
repository.StreetSnapRepository
|
||||
findByID *model.StreetSnap
|
||||
listImages []model.StreetSnapImage
|
||||
rows []model.StreetSnap
|
||||
}
|
||||
|
||||
func (f *fakeSnapRepo) FindByID(_ context.Context, _ string) (*model.StreetSnap, error) {
|
||||
return f.findByID, nil
|
||||
}
|
||||
|
||||
func (f *fakeSnapRepo) ListImages(_ context.Context, _ string) ([]model.StreetSnapImage, error) {
|
||||
return f.listImages, nil
|
||||
}
|
||||
|
||||
func (f *fakeSnapRepo) List(_ context.Context, q dto.StreetSnapQuery) ([]model.StreetSnap, int64, error) {
|
||||
return f.rows, int64(len(f.rows)), nil
|
||||
}
|
||||
|
||||
var _ repository.StreetSnapRepository = (*fakeSnapRepo)(nil)
|
||||
|
||||
func newSnapService(f *fakeSnapRepo) StreetSnapService {
|
||||
return NewStreetSnapService(f, nil, imgurl.New("", "", ""), nil, nil)
|
||||
}
|
||||
|
||||
// TestStreetSnapDetailLocalizesTitle 详情按 locale 返回中/英标题。
|
||||
func TestStreetSnapDetailLocalizesTitle(t *testing.T) {
|
||||
repo := &fakeSnapRepo{
|
||||
findByID: &model.StreetSnap{ID: 1, Title: "London Street Style", TitleCn: "伦敦街拍", Cover: "c.jpg"},
|
||||
listImages: []model.StreetSnapImage{{ID: 1, Image: "a.jpg"}},
|
||||
}
|
||||
svc := newSnapService(repo)
|
||||
|
||||
cn, err := svc.Detail(context.Background(), "1", "cn")
|
||||
if err != nil {
|
||||
t.Fatalf("Detail cn err: %v", err)
|
||||
}
|
||||
if cn.Title != "伦敦街拍" {
|
||||
t.Errorf("cn 标题应为中文,实际 %q", cn.Title)
|
||||
}
|
||||
|
||||
en, err := svc.Detail(context.Background(), "1", "en")
|
||||
if err != nil {
|
||||
t.Fatalf("Detail en err: %v", err)
|
||||
}
|
||||
if en.Title != "London Street Style" {
|
||||
t.Errorf("en 标题应为英文,实际 %q", en.Title)
|
||||
}
|
||||
}
|
||||
|
||||
// TestStreetSnapDetailFallsBackToEn 中文为空时回落英文。
|
||||
func TestStreetSnapDetailFallsBackToEn(t *testing.T) {
|
||||
repo := &fakeSnapRepo{findByID: &model.StreetSnap{ID: 1, Title: "Only English", TitleCn: ""}}
|
||||
svc := newSnapService(repo)
|
||||
|
||||
cn, err := svc.Detail(context.Background(), "1", "cn")
|
||||
if err != nil {
|
||||
t.Fatalf("Detail cn err: %v", err)
|
||||
}
|
||||
if cn.Title != "Only English" {
|
||||
t.Errorf("中文为空应回落英文,实际 %q", cn.Title)
|
||||
}
|
||||
}
|
||||
|
||||
// TestStreetSnapListLocalizesTitle 列表按 locale 取标题,中文为空回落英文。
|
||||
func TestStreetSnapListLocalizesTitle(t *testing.T) {
|
||||
repo := &fakeSnapRepo{rows: []model.StreetSnap{
|
||||
{ID: 1, Title: "EN A", TitleCn: "中 A"},
|
||||
{ID: 2, Title: "EN B", TitleCn: ""},
|
||||
}}
|
||||
svc := newSnapService(repo)
|
||||
|
||||
got, _, err := svc.List(context.Background(), dto.StreetSnapQuery{Locale: "cn", Images: 0})
|
||||
if err != nil {
|
||||
t.Fatalf("List err: %v", err)
|
||||
}
|
||||
if len(got) != 2 {
|
||||
t.Fatalf("期望 2 条,实际 %d", len(got))
|
||||
}
|
||||
if got[0].Title != "中 A" || got[1].Title != "EN B" {
|
||||
t.Errorf("列表本地化错误: %#v", got)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user