From 225c8dbba79aca04071f68500b9217ff70c8af11 Mon Sep 17 00:00:00 2001 From: Sofia Papagiannaki <1632407+papagian@users.noreply.github.com> Date: Wed, 8 Feb 2023 17:16:53 +0200 Subject: [PATCH] Chore: Fix fetching the General folder when nested folders is set and improve error handling (#62951) * Nested folders: Modify Get() not to fail fetching the General folder * Add test --- pkg/services/folder/folderimpl/folder.go | 10 ++++--- pkg/services/folder/folderimpl/folder_test.go | 26 +++++++++++++++++++ pkg/services/folder/model.go | 6 +++++ 3 files changed, 39 insertions(+), 3 deletions(-) diff --git a/pkg/services/folder/folderimpl/folder.go b/pkg/services/folder/folderimpl/folder.go index 21e8423d376..fe267bfafca 100644 --- a/pkg/services/folder/folderimpl/folder.go +++ b/pkg/services/folder/folderimpl/folder.go @@ -34,7 +34,7 @@ type Service struct { features featuremgmt.FeatureToggles accessControl accesscontrol.AccessControl - // bus is currently used to publish events that cause scheduler to update rules. + // bus is currently used to publish event in case of title change bus bus.Bus } @@ -121,8 +121,12 @@ func (s *Service) Get(ctx context.Context, cmd *folder.GetFolderQuery) (*folder. cmd.ID = nil cmd.UID = &dashFolder.UID } - f, err := s.store.Get(ctx, *cmd) + if dashFolder.IsGeneral() { + return dashFolder, nil + } + + f, err := s.store.Get(ctx, *cmd) if err != nil { return nil, err } @@ -191,7 +195,7 @@ func (s *Service) GetParents(ctx context.Context, q folder.GetParentsQuery) ([]* func (s *Service) getFolderByID(ctx context.Context, user *user.SignedInUser, id int64, orgID int64) (*folder.Folder, error) { if id == 0 { - return &folder.Folder{ID: id, Title: "General"}, nil + return &folder.GeneralFolder, nil } dashFolder, err := s.dashboardFolderStore.GetFolderByID(ctx, orgID, id) diff --git a/pkg/services/folder/folderimpl/folder_test.go b/pkg/services/folder/folderimpl/folder_test.go index 8da103d558c..71147b529c4 100644 --- a/pkg/services/folder/folderimpl/folder_test.go +++ b/pkg/services/folder/folderimpl/folder_test.go @@ -763,6 +763,32 @@ func TestNestedFolderService(t *testing.T) { assert.ErrorIs(t, err, folder.ErrMaximumDepthReached) require.NotNil(t, actualCmd) }) + + t.Run("get default folder, no error", func(t *testing.T) { + g := guardian.New + guardian.MockDashboardGuardian(&guardian.FakeDashboardGuardian{CanSaveValue: true}) + t.Cleanup(func() { + guardian.New = g + }) + + // dashboard store commands that should be called. + dashStore := &dashboards.FakeDashboardStore{} + + dashboardFolderStore := foldertest.NewFakeFolderStore(t) + + nestedFolderStore := NewFakeStore() + nestedFolderStore.ExpectedError = folder.ErrFolderNotFound + + folderSvc := setup(t, dashStore, dashboardFolderStore, nestedFolderStore, featuremgmt.WithFeatures("nestedFolders"), actest.FakeAccessControl{ + ExpectedEvaluate: true, + }) + _, err := folderSvc.Get(context.Background(), &folder.GetFolderQuery{ + OrgID: orgID, + ID: &folder.GeneralFolder.ID, + SignedInUser: usr, + }) + require.NoError(t, err) + }) }) } diff --git a/pkg/services/folder/model.go b/pkg/services/folder/model.go index 50394685b9b..ef32296a9c2 100644 --- a/pkg/services/folder/model.go +++ b/pkg/services/folder/model.go @@ -42,6 +42,12 @@ type Folder struct { HasACL bool } +var GeneralFolder = Folder{ID: 0, Title: "General"} + +func (f *Folder) IsGeneral() bool { + return f.ID == GeneralFolder.ID && f.Title == GeneralFolder.Title +} + type FolderDTO struct { Folder