Files
kra-new/internal/data/business/ranking_test.go
T

72 lines
2.8 KiB
Go

package business
import (
"context"
"kra/internal/biz/business"
"testing"
)
func TestRankingStorageDifferentRootAndBusinessScopes(t *testing.T) {
db, _, scope, filter := prepareAnalyticsData(t)
r := NewRankingRepo(testData{db})
ctx := context.Background()
f := business.RankingRange{AnalyticsFilter: filter, PreviousBegin: "2026-10-01", PreviousEnd: "2026-10-03"}
data, err := r.Collect(ctx, business.GameRanking, scope, f)
if err != nil || len(data.Current) != 3 || data.Current[business.AnalyticsKey{SourceDB: "lx", ID: 1}].Name != "游戏甲" {
t.Fatalf("游戏排行或当前名称错误: %+v %v", data, err)
}
scope.Viewer = business.UserScope{SelfID: 7, IncludeSelf: true, DescendantPath: "0,7"}
data, err = r.Collect(ctx, business.BusinessRanking, scope, f)
if err != nil {
t.Fatal(err)
}
var child *business.RankingBusiness
for _, target := range data.Businesses {
if target.ID == 8 {
child = target
}
if target.ID != 8 && target.ID != 10 {
t.Fatal("一级只能排行直属下级")
}
}
if child == nil || len(child.Channels) != 5 {
t.Fatalf("二级本人的 hw 和下属三级的 lx 渠道应合并: %+v", child)
}
if _, ok := data.Current[business.AnalyticsKey{SourceDB: "lx", ID: 0}]; ok {
t.Fatal("商务榜渠道映射不应包含官方流水")
}
scope.Viewer = business.UserScope{SelfID: 8, IncludeSelf: true, DescendantPath: "0,7,8"}
data, err = r.Collect(ctx, business.BusinessRanking, scope, f)
if err != nil || len(data.Businesses) != 1 || data.Businesses[0].ID != 9 || len(data.Businesses[0].Channels) != 4 {
t.Fatal("二级商务榜只能展示直属三级及其渠道")
}
scope.Viewer = business.UserScope{All: true}
data, err = r.Collect(ctx, business.BusinessRanking, scope, f)
if err != nil {
t.Fatal(err)
}
seen := map[uint]bool{}
for _, b := range data.Businesses {
seen[b.ID] = true
}
if !seen[7] || !seen[8] || !seen[9] || seen[1] || seen[99] {
t.Fatal("超管应展示所选平台有渠道的各级商务,不能包含普通框架管理员")
}
if err := db.Exec("UPDATE tab_promote SET top_promote_id=777 WHERE source_db='lx' AND id=100").Error; err != nil {
t.Fatal(err)
}
scope = business.AnalyticsScope{Viewer: channelTestScope(), IncludeSub: false, IDCardDedup: true}
data, err = r.Collect(ctx, business.ChannelRanking, scope, f)
root := data.Current[business.AnalyticsKey{SourceDB: "lx", ID: 777}]
if err != nil || root == nil || portraitTestMoney(root.Pay) != "10.10" || root.Counts.Register != 1 {
t.Fatalf("独立渠道榜使用 COALESCE(top,id),不应误用工作台 CASE 根算法: %+v %v", root, err)
}
if err := db.Exec("DROP TABLE tab_sw_report_day_key").Error; err != nil {
t.Fatal(err)
}
data, err = r.Collect(ctx, business.ChannelRanking, scope, f)
if err != nil || data.Available {
t.Fatal("缺表应明确未接入")
}
}