diff --git a/pkg/services/dashboards/database/database.go b/pkg/services/dashboards/database/database.go index 8bbdea05fdb..c3ae1f976b3 100644 --- a/pkg/services/dashboards/database/database.go +++ b/pkg/services/dashboards/database/database.go @@ -536,6 +536,10 @@ func (d *dashboardStore) GetSoftDeletedDashboard(ctx context.Context, orgID int6 func (d *dashboardStore) RestoreDashboard(ctx context.Context, orgID int64, dashboardUID string, folder *folder.Folder) error { return d.store.WithTransactionalDbSession(ctx, func(sess *db.Session) error { + if folder == nil || folder.UID == "" { + _, err := sess.Exec("UPDATE dashboard SET deleted=NULL, folder_id=0, folder_uid=NULL WHERE org_id=? AND uid=?", orgID, dashboardUID) + return err + } // nolint:staticcheck _, err := sess.Exec("UPDATE dashboard SET deleted=NULL, folder_id = ?, folder_uid=? WHERE org_id=? AND uid=?", folder.ID, folder.UID, orgID, dashboardUID) return err diff --git a/pkg/services/folder/folderimpl/folder.go b/pkg/services/folder/folderimpl/folder.go index 8dd76b6505f..073e6ca239f 100644 --- a/pkg/services/folder/folderimpl/folder.go +++ b/pkg/services/folder/folderimpl/folder.go @@ -209,7 +209,10 @@ func (s *Service) Get(ctx context.Context, q *folder.GetFolderQuery) (*folder.Fo var dashFolder *folder.Folder var err error switch { - case q.UID != nil && *q.UID != "": + case q.UID != nil: + if *q.UID == "" { + return &folder.GeneralFolder, nil + } dashFolder, err = s.getFolderByUID(ctx, q.OrgID, *q.UID) if err != nil { return nil, err diff --git a/pkg/services/folder/folderimpl/folder_test.go b/pkg/services/folder/folderimpl/folder_test.go index 5e9485e4bc8..f47d4698769 100644 --- a/pkg/services/folder/folderimpl/folder_test.go +++ b/pkg/services/folder/folderimpl/folder_test.go @@ -395,6 +395,21 @@ func TestIntegrationFolderService(t *testing.T) { "For error '%s' expected error '%s', actual '%s'", tc.ActualError, tc.ExpectedError, actualError) } }) + + t.Run("Returns root folder", func(t *testing.T) { + t.Run("When the folder UID is blank should return the root folder", func(t *testing.T) { + emptyString := "" + actual, err := service.Get(context.Background(), &folder.GetFolderQuery{ + UID: &emptyString, + OrgID: 1, + SignedInUser: usr, + }) + + assert.NoError(t, err) + assert.Equal(t, folder.GeneralFolder.UID, actual.UID) + assert.Equal(t, folder.GeneralFolder.Title, actual.Title) + }) + }) }) }