优化
This commit is contained in:
@@ -139,3 +139,46 @@ func TestMenuUpdateRebuildsRelationsWithoutChangingRequestedIdentity(t *testing.
|
||||
t.Fatalf("authority-button links = %d, want 1", links)
|
||||
}
|
||||
}
|
||||
|
||||
func TestSetMenuRolesStrictOnlyChangesManagedAuthorities(t *testing.T) {
|
||||
data := newMenuTestData(t)
|
||||
enableStrictAuthorityTestMode(data)
|
||||
db := data.gormDB.WithContext(context.Background())
|
||||
rootID, actorID, childID, siblingID := uint(888), uint(4001), uint(4002), uint(5001)
|
||||
if err := db.Create(&[]authorityPO{
|
||||
{AuthorityID: rootID, ParentID: authorityUintPointer(0)},
|
||||
{AuthorityID: actorID, ParentID: &rootID},
|
||||
{AuthorityID: childID, ParentID: &actorID},
|
||||
{AuthorityID: siblingID, ParentID: &rootID},
|
||||
}).Error; err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
menu := menuPO{ID: 10, Name: "managed", Path: "managed"}
|
||||
if err := db.Create(&menu).Error; err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err := db.Create(&[]authorityMenuPO{
|
||||
{SysAuthorityAuthorityID: actorID, SysBaseMenuID: menu.ID},
|
||||
{SysAuthorityAuthorityID: siblingID, SysBaseMenuID: menu.ID},
|
||||
}).Error; err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
ctx := biz.NewActorContext(context.Background(), biz.Actor{AuthorityID: actorID})
|
||||
repo := &menuRepo{data: data}
|
||||
if err := repo.SetMenuRoles(ctx, menu.ID, []uint{siblingID}); err == nil {
|
||||
t.Fatal("SetMenuRoles() accepted an out-of-scope authority")
|
||||
}
|
||||
if err := repo.SetMenuRoles(ctx, menu.ID, []uint{childID}); err != nil {
|
||||
t.Fatalf("SetMenuRoles() rejected a managed authority: %v", err)
|
||||
}
|
||||
var siblingCount, childCount int64
|
||||
if err := db.Model(&authorityMenuPO{}).Where("sys_authority_authority_id = ? AND sys_base_menu_id = ?", siblingID, menu.ID).Count(&siblingCount).Error; err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err := db.Model(&authorityMenuPO{}).Where("sys_authority_authority_id = ? AND sys_base_menu_id = ?", childID, menu.ID).Count(&childCount).Error; err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if siblingCount != 1 || childCount != 1 {
|
||||
t.Fatalf("menu-role counts sibling/child = %d/%d, want 1/1", siblingCount, childCount)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user