mirror of https://github.com/grafana/grafana.git
				
				
				
			
		
			
				
	
	
		
			138 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			138 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			Go
		
	
	
	
| package folderimpl
 | |
| 
 | |
| import (
 | |
| 	"context"
 | |
| 	"testing"
 | |
| 
 | |
| 	"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"
 | |
| 	"github.com/stretchr/testify/require"
 | |
| )
 | |
| 
 | |
| 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, cfg), 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, 0, "prod")
 | |
| 		_ = insertTestDashboard(t, dashboardStore, title, orgId, folder2.ID, "prod")
 | |
| 		folder1 = insertTestFolder(t, dashboardStore, title, orgId, 0, "prod")
 | |
| 
 | |
| 		t.Run("GetFolderByTitle should find the folder", func(t *testing.T) {
 | |
| 			result, err := folderStore.GetFolderByTitle(context.Background(), orgId, title)
 | |
| 			require.NoError(t, err)
 | |
| 			require.Equal(t, folder1.ID, result.ID)
 | |
| 		})
 | |
| 	})
 | |
| 
 | |
| 	t.Run("GetFolderByUID", func(t *testing.T) {
 | |
| 		var orgId int64 = 1
 | |
| 		sqlStore := db.InitTestDB(t)
 | |
| 		folderStore := ProvideDashboardFolderStore(sqlStore)
 | |
| 		folder := insertTestFolder(t, dashboardStore, "TEST", orgId, 0, "prod")
 | |
| 		dash := insertTestDashboard(t, dashboardStore, "Very Unique Name", orgId, folder.ID, "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.ID, d.ID)
 | |
| 			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) {
 | |
| 		var orgId int64 = 1
 | |
| 		sqlStore := db.InitTestDB(t)
 | |
| 		folderStore := ProvideDashboardFolderStore(sqlStore)
 | |
| 		folder := insertTestFolder(t, dashboardStore, "TEST", orgId, 0, "prod")
 | |
| 		dash := insertTestDashboard(t, dashboardStore, "Very Unique Name", orgId, folder.ID, "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.ID, d.ID)
 | |
| 			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 int64, folderId int64, tags ...any) *dashboards.Dashboard {
 | |
| 	t.Helper()
 | |
| 	cmd := dashboards.SaveDashboardCommand{
 | |
| 		OrgID:    orgId,
 | |
| 		FolderID: folderId,
 | |
| 		IsFolder: false,
 | |
| 		Dashboard: simplejson.NewFromAny(map[string]any{
 | |
| 			"id":    nil,
 | |
| 			"title": title,
 | |
| 			"tags":  tags,
 | |
| 		}),
 | |
| 	}
 | |
| 	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, folderId int64, tags ...any) *dashboards.Dashboard {
 | |
| 	t.Helper()
 | |
| 	cmd := dashboards.SaveDashboardCommand{
 | |
| 		OrgID:    orgId,
 | |
| 		FolderID: folderId,
 | |
| 		IsFolder: true,
 | |
| 		Dashboard: simplejson.NewFromAny(map[string]any{
 | |
| 			"id":    nil,
 | |
| 			"title": title,
 | |
| 			"tags":  tags,
 | |
| 		}),
 | |
| 	}
 | |
| 	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
 | |
| }
 |