feat(goauto): add managed purchase rules (#127)
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
package version_local
|
||||
|
||||
import (
|
||||
"runtime"
|
||||
|
||||
"go-admin/app/goauto/migrations"
|
||||
"go-admin/app/goauto/models"
|
||||
"go-admin/app/goauto/purchasecontract"
|
||||
"go-admin/cmd/migrate/migration"
|
||||
common "go-admin/common/models"
|
||||
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
func init() {
|
||||
_, fileName, _, _ := runtime.Caller(0)
|
||||
migration.Migrate.SetVersion(migration.GetFilename(fileName), migratePurchaseRules)
|
||||
}
|
||||
|
||||
func migratePurchaseRules(db *gorm.DB, version string) error {
|
||||
return db.Transaction(func(tx *gorm.DB) error {
|
||||
if err := migrations.Migrate(tx); err != nil {
|
||||
return err
|
||||
}
|
||||
var setting models.PurchaseRuleSetting
|
||||
if err := tx.First(&setting, 1).Error; err != nil {
|
||||
if err != gorm.ErrRecordNotFound {
|
||||
return err
|
||||
}
|
||||
record := models.PurchaseRule{Name: "默认 PDD 正式采购规则", ContentJSON: string(purchasecontract.DefaultLiveRule())}
|
||||
if err := tx.Create(&record).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
setting = models.PurchaseRuleSetting{ID: 1, RuleID: record.ID}
|
||||
if err := tx.Create(&setting).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
if err := ensureGoAutoMenusAndPurchaserBindings(tx); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := ensureGoAutoMenuGroups(tx); err != nil {
|
||||
return err
|
||||
}
|
||||
return tx.Create(&common.Migration{Version: version}).Error
|
||||
})
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
package version_local
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
goautomodels "go-admin/app/goauto/models"
|
||||
"go-admin/app/goauto/purchasecontract"
|
||||
migrationmodels "go-admin/cmd/migrate/migration/models"
|
||||
common "go-admin/common/models"
|
||||
|
||||
"gorm.io/driver/sqlite"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
func TestMigratePurchaseRulesSeedsExactDefaultAndMenu(t *testing.T) {
|
||||
db, err := gorm.Open(sqlite.Open("file:purchase-rules?mode=memory&cache=shared"), &gorm.Config{})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err = db.AutoMigrate(&common.Migration{}, &migrationmodels.SysRole{}, &migrationmodels.SysMenu{}, &migrationmodels.SysApi{}, &purchaserCasbinRule{}); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err = migratePurchaseRules(db, "1787983600000"); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
var setting goautomodels.PurchaseRuleSetting
|
||||
if err = db.Preload("Rule").First(&setting, 1).Error; err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if setting.Rule.ContentJSON != string(purchasecontract.DefaultLiveRule()) {
|
||||
t.Fatal("seeded purchase rule does not equal DefaultLiveRule bytes")
|
||||
}
|
||||
var menu migrationmodels.SysMenu
|
||||
if err = db.Where("menu_name = ?", "GoAutoPurchaseRules").First(&menu).Error; err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
var parent migrationmodels.SysMenu
|
||||
if err = db.Where("menu_name = ?", "GoAutoCollectionManagement").First(&parent).Error; err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if menu.ParentId != parent.MenuId {
|
||||
t.Fatalf("purchase rule menu parent=%d want=%d", menu.ParentId, parent.MenuId)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user