package levelconfig import ( "testing" activityv1 "hyapp.local/api/proto/activity/v1" ) func TestMergeLongBadgeResourceIDPreservesDisplayConfig(t *testing.T) { badgeID := int64(9001) raw, err := mergeLongBadgeResourceID(`{"theme":"gold"}`, &badgeID) if err != nil { t.Fatalf("mergeLongBadgeResourceID failed: %v", err) } if got := longBadgeResourceID(raw); got != badgeID { t.Fatalf("long badge id mismatch: got=%d raw=%s", got, raw) } config, err := objectFromJSON(raw) if err != nil { t.Fatalf("objectFromJSON failed: %v", err) } if config["theme"] != "gold" { t.Fatalf("display config field lost: %+v", config) } } func TestConfigFromProtoGroupsRulesAndTiers(t *testing.T) { resp := &activityv1.ListLevelConfigResponse{ Tracks: []*activityv1.LevelTrack{{Track: "wealth", Name: "财富等级", Status: "active"}}, Rules: []*activityv1.LevelRule{{ Track: "wealth", Level: 3, RequiredValue: 300, DisplayConfigJson: `{"long_badge_resource_id":7003}`, }}, Tiers: []*activityv1.LevelTier{{ TierId: 11, Track: "wealth", MinLevel: 1, MaxLevel: 10, DisplayBadgeResourceId: 9001, }}, ServerTimeMs: 123, } dto := configFromProto(resp) if len(dto.Tracks) != 1 || dto.Tracks[0].Track != "wealth" { t.Fatalf("track grouping mismatch: %+v", dto.Tracks) } if len(dto.Tracks[0].Rules) != 1 || dto.Tracks[0].Rules[0].LongBadgeResourceID != 7003 { t.Fatalf("rule long badge mismatch: %+v", dto.Tracks[0].Rules) } if len(dto.Tracks[0].Tiers) != 1 || dto.Tracks[0].Tiers[0].DisplayBadgeResourceID != 9001 { t.Fatalf("tier grouping mismatch: %+v", dto.Tracks[0].Tiers) } }