77 lines
3.0 KiB
Go
77 lines
3.0 KiB
Go
package business
|
|
|
|
import (
|
|
"context"
|
|
"kra/internal/biz/business"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestBindingRepositoryClearsAuditAndUsesCompositeIdentity(t *testing.T) {
|
|
db := prepareAccounts(t)
|
|
r := NewBindingRepo(testData{db})
|
|
ctx := context.Background()
|
|
reason, review := "旧驳回", "审核员"
|
|
now := time.Now()
|
|
key := business.PlatformKey{SourceDB: "lx", BusierID: 7}
|
|
if err := r.Save(ctx, &business.Binding{UserID: 3, PlatformKey: key, Status: "2", RejectReason: &reason, ReviewTime: &now, ReviewAccount: &review}); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := r.Save(ctx, &business.Binding{UserID: 3, PlatformKey: business.PlatformKey{SourceDB: "hw", BusierID: 7}, Status: "0"}); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := r.WithPlatformLock(ctx, key, func(txctx context.Context) error {
|
|
return r.Save(txctx, &business.Binding{UserID: 3, PlatformKey: key, Status: "3", CreatedAt: now})
|
|
}); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
rows, err := r.ForPlatform(ctx, key)
|
|
if err != nil || len(rows) != 1 {
|
|
t.Fatalf("查询失败: %+v %v", rows, err)
|
|
}
|
|
if rows[0].Status != "3" || rows[0].RejectReason != nil || rows[0].ReviewTime != nil || rows[0].ReviewAccount != nil {
|
|
t.Fatal("重提未清除旧审核信息")
|
|
}
|
|
if err := r.Delete(ctx, 4, key); err != business.ErrBindingNotFound {
|
|
t.Fatal("不能删除其他用户绑定")
|
|
}
|
|
if err := r.Delete(ctx, 3, key); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
other, err := r.ForPlatform(ctx, business.PlatformKey{SourceDB: "hw", BusierID: 7})
|
|
if err != nil || len(other) != 1 {
|
|
t.Fatal("解绑影响了同 ID 的其他平台")
|
|
}
|
|
}
|
|
|
|
func TestBindingListLoadsDTOFieldsAndSurvivesMissingChannels(t *testing.T) {
|
|
db := prepareAccounts(t)
|
|
if err := db.Create(&accountPO{ID: 3, Username: "child", Level: 3, IDPath: "0,1,2"}).Error; err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
r := NewBindingRepo(testData{db})
|
|
ctx := context.Background()
|
|
for _, source := range []string{"lx", "hw"} {
|
|
if err := r.Save(ctx, &business.Binding{UserID: 3, PlatformKey: business.PlatformKey{SourceDB: source, BusierID: 7}, Account: "sdk", Status: "0", CreatedAt: time.Now()}); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
if err := db.Exec("INSERT INTO tab_promote VALUES(1,'lx',7,1,1),(2,'lx',7,2,1)").Error; err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
rows, total, err := r.List(ctx, business.UserScope{OnlySelf: true, SelfID: 3}, business.BindingFilter{SourceDBs: []string{"lx"}})
|
|
if err != nil || total != 1 || len(rows) != 1 {
|
|
t.Fatalf("绑定列表错误: %+v %d %v", rows, total, err)
|
|
}
|
|
if rows[0].UserID != 3 || rows[0].UserName != "child" || rows[0].Account != "sdk" || rows[0].PromoteCount == nil || *rows[0].PromoteCount != 1 {
|
|
t.Fatalf("绑定字段或渠道统计错误: %+v", rows[0])
|
|
}
|
|
if err := db.Exec("DROP TABLE tab_promote").Error; err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
rows, total, err = r.List(ctx, business.UserScope{OnlySelf: true, SelfID: 3}, business.BindingFilter{})
|
|
if err != nil || total != 2 || len(rows) != 2 || rows[0].PromoteCount != nil {
|
|
t.Fatalf("缺渠道表不应阻断绑定资料: %+v %d %v", rows, total, err)
|
|
}
|
|
}
|