mirror of https://github.com/grafana/grafana
Dashboards: Split GetDashboardVersions method (#49967)
* Split GetDashboarVersions method * Add sqlstore dialect and tests * Fix signature of PAtchPreference * Add GetDialect to sqlstore and remove GetDashboardVersions * Add GetDialect to db interface * Implement List * add deleted test function * Remove GetDialect from sqlstore interface * Remove deleted method from mock * Refactor testpull/50099/head
parent
3e81fa0716
commit
bdf50f3dd2
@ -1,42 +0,0 @@ |
||||
package sqlstore |
||||
|
||||
import ( |
||||
"context" |
||||
|
||||
"github.com/grafana/grafana/pkg/models" |
||||
) |
||||
|
||||
// GetDashboardVersions gets all dashboard versions for the given dashboard ID.
|
||||
func (ss *SQLStore) GetDashboardVersions(ctx context.Context, query *models.GetDashboardVersionsQuery) error { |
||||
return ss.WithDbSession(ctx, func(sess *DBSession) error { |
||||
if query.Limit == 0 { |
||||
query.Limit = 1000 |
||||
} |
||||
|
||||
err := sess.Table("dashboard_version"). |
||||
Select(`dashboard_version.id, |
||||
dashboard_version.dashboard_id, |
||||
dashboard_version.parent_version, |
||||
dashboard_version.restored_from, |
||||
dashboard_version.version, |
||||
dashboard_version.created, |
||||
dashboard_version.created_by as created_by_id, |
||||
dashboard_version.message, |
||||
dashboard_version.data,`+ |
||||
dialect.Quote("user")+`.login as created_by`). |
||||
Join("LEFT", dialect.Quote("user"), `dashboard_version.created_by = `+dialect.Quote("user")+`.id`). |
||||
Join("LEFT", "dashboard", `dashboard.id = dashboard_version.dashboard_id`). |
||||
Where("dashboard_version.dashboard_id=? AND dashboard.org_id=?", query.DashboardId, query.OrgId). |
||||
OrderBy("dashboard_version.version DESC"). |
||||
Limit(query.Limit, query.Start). |
||||
Find(&query.Result) |
||||
if err != nil { |
||||
return err |
||||
} |
||||
|
||||
if len(query.Result) < 1 { |
||||
return models.ErrNoVersionsForDashboardId |
||||
} |
||||
return nil |
||||
}) |
||||
} |
||||
@ -1,107 +0,0 @@ |
||||
package sqlstore |
||||
|
||||
import ( |
||||
"context" |
||||
"testing" |
||||
"time" |
||||
|
||||
"github.com/stretchr/testify/require" |
||||
|
||||
"github.com/grafana/grafana/pkg/components/simplejson" |
||||
"github.com/grafana/grafana/pkg/models" |
||||
"github.com/grafana/grafana/pkg/util" |
||||
) |
||||
|
||||
func updateTestDashboard(t *testing.T, sqlStore *SQLStore, dashboard *models.Dashboard, data map[string]interface{}) { |
||||
t.Helper() |
||||
|
||||
data["id"] = dashboard.Id |
||||
|
||||
parentVersion := dashboard.Version |
||||
|
||||
cmd := models.SaveDashboardCommand{ |
||||
OrgId: dashboard.OrgId, |
||||
Overwrite: true, |
||||
Dashboard: simplejson.NewFromAny(data), |
||||
} |
||||
var dash *models.Dashboard |
||||
err := sqlStore.WithDbSession(context.Background(), func(sess *DBSession) error { |
||||
var existing models.Dashboard |
||||
dash = cmd.GetDashboardModel() |
||||
dashWithIdExists, err := sess.Where("id=? AND org_id=?", dash.Id, dash.OrgId).Get(&existing) |
||||
require.NoError(t, err) |
||||
require.True(t, dashWithIdExists) |
||||
|
||||
if dash.Version != existing.Version { |
||||
dash.SetVersion(existing.Version) |
||||
dash.Version = existing.Version |
||||
} |
||||
|
||||
dash.SetVersion(dash.Version + 1) |
||||
dash.Created = time.Now() |
||||
dash.Updated = time.Now() |
||||
dash.Id = dashboard.Id |
||||
dash.Uid = util.GenerateShortUID() |
||||
|
||||
_, err = sess.MustCols("folder_id").ID(dash.Id).Update(dash) |
||||
return err |
||||
}) |
||||
|
||||
require.Nil(t, err) |
||||
|
||||
err = sqlStore.WithDbSession(context.Background(), func(sess *DBSession) error { |
||||
dashVersion := &models.DashboardVersion{ |
||||
DashboardId: dash.Id, |
||||
ParentVersion: parentVersion, |
||||
RestoredFrom: cmd.RestoredFrom, |
||||
Version: dash.Version, |
||||
Created: time.Now(), |
||||
CreatedBy: dash.UpdatedBy, |
||||
Message: cmd.Message, |
||||
Data: dash.Data, |
||||
} |
||||
|
||||
if affectedRows, err := sess.Insert(dashVersion); err != nil { |
||||
return err |
||||
} else if affectedRows == 0 { |
||||
return models.ErrDashboardNotFound |
||||
} |
||||
|
||||
return nil |
||||
}) |
||||
|
||||
require.NoError(t, err) |
||||
} |
||||
|
||||
func TestIntegrationGetDashboardVersions(t *testing.T) { |
||||
sqlStore := InitTestDB(t) |
||||
savedDash := insertTestDashboard(t, sqlStore, "test dash 43", 1, 0, false, "diff-all") |
||||
|
||||
t.Run("Get all versions for a given Dashboard ID", func(t *testing.T) { |
||||
query := models.GetDashboardVersionsQuery{DashboardId: savedDash.Id, OrgId: 1} |
||||
|
||||
err := sqlStore.GetDashboardVersions(context.Background(), &query) |
||||
require.Nil(t, err) |
||||
require.Equal(t, 1, len(query.Result)) |
||||
}) |
||||
|
||||
t.Run("Attempt to get the versions for a non-existent Dashboard ID", func(t *testing.T) { |
||||
query := models.GetDashboardVersionsQuery{DashboardId: int64(999), OrgId: 1} |
||||
|
||||
err := sqlStore.GetDashboardVersions(context.Background(), &query) |
||||
require.Error(t, err) |
||||
require.Equal(t, models.ErrNoVersionsForDashboardId, err) |
||||
require.Equal(t, 0, len(query.Result)) |
||||
}) |
||||
|
||||
t.Run("Get all versions for an updated dashboard", func(t *testing.T) { |
||||
updateTestDashboard(t, sqlStore, savedDash, map[string]interface{}{ |
||||
"tags": "different-tag", |
||||
}) |
||||
query := models.GetDashboardVersionsQuery{DashboardId: savedDash.Id, OrgId: 1} |
||||
err := sqlStore.GetDashboardVersions(context.Background(), &query) |
||||
|
||||
require.Nil(t, err) |
||||
require.Equal(t, 2, len(query.Result)) |
||||
}) |
||||
} |
||||
Loading…
Reference in new issue