Provisioning: Fix deletion order (#111043)

This commit is contained in:
Stephanie Hingtgen
2025-09-12 20:02:13 +00:00
committed by GitHub
parent c52eedbf23
commit c5ed2780ab
2 changed files with 95 additions and 7 deletions
@@ -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)
})
}
}