2025-04-01 10:38:02 +09:00

107 lines
2.5 KiB
Go

package rbac
import (
"fmt"
"testing"
"github.com/grafana/grafana/pkg/services/authz/rbac/store"
"github.com/stretchr/testify/assert"
)
func Test_Tree(t *testing.T) {
tree := newFolderTree([]store.Folder{
{UID: "1"},
{UID: "11", ParentUID: strPtr("1")},
{UID: "12", ParentUID: strPtr("1")},
{UID: "111", ParentUID: strPtr("11")},
{UID: "1111", ParentUID: strPtr("111")},
{UID: "121", ParentUID: strPtr("12")},
// not ordered insert to make sure patching works correctly
{UID: "22", ParentUID: strPtr("2")},
{UID: "222", ParentUID: strPtr("22")},
{UID: "21", ParentUID: strPtr("2")},
{UID: "2"},
})
verify := func(t *testing.T, expected []string, visited map[string]bool) {
assert.Len(t, visited, len(expected))
for _, e := range expected {
assert.True(t, visited[e], fmt.Sprintf("did not visit node: %s", e))
}
}
t.Run("should iterate all children of folder 1", func(t *testing.T) {
visited := map[string]bool{}
for n := range tree.Children("1") {
visited[n.UID] = true
}
expected := []string{"11", "111", "1111", "12", "121"}
verify(t, expected, visited)
})
t.Run("should iterate all children of folder 2", func(t *testing.T) {
visited := map[string]bool{}
for n := range tree.Children("2") {
visited[n.UID] = true
}
expected := []string{"21", "22", "222"}
verify(t, expected, visited)
})
t.Run("should iterate all children of folder 111", func(t *testing.T) {
visited := map[string]bool{}
for n := range tree.Children("111") {
visited[n.UID] = true
}
expected := []string{"1111"}
verify(t, expected, visited)
})
t.Run("should iterate all children of folder 1111", func(t *testing.T) {
visited := map[string]bool{}
for n := range tree.Children("1111") {
visited[n.UID] = true
}
expected := []string{}
verify(t, expected, visited)
})
t.Run("should iterate all acestors of folder 1111", func(t *testing.T) {
visited := map[string]bool{}
for n := range tree.Ancestors("1111") {
visited[n.UID] = true
}
expected := []string{"1", "11", "111"}
verify(t, expected, visited)
})
t.Run("should iterate all acestors of folder 11", func(t *testing.T) {
visited := map[string]bool{}
for n := range tree.Ancestors("11") {
visited[n.UID] = true
}
expected := []string{"1"}
verify(t, expected, visited)
})
t.Run("should iterate all acestors of folder 222", func(t *testing.T) {
visited := map[string]bool{}
for n := range tree.Ancestors("222") {
visited[n.UID] = true
}
expected := []string{"2", "22"}
verify(t, expected, visited)
})
}