mirror of https://github.com/grafana/grafana.git
80 lines
2.5 KiB
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)
|
|
})
|
|
}
|
|
}
|