fix: 补齐渠道全量合计筛选导出及有效端目标遗漏
This commit is contained in:
@@ -3,6 +3,7 @@ package business
|
||||
import (
|
||||
"context"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"gorm.io/gorm"
|
||||
"kra/internal/biz/business"
|
||||
@@ -59,6 +60,69 @@ func TestAnalyticsChannelTreeAndAdminOfficialRows(t *testing.T) {
|
||||
t.Fatalf("超管全局去重或官方/历史渠道遗漏: %+v %v", data, err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestAnalyticsFiltersIncludeIdleChannelsAndRecalculateTotals(t *testing.T) {
|
||||
db, repo, scope, filter := prepareAnalyticsData(t)
|
||||
if err := db.Exec("INSERT INTO tab_promote(id,source_db,account,promote_level,parent_id,top_promote_id,busier_id) VALUES(200,'lx','idle',1,0,0,14)").Error; err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
yes, no := true, false
|
||||
filter.HasRegister, filter.HasPay = &no, &no
|
||||
for _, viewer := range []business.UserScope{scope.Viewer, {All: true}} {
|
||||
scope.Viewer = viewer
|
||||
data, err := repo.Aggregate(context.Background(), business.ChannelAnalytics, scope, filter)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
found := false
|
||||
for _, row := range data.Rows {
|
||||
if row.Counts.Register != 0 || portraitTestMoney(row.Pay) != "0.00" {
|
||||
t.Fatalf("筛选后的每行必须同时满足两个条件: %+v", row)
|
||||
}
|
||||
found = found || row.SourceDB == "lx" && row.ID == 200
|
||||
}
|
||||
if !found {
|
||||
t.Fatal("整个期间没有事件的可见渠道不能遗漏")
|
||||
}
|
||||
if viewer.All && (data.GlobalCounts.Register != 0 || portraitTestMoney(data.GlobalPay) != "0.00") {
|
||||
t.Fatalf("管理员合计未跟随过滤: %+v", data)
|
||||
}
|
||||
}
|
||||
filter.HasRegister, filter.HasPay = &yes, &yes
|
||||
filter.Sources, filter.PromoteName = []string{"lx"}, "root-channel"
|
||||
data, err := repo.Aggregate(context.Background(), business.ChannelAnalytics, scope, filter)
|
||||
if err != nil || len(data.Rows) != 1 || portraitTestMoney(data.GlobalPay) != "60.60" || data.GlobalCounts.Register != data.Rows[0].Counts.Register {
|
||||
t.Fatalf("平台、名称及指标筛选须共同约束列表与全量合计: %+v %v", data, err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestAnalyticsEffectiveCountIncludesQualifiedDescendants(t *testing.T) {
|
||||
db, repo, scope, filter := prepareAnalyticsData(t)
|
||||
qualified := time.Date(2026, 11, 2, 0, 0, 0, 0, time.FixedZone("Asia/Shanghai", 8*3600)).Unix()
|
||||
if err := db.Exec("UPDATE sys_business_effectiveness_state SET rule_key='audit' WHERE id=1").Error; err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
for _, key := range []business.ChannelKey{{SourceDB: "lx", ID: 100}, {SourceDB: "lx", ID: 101}, {SourceDB: "yq", ID: 100}} {
|
||||
if err := db.Create(&effectivenessPO{RuleKey: "audit", SourceDB: key.SourceDB, PromoteID: key.ID, QualifiedAt: &qualified, WindowPay: "3000"}).Error; err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
filter.PromoteName = "root-channel"
|
||||
data, err := repo.Aggregate(context.Background(), business.ChannelAnalytics, scope, filter)
|
||||
if err != nil || len(data.Rows) != 1 || data.EffectiveCount != 2 {
|
||||
t.Fatalf("合并渠道树展示仍须计入下级达标,且不能混入权限外同号渠道: %+v %v", data, err)
|
||||
}
|
||||
scope.IncludeSub = false
|
||||
data, err = repo.Aggregate(context.Background(), business.ChannelAnalytics, scope, filter)
|
||||
if err != nil || data.EffectiveCount != 1 {
|
||||
t.Fatalf("关闭包含下级后只统计自身: %+v %v", data, err)
|
||||
}
|
||||
filter.Begin = "2026-11-03"
|
||||
data, err = repo.Aggregate(context.Background(), business.ChannelAnalytics, scope, filter)
|
||||
if err != nil || data.EffectiveCount != 0 {
|
||||
t.Fatalf("有效端必须按达标时间归属统计区间: %+v %v", data, err)
|
||||
}
|
||||
}
|
||||
func TestAnalyticsFiltersKeepHierarchyAndSnapshotNames(t *testing.T) {
|
||||
db, repo, scope, filter := prepareAnalyticsData(t)
|
||||
filter.PromoteName = "child"
|
||||
|
||||
Reference in New Issue
Block a user