|
|
|
|
@ -97,7 +97,7 @@ func TestIntegrationFolderService(t *testing.T) { |
|
|
|
|
features: features, |
|
|
|
|
bus: bus.ProvideBus(tracing.InitializeTracerForTest()), |
|
|
|
|
db: db, |
|
|
|
|
accessControl: acimpl.ProvideAccessControl(cfg), |
|
|
|
|
accessControl: acimpl.ProvideAccessControl(features), |
|
|
|
|
metrics: newFoldersMetrics(nil), |
|
|
|
|
registry: make(map[string]folder.RegistryService), |
|
|
|
|
} |
|
|
|
|
@ -363,7 +363,7 @@ func TestIntegrationNestedFolderService(t *testing.T) { |
|
|
|
|
nestedFolderStore := ProvideStore(db) |
|
|
|
|
|
|
|
|
|
b := bus.ProvideBus(tracing.InitializeTracerForTest()) |
|
|
|
|
ac := acimpl.ProvideAccessControl(cfg) |
|
|
|
|
ac := acimpl.ProvideAccessControl(featuremgmt.WithFeatures()) |
|
|
|
|
|
|
|
|
|
serviceWithFlagOn := &Service{ |
|
|
|
|
log: slog.New(logtest.NewTestHandler(t)).With("logger", "test-folder-service"), |
|
|
|
|
@ -731,7 +731,7 @@ func TestNestedFolderServiceFeatureToggle(t *testing.T) { |
|
|
|
|
|
|
|
|
|
dashboardFolderStore := foldertest.NewFakeFolderStore(t) |
|
|
|
|
|
|
|
|
|
db, cfg := sqlstore.InitTestDB(t) |
|
|
|
|
db, _ := sqlstore.InitTestDB(t) |
|
|
|
|
folderService := &Service{ |
|
|
|
|
store: nestedFolderStore, |
|
|
|
|
log: slog.New(logtest.NewTestHandler(t)).With("logger", "test-folder-service"), |
|
|
|
|
@ -739,7 +739,7 @@ func TestNestedFolderServiceFeatureToggle(t *testing.T) { |
|
|
|
|
dashboardStore: &dashStore, |
|
|
|
|
dashboardFolderStore: dashboardFolderStore, |
|
|
|
|
features: featuremgmt.WithFeatures(featuremgmt.FlagNestedFolders), |
|
|
|
|
accessControl: acimpl.ProvideAccessControl(cfg), |
|
|
|
|
accessControl: acimpl.ProvideAccessControl(featuremgmt.WithFeatures()), |
|
|
|
|
metrics: newFoldersMetrics(nil), |
|
|
|
|
} |
|
|
|
|
t.Run("create folder", func(t *testing.T) { |
|
|
|
|
@ -775,7 +775,7 @@ func TestFolderServiceDualWrite(t *testing.T) { |
|
|
|
|
dashboardStore: dashStore, |
|
|
|
|
dashboardFolderStore: dashboardFolderStore, |
|
|
|
|
features: featuremgmt.WithFeatures(featuremgmt.FlagNestedFolders), |
|
|
|
|
accessControl: acimpl.ProvideAccessControl(cfg), |
|
|
|
|
accessControl: acimpl.ProvideAccessControl(featuremgmt.WithFeatures()), |
|
|
|
|
metrics: newFoldersMetrics(nil), |
|
|
|
|
bus: bus.ProvideBus(tracing.InitializeTracerForTest()), |
|
|
|
|
} |
|
|
|
|
@ -836,9 +836,10 @@ func TestNestedFolderService(t *testing.T) { |
|
|
|
|
dashboardFolderStore := foldertest.NewFakeFolderStore(t) |
|
|
|
|
|
|
|
|
|
nestedFolderStore := NewFakeStore() |
|
|
|
|
features := featuremgmt.WithFeatures() |
|
|
|
|
|
|
|
|
|
db, _ := sqlstore.InitTestDB(t) |
|
|
|
|
folderSvc := setup(t, dashStore, dashboardFolderStore, nestedFolderStore, featuremgmt.WithFeatures(), acimpl.ProvideAccessControl(setting.NewCfg()), db) |
|
|
|
|
folderSvc := setup(t, dashStore, dashboardFolderStore, nestedFolderStore, features, acimpl.ProvideAccessControl(features), db) |
|
|
|
|
_, err := folderSvc.Create(context.Background(), &folder.CreateFolderCommand{ |
|
|
|
|
OrgID: orgID, |
|
|
|
|
Title: dash.Title, |
|
|
|
|
@ -869,9 +870,10 @@ func TestNestedFolderService(t *testing.T) { |
|
|
|
|
|
|
|
|
|
dashboardFolderStore := foldertest.NewFakeFolderStore(t) |
|
|
|
|
nestedFolderStore := NewFakeStore() |
|
|
|
|
features := featuremgmt.WithFeatures("nestedFolders") |
|
|
|
|
|
|
|
|
|
db, _ := sqlstore.InitTestDB(t) |
|
|
|
|
folderSvc := setup(t, dashStore, dashboardFolderStore, nestedFolderStore, featuremgmt.WithFeatures("nestedFolders"), acimpl.ProvideAccessControl(setting.NewCfg()), db) |
|
|
|
|
folderSvc := setup(t, dashStore, dashboardFolderStore, nestedFolderStore, features, acimpl.ProvideAccessControl(features), db) |
|
|
|
|
_, err := folderSvc.Create(context.Background(), &folder.CreateFolderCommand{ |
|
|
|
|
OrgID: orgID, |
|
|
|
|
Title: dash.Title, |
|
|
|
|
@ -902,7 +904,8 @@ func TestNestedFolderService(t *testing.T) { |
|
|
|
|
dashStore.On("ValidateDashboardBeforeSave", mock.Anything, mock.AnythingOfType("*dashboards.Dashboard"), mock.AnythingOfType("bool")).Return(true, nil) |
|
|
|
|
dashStore.On("SaveDashboard", mock.Anything, mock.AnythingOfType("dashboards.SaveDashboardCommand")).Return(&dashboards.Dashboard{}, nil) |
|
|
|
|
|
|
|
|
|
folderSvc := setup(t, dashStore, nil, nil, featuremgmt.WithFeatures("nestedFolders"), acimpl.ProvideAccessControl(setting.NewCfg()), dbtest.NewFakeDB()) |
|
|
|
|
features := featuremgmt.WithFeatures("nestedFolders") |
|
|
|
|
folderSvc := setup(t, dashStore, nil, nil, features, acimpl.ProvideAccessControl(features), dbtest.NewFakeDB()) |
|
|
|
|
_, err := folderSvc.Create(context.Background(), &folder.CreateFolderCommand{ |
|
|
|
|
OrgID: orgID, |
|
|
|
|
Title: dash.Title, |
|
|
|
|
@ -937,7 +940,8 @@ func TestNestedFolderService(t *testing.T) { |
|
|
|
|
|
|
|
|
|
nestedFolderStore := NewFakeStore() |
|
|
|
|
db, _ := sqlstore.InitTestDB(t) |
|
|
|
|
folderSvc := setup(t, dashStore, dashboardFolderStore, nestedFolderStore, featuremgmt.WithFeatures("nestedFolders"), acimpl.ProvideAccessControl(setting.NewCfg()), db) |
|
|
|
|
features := featuremgmt.WithFeatures("nestedFolders") |
|
|
|
|
folderSvc := setup(t, dashStore, dashboardFolderStore, nestedFolderStore, features, acimpl.ProvideAccessControl(features), db) |
|
|
|
|
_, err := folderSvc.Create(context.Background(), &folder.CreateFolderCommand{ |
|
|
|
|
OrgID: orgID, |
|
|
|
|
Title: dash.Title, |
|
|
|
|
@ -1071,7 +1075,8 @@ func TestNestedFolderService(t *testing.T) { |
|
|
|
|
nestedFolderUser := &user.SignedInUser{UserID: 1, OrgID: orgID, Permissions: map[int64]map[string][]string{}} |
|
|
|
|
nestedFolderUser.Permissions[orgID] = map[string][]string{dashboards.ActionFoldersWrite: {dashboards.ScopeFoldersProvider.GetResourceScopeUID("wrong_uid")}} |
|
|
|
|
|
|
|
|
|
folderSvc := setup(t, dashStore, dashboardFolderStore, nestedFolderStore, featuremgmt.WithFeatures("nestedFolders"), acimpl.ProvideAccessControl(setting.NewCfg()), dbtest.NewFakeDB()) |
|
|
|
|
features := featuremgmt.WithFeatures("nestedFolders") |
|
|
|
|
folderSvc := setup(t, dashStore, dashboardFolderStore, nestedFolderStore, features, acimpl.ProvideAccessControl(features), dbtest.NewFakeDB()) |
|
|
|
|
_, err := folderSvc.Move(context.Background(), &folder.MoveFolderCommand{UID: "myFolder", NewParentUID: "newFolder", OrgID: orgID, SignedInUser: nestedFolderUser}) |
|
|
|
|
require.ErrorIs(t, err, dashboards.ErrFolderAccessDenied) |
|
|
|
|
}) |
|
|
|
|
@ -1091,7 +1096,8 @@ func TestNestedFolderService(t *testing.T) { |
|
|
|
|
nestedFolderUser := &user.SignedInUser{UserID: 1, OrgID: orgID, Permissions: map[int64]map[string][]string{}} |
|
|
|
|
nestedFolderUser.Permissions[orgID] = map[string][]string{dashboards.ActionFoldersWrite: {dashboards.ScopeFoldersProvider.GetResourceScopeUID("newFolder")}} |
|
|
|
|
|
|
|
|
|
folderSvc := setup(t, dashStore, dashboardFolderStore, nestedFolderStore, featuremgmt.WithFeatures("nestedFolders"), acimpl.ProvideAccessControl(setting.NewCfg()), dbtest.NewFakeDB()) |
|
|
|
|
features := featuremgmt.WithFeatures("nestedFolders") |
|
|
|
|
folderSvc := setup(t, dashStore, dashboardFolderStore, nestedFolderStore, features, acimpl.ProvideAccessControl(features), dbtest.NewFakeDB()) |
|
|
|
|
_, err := folderSvc.Move(context.Background(), &folder.MoveFolderCommand{UID: "myFolder", NewParentUID: "newFolder", OrgID: orgID, SignedInUser: nestedFolderUser}) |
|
|
|
|
require.NoError(t, err) |
|
|
|
|
// the folder is set inside InTransaction() but the fake one is called
|
|
|
|
|
@ -1108,7 +1114,8 @@ func TestNestedFolderService(t *testing.T) { |
|
|
|
|
nestedFolderUser := &user.SignedInUser{UserID: 1, OrgID: orgID, Permissions: map[int64]map[string][]string{}} |
|
|
|
|
nestedFolderUser.Permissions[orgID] = map[string][]string{dashboards.ActionFoldersWrite: {dashboards.ScopeFoldersProvider.GetResourceScopeUID("")}} |
|
|
|
|
|
|
|
|
|
folderSvc := setup(t, dashStore, dashboardFolderStore, nestedFolderStore, featuremgmt.WithFeatures("nestedFolders"), acimpl.ProvideAccessControl(setting.NewCfg()), dbtest.NewFakeDB()) |
|
|
|
|
features := featuremgmt.WithFeatures("nestedFolders") |
|
|
|
|
folderSvc := setup(t, dashStore, dashboardFolderStore, nestedFolderStore, features, acimpl.ProvideAccessControl(features), dbtest.NewFakeDB()) |
|
|
|
|
_, err := folderSvc.Move(context.Background(), &folder.MoveFolderCommand{UID: "myFolder", NewParentUID: "", OrgID: orgID, SignedInUser: nestedFolderUser}) |
|
|
|
|
require.Error(t, err, dashboards.ErrFolderAccessDenied) |
|
|
|
|
}) |
|
|
|
|
@ -1128,7 +1135,8 @@ func TestNestedFolderService(t *testing.T) { |
|
|
|
|
nestedFolderUser := &user.SignedInUser{UserID: 1, OrgID: orgID, Permissions: map[int64]map[string][]string{}} |
|
|
|
|
nestedFolderUser.Permissions[orgID] = map[string][]string{dashboards.ActionFoldersCreate: {}} |
|
|
|
|
|
|
|
|
|
folderSvc := setup(t, dashStore, dashboardFolderStore, nestedFolderStore, featuremgmt.WithFeatures("nestedFolders"), acimpl.ProvideAccessControl(setting.NewCfg()), dbtest.NewFakeDB()) |
|
|
|
|
features := featuremgmt.WithFeatures("nestedFolders") |
|
|
|
|
folderSvc := setup(t, dashStore, dashboardFolderStore, nestedFolderStore, features, acimpl.ProvideAccessControl(features), dbtest.NewFakeDB()) |
|
|
|
|
_, err := folderSvc.Move(context.Background(), &folder.MoveFolderCommand{UID: "myFolder", NewParentUID: "", OrgID: orgID, SignedInUser: nestedFolderUser}) |
|
|
|
|
require.NoError(t, err) |
|
|
|
|
// the folder is set inside InTransaction() but the fake one is called
|
|
|
|
|
@ -1286,7 +1294,7 @@ func TestIntegrationNestedFolderSharedWithMe(t *testing.T) { |
|
|
|
|
nestedFolderStore := ProvideStore(db) |
|
|
|
|
|
|
|
|
|
b := bus.ProvideBus(tracing.InitializeTracerForTest()) |
|
|
|
|
ac := acimpl.ProvideAccessControl(cfg) |
|
|
|
|
ac := acimpl.ProvideAccessControl(featuresFlagOn) |
|
|
|
|
|
|
|
|
|
serviceWithFlagOn := &Service{ |
|
|
|
|
log: slog.New(logtest.NewTestHandler(t)).With("logger", "test-folder-service"), |
|
|
|
|
@ -1654,7 +1662,7 @@ func TestFolderServiceGetFolder(t *testing.T) { |
|
|
|
|
nestedFolderStore := ProvideStore(db) |
|
|
|
|
|
|
|
|
|
b := bus.ProvideBus(tracing.InitializeTracerForTest()) |
|
|
|
|
ac := acimpl.ProvideAccessControl(cfg) |
|
|
|
|
ac := acimpl.ProvideAccessControl(featuresFlagOff) |
|
|
|
|
|
|
|
|
|
return Service{ |
|
|
|
|
log: slog.New(logtest.NewTestHandler(t)).With("logger", "test-folder-service"), |
|
|
|
|
@ -1736,7 +1744,7 @@ func TestFolderServiceGetFolders(t *testing.T) { |
|
|
|
|
nestedFolderStore := ProvideStore(db) |
|
|
|
|
|
|
|
|
|
b := bus.ProvideBus(tracing.InitializeTracerForTest()) |
|
|
|
|
ac := acimpl.ProvideAccessControl(cfg) |
|
|
|
|
ac := acimpl.ProvideAccessControl(featuresFlagOff) |
|
|
|
|
|
|
|
|
|
serviceWithFlagOff := &Service{ |
|
|
|
|
log: slog.New(logtest.NewTestHandler(t)).With("logger", "test-folder-service"), |
|
|
|
|
@ -1820,7 +1828,7 @@ func TestGetChildrenFilterByPermission(t *testing.T) { |
|
|
|
|
nestedFolderStore := ProvideStore(db) |
|
|
|
|
|
|
|
|
|
b := bus.ProvideBus(tracing.InitializeTracerForTest()) |
|
|
|
|
ac := acimpl.ProvideAccessControl(cfg) |
|
|
|
|
ac := acimpl.ProvideAccessControl(featuresFlagOff) |
|
|
|
|
|
|
|
|
|
features := featuremgmt.WithFeatures(featuremgmt.FlagNestedFolders) |
|
|
|
|
|
|
|
|
|
|