mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
* Remove folderID from service tests * Remove folderID from ngalert migration tests * Remove tests related to folderIDs * Roll back change Before removing FolderID from this test, we need to adjust the code * Remove FolderID from publicdashboard pkg * Add back annotations test
156 lines
5.4 KiB
Go
156 lines
5.4 KiB
Go
package folderimpl
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"github.com/grafana/grafana/pkg/components/simplejson"
|
|
"github.com/grafana/grafana/pkg/infra/db"
|
|
"github.com/grafana/grafana/pkg/services/dashboards"
|
|
"github.com/grafana/grafana/pkg/services/dashboards/database"
|
|
"github.com/grafana/grafana/pkg/services/featuremgmt"
|
|
"github.com/grafana/grafana/pkg/services/quota/quotatest"
|
|
"github.com/grafana/grafana/pkg/services/sqlstore"
|
|
"github.com/grafana/grafana/pkg/services/tag/tagimpl"
|
|
"github.com/grafana/grafana/pkg/setting"
|
|
)
|
|
|
|
func TestIntegrationDashboardFolderStore(t *testing.T) {
|
|
var sqlStore *sqlstore.SQLStore
|
|
var cfg *setting.Cfg
|
|
var dashboardStore dashboards.Store
|
|
|
|
setup := func() {
|
|
sqlStore, cfg = db.InitTestDBwithCfg(t)
|
|
quotaService := quotatest.New(false, nil)
|
|
var err error
|
|
dashboardStore, err = database.ProvideDashboardStore(sqlStore, cfg, featuremgmt.WithFeatures(featuremgmt.FlagPanelTitleSearch), tagimpl.ProvideService(sqlStore), quotaService)
|
|
require.NoError(t, err)
|
|
}
|
|
t.Run("Given dashboard and folder with the same title", func(t *testing.T) {
|
|
setup()
|
|
var orgId int64 = 1
|
|
title := "Very Unique Name"
|
|
var sqlStore *sqlstore.SQLStore
|
|
var folder1, folder2 *dashboards.Dashboard
|
|
sqlStore = db.InitTestDB(t)
|
|
folderStore := ProvideDashboardFolderStore(sqlStore)
|
|
folder2 = insertTestFolder(t, dashboardStore, "TEST", orgId, "", "prod")
|
|
_ = insertTestDashboard(t, dashboardStore, title, orgId, folder2.ID, folder2.UID, "prod")
|
|
folder1 = insertTestFolder(t, dashboardStore, title, orgId, "", "prod")
|
|
|
|
t.Run("GetFolderByTitle should find the folder", func(t *testing.T) {
|
|
result, err := folderStore.GetFolderByTitle(context.Background(), orgId, title, nil)
|
|
require.NoError(t, err)
|
|
require.Equal(t, folder1.UID, result.UID)
|
|
})
|
|
|
|
t.Run("GetFolderByTitle should find the folder by folderUID", func(t *testing.T) {
|
|
folder3 := insertTestFolder(t, dashboardStore, title, orgId, folder2.UID, "prod")
|
|
result, err := folderStore.GetFolderByTitle(context.Background(), orgId, title, &folder2.UID)
|
|
require.NoError(t, err)
|
|
require.Equal(t, folder3.UID, result.UID)
|
|
})
|
|
})
|
|
|
|
t.Run("GetFolderByUID", func(t *testing.T) {
|
|
setup()
|
|
var orgId int64 = 1
|
|
sqlStore := db.InitTestDB(t)
|
|
folderStore := ProvideDashboardFolderStore(sqlStore)
|
|
folder := insertTestFolder(t, dashboardStore, "TEST", orgId, "", "prod")
|
|
dash := insertTestDashboard(t, dashboardStore, "Very Unique Name", orgId, folder.ID, folder.UID, "prod")
|
|
|
|
t.Run("should return folder by UID", func(t *testing.T) {
|
|
d, err := folderStore.GetFolderByUID(context.Background(), orgId, folder.UID)
|
|
require.Equal(t, folder.UID, d.UID)
|
|
require.NoError(t, err)
|
|
})
|
|
t.Run("should not find dashboard", func(t *testing.T) {
|
|
d, err := folderStore.GetFolderByUID(context.Background(), orgId, dash.UID)
|
|
require.Nil(t, d)
|
|
require.ErrorIs(t, err, dashboards.ErrFolderNotFound)
|
|
})
|
|
t.Run("should search in organization", func(t *testing.T) {
|
|
d, err := folderStore.GetFolderByUID(context.Background(), orgId+1, folder.UID)
|
|
require.Nil(t, d)
|
|
require.ErrorIs(t, err, dashboards.ErrFolderNotFound)
|
|
})
|
|
})
|
|
|
|
t.Run("GetFolderByID", func(t *testing.T) {
|
|
setup()
|
|
var orgId int64 = 1
|
|
sqlStore := db.InitTestDB(t)
|
|
folderStore := ProvideDashboardFolderStore(sqlStore)
|
|
folder := insertTestFolder(t, dashboardStore, "TEST", orgId, "", "prod")
|
|
dash := insertTestDashboard(t, dashboardStore, "Very Unique Name", orgId, folder.ID, folder.UID, "prod")
|
|
|
|
t.Run("should return folder by ID", func(t *testing.T) {
|
|
d, err := folderStore.GetFolderByID(context.Background(), orgId, folder.ID)
|
|
require.Equal(t, folder.UID, d.UID)
|
|
require.NoError(t, err)
|
|
})
|
|
t.Run("should not find dashboard", func(t *testing.T) {
|
|
d, err := folderStore.GetFolderByID(context.Background(), orgId, dash.ID)
|
|
require.Nil(t, d)
|
|
require.ErrorIs(t, err, dashboards.ErrFolderNotFound)
|
|
})
|
|
t.Run("should search in organization", func(t *testing.T) {
|
|
d, err := folderStore.GetFolderByID(context.Background(), orgId+1, folder.ID)
|
|
require.Nil(t, d)
|
|
require.ErrorIs(t, err, dashboards.ErrFolderNotFound)
|
|
})
|
|
})
|
|
}
|
|
|
|
func insertTestDashboard(t *testing.T, dashboardStore dashboards.Store, title string, orgId, folderID int64, folderUID string, tags ...any) *dashboards.Dashboard {
|
|
t.Helper()
|
|
cmd := dashboards.SaveDashboardCommand{
|
|
OrgID: orgId,
|
|
FolderUID: folderUID,
|
|
FolderID: folderID, // nolint:staticcheck
|
|
IsFolder: false,
|
|
Dashboard: simplejson.NewFromAny(map[string]any{
|
|
"id": nil,
|
|
"title": title,
|
|
"tags": tags,
|
|
}),
|
|
}
|
|
if folderUID != "" {
|
|
cmd.FolderUID = folderUID
|
|
}
|
|
dash, err := dashboardStore.SaveDashboard(context.Background(), cmd)
|
|
require.NoError(t, err)
|
|
require.NotNil(t, dash)
|
|
dash.Data.Set("id", dash.ID)
|
|
dash.Data.Set("uid", dash.UID)
|
|
return dash
|
|
}
|
|
|
|
func insertTestFolder(t *testing.T, dashboardStore dashboards.Store, title string, orgId int64, folderUID string, tags ...any) *dashboards.Dashboard {
|
|
t.Helper()
|
|
cmd := dashboards.SaveDashboardCommand{
|
|
OrgID: orgId,
|
|
// FolderID: folderId, // nolint:staticcheck
|
|
FolderUID: folderUID,
|
|
IsFolder: true,
|
|
Dashboard: simplejson.NewFromAny(map[string]any{
|
|
"id": nil,
|
|
"title": title,
|
|
"tags": tags,
|
|
}),
|
|
}
|
|
if folderUID != "" {
|
|
cmd.FolderUID = folderUID
|
|
}
|
|
dash, err := dashboardStore.SaveDashboard(context.Background(), cmd)
|
|
require.NoError(t, err)
|
|
require.NotNil(t, dash)
|
|
dash.Data.Set("id", dash.ID)
|
|
dash.Data.Set("uid", dash.UID)
|
|
return dash
|
|
}
|