grafana/pkg/registry/apis/folders/folder_storage_test.go

80 lines
2.5 KiB
Go

package folders
import (
"context"
"testing"
"github.com/stretchr/testify/mock"
"github.com/stretchr/testify/require"
"gopkg.in/ini.v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apiserver/pkg/endpoints/request"
folders "github.com/grafana/grafana/apps/folder/pkg/apis/folder/v1beta1"
"github.com/grafana/grafana/pkg/apimachinery/identity"
grafanarest "github.com/grafana/grafana/pkg/apiserver/rest"
"github.com/grafana/grafana/pkg/services/accesscontrol"
"github.com/grafana/grafana/pkg/services/accesscontrol/actest"
acmock "github.com/grafana/grafana/pkg/services/accesscontrol/mock"
"github.com/grafana/grafana/pkg/services/featuremgmt"
"github.com/grafana/grafana/pkg/services/user"
"github.com/grafana/grafana/pkg/setting"
)
func TestSetDefaultPermissionsWhenCreatingFolder(t *testing.T) {
type testCase struct {
description string
expectedCallsToSetPermissions int
}
tcs := []testCase{
{
description: "folder creation succeeds, via legacy storage",
expectedCallsToSetPermissions: 1,
},
}
for _, tc := range tcs {
t.Run(tc.description, func(t *testing.T) {
folderPermService := acmock.NewMockedPermissionsService()
folderPermService.On("SetPermissions", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return([]accesscontrol.ResourcePermission{}, nil)
cfg := setting.NewCfg()
f := ini.Empty()
f.Section("rbac").Key("resources_with_managed_permissions_on_creation").SetValue("folder")
tempCfg, err := setting.NewCfgFromINIFile(f)
require.NoError(t, err)
cfg.RBAC = tempCfg.RBAC
store := grafanarest.NewMockStorage(t)
store.On("Create", mock.Anything, mock.Anything, mock.Anything, mock.Anything).
Return(&folders.Folder{}, nil).Maybe() // we don't really care
fs := folderStorage{
folderPermissionsSvc: folderPermService,
acService: actest.FakeService{},
store: store,
permissionsOnCreate: cfg.RBAC.PermissionsOnCreation("folder"),
features: featuremgmt.WithFeatures(),
}
obj := &folders.Folder{}
ctx := request.WithNamespace(context.Background(), "org-2")
ctx = identity.WithRequester(ctx, &user.SignedInUser{
UserID: 1,
})
out, err := fs.Create(ctx, obj, func(ctx context.Context,
obj runtime.Object) error {
return nil
},
&metav1.CreateOptions{})
require.NoError(t, err)
require.NotNil(t, out)
folderPermService.AssertNumberOfCalls(t, "SetPermissions", tc.expectedCallsToSetPermissions)
})
}
}