72 lines
2.8 KiB
Go
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("缺表应明确未接入")
|
|
}
|
|
}
|