feat: automate business upgrades and sync reviewed frontend
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
package system
|
||||
|
||||
import (
|
||||
"context"
|
||||
biz "kra/internal/biz/system"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestBusinessRoleIdentitySurvivesRenameAndMappingCleanup(t *testing.T) {
|
||||
d := newTransactionTestData(t)
|
||||
db := d.DB()
|
||||
for _, statement := range []string{
|
||||
"INSERT INTO sys_authorities(authority_id,authority_name) VALUES(888,'admin'),(11,'一级已改名'),(12,'二级已改名'),(13,'三级已改名')",
|
||||
"CREATE TABLE sw_kra_id_map(entity TEXT,old_id TEXT,new_id INTEGER)",
|
||||
"INSERT INTO sw_kra_id_map VALUES('role','2083497078545207297',11),('role','2087435436573081601',12),('role','2087361690139152385',13)",
|
||||
} {
|
||||
if err := db.Exec(statement).Error; err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
if err := migrateBusinessRoles(db); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err := db.Exec("DROP TABLE sw_kra_id_map").Error; err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err := migrateBusinessRoles(db); err != nil {
|
||||
t.Fatalf("migration retry after map removal: %v", err)
|
||||
}
|
||||
repo := &authorityAccessRepo{data: d}
|
||||
if err := repo.UpdateAuthority(context.Background(), &biz.Authority{AuthorityID: 12, AuthorityName: "客服主管"}); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
var role authorityPO
|
||||
if err := db.First(&role, "authority_id=12").Error; err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if role.BusinessLevel == nil || *role.BusinessLevel != 2 {
|
||||
t.Fatal("rename changed the stable business role identity")
|
||||
}
|
||||
if err := repo.DeleteAuthority(context.Background(), 12); err != biz.ErrBusinessAuthorityProtected {
|
||||
t.Fatalf("reserved role deletion: %v", err)
|
||||
}
|
||||
if err := repo.CopyAuthority(context.Background(), 12, &biz.Authority{AuthorityID: 14, AuthorityName: "普通副本", DataScope: 1}); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
role = authorityPO{}
|
||||
if err := db.First(&role, "authority_id=14").Error; err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if role.BusinessLevel != nil {
|
||||
t.Fatal("copy inherited the reserved business level")
|
||||
}
|
||||
if err := CheckBusinessRoles(db); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestBusinessRoleMigrationRejectsAmbiguousFallback(t *testing.T) {
|
||||
d := newTransactionTestData(t)
|
||||
if err := d.DB().Exec("INSERT INTO sys_authorities(authority_id,authority_name) VALUES(11,'一级商务'),(12,'一级商务'),(13,'二级商务'),(14,'三级商务')").Error; err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err := migrateBusinessRoles(d.DB()); err == nil {
|
||||
t.Fatal("ambiguous role names were accepted")
|
||||
}
|
||||
var count int64
|
||||
d.DB().Model(&authorityPO{}).Where("business_level IS NOT NULL").Count(&count)
|
||||
if count != 0 {
|
||||
t.Fatal("failed role migration partially changed bindings")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user