This commit is contained in:
Yvan
2026-08-18 15:04:07 +08:00
parent 10ccc005be
commit 1ef8ecb7b2
42 changed files with 3027 additions and 296 deletions
+43
View File
@@ -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)
}
}