商城c端前端

This commit is contained in:
richjohnrambo
2026-10-12 23:26:36 +08:00
parent 8f3a97a54d
commit dd729cb679
17 changed files with 744 additions and 41 deletions
+44 -6
View File
@@ -13,12 +13,14 @@ import (
)
type fakeRepository struct {
config json.RawMessage
banners []store.Banner
content *store.Content
levels []store.MemberLevel
notices []store.MemberNotice
summary *store.TaskSummary
config json.RawMessage
banners []store.Banner
content *store.Content
levels []store.MemberLevel
notices []store.MemberNotice
summary *store.TaskSummary
leaders []store.LeaderboardMember
services []store.CustomerService
}
func (r fakeRepository) CurrentSiteConfig(context.Context, int64) (json.RawMessage, error) {
@@ -42,6 +44,12 @@ func (r fakeRepository) ActiveMemberNotices(context.Context, int64, int64, int)
func (r fakeRepository) MemberTaskSummary(context.Context, int64, int64) (*store.TaskSummary, error) {
return r.summary, nil
}
func (r fakeRepository) TaskLeaderboard(context.Context, int64, int) ([]store.LeaderboardMember, error) {
return r.leaders, nil
}
func (r fakeRepository) ActiveCustomerServices(context.Context, int64) ([]store.CustomerService, error) {
return r.services, nil
}
func TestParseFeaturesSupportsNestedAndLegacyKeys(t *testing.T) {
features := parseFeatures(json.RawMessage(`{
@@ -126,3 +134,33 @@ func TestHomeUsesSettledSummaryAndSnakeCaseJSON(t *testing.T) {
}
}
}
func TestLeaderboardMasksUsernameAndAddsRank(t *testing.T) {
service := New(fakeRepository{leaders: []store.LeaderboardMember{
{MemberID: 7, Username: "风轻云淡", CompletedCount: 12},
{MemberID: 8, Username: "李明", CompletedCount: 9},
}})
items, err := service.Leaderboard(context.Background(), 1)
if err != nil {
t.Fatal(err)
}
if len(items) != 2 || items[0].Rank != 1 || items[0].Username != "风***淡" ||
items[1].Username != "李*" || items[1].Status != "领取成功" {
t.Fatalf("unexpected leaderboard: %+v", items)
}
}
func TestCustomerServicesSanitizeURLsAndMapStatus(t *testing.T) {
service := New(fakeRepository{services: []store.CustomerService{
{ID: 1, Name: "在线客服", AvatarURL: "https://example.com/avatar.png", ServiceURL: "https://example.com/chat", OnlineStatus: 1},
{ID: 2, Name: "离线客服", AvatarURL: "javascript:alert(1)", ServiceURL: "http://example.com/chat", OnlineStatus: 2},
}})
items, err := service.CustomerServices(context.Background(), 0)
if err != nil {
t.Fatal(err)
}
if len(items) != 2 || items[0].OnlineStatus != "online" || items[0].ServiceURL == "" ||
items[1].OnlineStatus != "offline" || items[1].AvatarURL != "" || items[1].ServiceURL != "" {
t.Fatalf("unexpected customer services: %+v", items)
}
}