Provisioning: Fix deletion order (#111043)
This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
package controller
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
provisioning "github.com/grafana/grafana/apps/provisioning/pkg/apis/provisioning/v0alpha1"
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
func TestSortResourceListForDeletion(t *testing.T) {
|
||||
testCases := []struct {
|
||||
name string
|
||||
input provisioning.ResourceList
|
||||
expected provisioning.ResourceList
|
||||
}{
|
||||
{
|
||||
name: "Non-folder items first, folders sorted by depth",
|
||||
input: provisioning.ResourceList{
|
||||
Items: []provisioning.ResourceListItem{
|
||||
{Group: "dashboard.grafana.app", Path: "dashboard1.json"},
|
||||
{Group: "folder.grafana.app", Path: "folder1"},
|
||||
{Group: "folder.grafana.app", Path: "folder1/subfolder1/subfolder2", Folder: "subfolder1"},
|
||||
{Group: "dashboard.grafana.app", Path: "dashboard2.json"},
|
||||
{Group: "folder.grafana.app", Path: "folder2"},
|
||||
{Group: "folder.grafana.app", Path: "folder1/subfolder1", Folder: "folder1"},
|
||||
},
|
||||
},
|
||||
expected: provisioning.ResourceList{
|
||||
Items: []provisioning.ResourceListItem{
|
||||
{Group: "dashboard.grafana.app", Path: "dashboard1.json"},
|
||||
{Group: "dashboard.grafana.app", Path: "dashboard2.json"},
|
||||
{Group: "folder.grafana.app", Path: "folder1/subfolder1/subfolder2", Folder: "subfolder1"},
|
||||
{Group: "folder.grafana.app", Path: "folder1/subfolder1", Folder: "folder1"},
|
||||
{Group: "folder.grafana.app", Path: "folder1"},
|
||||
{Group: "folder.grafana.app", Path: "folder2"},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "Folders without parent should be last",
|
||||
input: provisioning.ResourceList{
|
||||
Items: []provisioning.ResourceListItem{
|
||||
{Group: "folder.grafana.app", Path: "folder1"},
|
||||
{Group: "folder.grafana.app", Path: "folder2", Folder: "folder1"}, // if a repo is created with a folder in grafana (here folder1), the path will not have /, but the folder will be set
|
||||
{Group: "folder.grafana.app", Path: "folder2/subfolder1", Folder: "folder2"},
|
||||
{Group: "folder.grafana.app", Path: "folder3", Folder: "folder1"},
|
||||
},
|
||||
},
|
||||
expected: provisioning.ResourceList{
|
||||
Items: []provisioning.ResourceListItem{
|
||||
{Group: "folder.grafana.app", Path: "folder2/subfolder1", Folder: "folder2"},
|
||||
{Group: "folder.grafana.app", Path: "folder2", Folder: "folder1"},
|
||||
{Group: "folder.grafana.app", Path: "folder3", Folder: "folder1"},
|
||||
{Group: "folder.grafana.app", Path: "folder1"},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
for _, tc := range testCases {
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
sortResourceListForDeletion(&tc.input)
|
||||
assert.Equal(t, tc.expected, tc.input)
|
||||
})
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user