mirror of https://github.com/grafana/grafana.git
130 lines
3.2 KiB
Go
130 lines
3.2 KiB
Go
package folderimpl
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
|
|
"github.com/grafana/grafana/pkg/services/folder"
|
|
"github.com/grafana/grafana/pkg/services/user"
|
|
)
|
|
|
|
var orgID = int64(1)
|
|
var noPermUsr = &user.SignedInUser{UserID: 1, OrgID: orgID, Permissions: map[int64]map[string][]string{}}
|
|
|
|
func TestSupportBundle(t *testing.T) {
|
|
f := func(uid, parent string) *folder.Folder { return &folder.Folder{UID: uid, ParentUID: parent} }
|
|
for _, tc := range []struct {
|
|
Folders []*folder.Folder
|
|
ExpectedTotal int
|
|
ExpectedDepths map[int]int
|
|
ExpectedChildren map[int]int
|
|
}{
|
|
// Empty folder list
|
|
{
|
|
Folders: []*folder.Folder{},
|
|
ExpectedTotal: 0,
|
|
ExpectedDepths: map[int]int{},
|
|
ExpectedChildren: map[int]int{},
|
|
},
|
|
// Single folder
|
|
{
|
|
Folders: []*folder.Folder{f("a", "")},
|
|
ExpectedTotal: 1,
|
|
ExpectedDepths: map[int]int{1: 1},
|
|
ExpectedChildren: map[int]int{0: 1},
|
|
},
|
|
// Flat folders
|
|
{
|
|
Folders: []*folder.Folder{f("a", ""), f("b", ""), f("c", "")},
|
|
ExpectedTotal: 3,
|
|
ExpectedDepths: map[int]int{1: 3},
|
|
ExpectedChildren: map[int]int{0: 3},
|
|
},
|
|
// Nested folders
|
|
{
|
|
Folders: []*folder.Folder{f("a", ""), f("ab", "a"), f("ac", "a"), f("x", ""), f("xy", "x"), f("xyz", "xy")},
|
|
ExpectedTotal: 6,
|
|
ExpectedDepths: map[int]int{1: 2, 2: 3, 3: 1},
|
|
ExpectedChildren: map[int]int{0: 3, 1: 2, 2: 1},
|
|
},
|
|
} {
|
|
svc := &Service{}
|
|
supportItem, err := svc.supportItemFromFolders(tc.Folders)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
stats := struct {
|
|
Total int `json:"total"`
|
|
Depths map[int]int `json:"depths"`
|
|
Children map[int]int `json:"children"`
|
|
}{}
|
|
if err := json.Unmarshal(supportItem.FileBytes, &stats); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
if stats.Total != tc.ExpectedTotal {
|
|
t.Error("Total mismatch", stats, tc)
|
|
}
|
|
if fmt.Sprint(stats.Depths) != fmt.Sprint(tc.ExpectedDepths) {
|
|
t.Error("Depths mismatch", stats, tc.ExpectedDepths)
|
|
}
|
|
if fmt.Sprint(stats.Children) != fmt.Sprint(tc.ExpectedChildren) {
|
|
t.Error("Depths mismatch", stats, tc.ExpectedChildren)
|
|
}
|
|
}
|
|
}
|
|
func TestSplitFullpath(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
input string
|
|
expected []string
|
|
}{
|
|
{
|
|
name: "empty string",
|
|
input: "",
|
|
expected: []string{},
|
|
},
|
|
{
|
|
name: "root folder",
|
|
input: "/",
|
|
expected: []string{},
|
|
},
|
|
{
|
|
name: "single folder",
|
|
input: "folder",
|
|
expected: []string{"folder"},
|
|
},
|
|
{
|
|
name: "single folder with leading slash",
|
|
input: "/folder",
|
|
expected: []string{"folder"},
|
|
},
|
|
{
|
|
name: "nested folder",
|
|
input: "folder/subfolder/subsubfolder",
|
|
expected: []string{"folder", "subfolder", "subsubfolder"},
|
|
},
|
|
{
|
|
name: "escaped slashes",
|
|
input: "folder\\/with\\/slashes",
|
|
expected: []string{"folder/with/slashes"},
|
|
},
|
|
{
|
|
name: "nested folder with escaped slashes",
|
|
input: "folder\\/with\\/slashes/subfolder\\/with\\/slashes",
|
|
expected: []string{"folder/with/slashes", "subfolder/with/slashes"},
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
actual := SplitFullpath(tt.input)
|
|
assert.Equal(t, tt.expected, actual)
|
|
})
|
|
}
|
|
}
|