73 lines
1.9 KiB
Go
73 lines
1.9 KiB
Go
package business
|
|
|
|
import (
|
|
"context"
|
|
"github.com/glebarez/sqlite"
|
|
"gorm.io/gorm"
|
|
"kra/internal/biz/business"
|
|
"path/filepath"
|
|
"testing"
|
|
)
|
|
|
|
type testData struct{ db *gorm.DB }
|
|
|
|
func (d testData) DB() *gorm.DB { return d.db }
|
|
|
|
func openTestDB(t *testing.T) *gorm.DB {
|
|
t.Helper()
|
|
db, err := gorm.Open(sqlite.Open(filepath.Join(t.TempDir(), "business.db")), &gorm.Config{})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
sqlDB, err := db.DB()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
t.Cleanup(func() { _ = sqlDB.Close() })
|
|
for _, step := range Migrations() {
|
|
if err := step.Migrate(db); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
return db
|
|
}
|
|
|
|
func TestPreferencePreservesLegacyValuesAndUpserts(t *testing.T) {
|
|
db := openTestDB(t)
|
|
r := NewUserPreferenceRepo(testData{db})
|
|
ctx := context.Background()
|
|
if pref, err := r.Find(ctx, 5); err != nil || pref != nil {
|
|
t.Fatalf("缺省记录错误: %+v %v", pref, err)
|
|
}
|
|
if err := db.Exec("INSERT INTO sys_user_preference(user_id,include_sub_promote,idcard_dedup) VALUES (5,NULL,2),(6,1,1)").Error; err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
pref, err := r.Find(ctx, 5)
|
|
if err != nil || !pref.IncludeSubPromote || !pref.IDCardDedup {
|
|
t.Fatalf("旧 NULL 和非零值应为开启: %+v %v", pref, err)
|
|
}
|
|
for i := 0; i < 2; i++ {
|
|
if err := r.Save(ctx, 5, business.UserPreference{}); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
for _, step := range Migrations() {
|
|
if err := step.Migrate(db); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
pref, err = r.Find(ctx, 5)
|
|
if err != nil || pref.IncludeSubPromote || pref.IDCardDedup {
|
|
t.Fatalf("重复迁移不能重置偏好: %+v %v", pref, err)
|
|
}
|
|
other, err := r.Find(ctx, 6)
|
|
if err != nil || !other.IncludeSubPromote || !other.IDCardDedup {
|
|
t.Fatalf("影响其他用户: %+v %v", other, err)
|
|
}
|
|
var count int64
|
|
db.Model(&preferencePO{}).Where("user_id = ?", 5).Count(&count)
|
|
if count != 1 {
|
|
t.Fatalf("重复写入产生多条记录: %d", count)
|
|
}
|
|
}
|