Commit bb3183f6 by bergquist Committed by Leonard Gram

removes uniqnes check on slug when saving dashboards

parent 6d2a5558
...@@ -214,7 +214,7 @@ func PostDashboard(c *middleware.Context, cmd m.SaveDashboardCommand) Response { ...@@ -214,7 +214,7 @@ func PostDashboard(c *middleware.Context, cmd m.SaveDashboardCommand) Response {
} }
if err != nil { if err != nil {
if err == m.ErrDashboardWithSameNameExists { if err == m.ErrDashboardWithSameUIDExists {
return Json(412, util.DynMap{"status": "name-exists", "message": err.Error()}) return Json(412, util.DynMap{"status": "name-exists", "message": err.Error()})
} }
if err == m.ErrDashboardVersionMismatch { if err == m.ErrDashboardVersionMismatch {
......
...@@ -16,7 +16,7 @@ import ( ...@@ -16,7 +16,7 @@ import (
var ( var (
ErrDashboardNotFound = errors.New("Dashboard not found") ErrDashboardNotFound = errors.New("Dashboard not found")
ErrDashboardSnapshotNotFound = errors.New("Dashboard snapshot not found") ErrDashboardSnapshotNotFound = errors.New("Dashboard snapshot not found")
ErrDashboardWithSameNameExists = errors.New("A dashboard with the same name already exists") ErrDashboardWithSameUIDExists = errors.New("A dashboard with the same uid already exists")
ErrDashboardVersionMismatch = errors.New("The dashboard has been changed by someone else") ErrDashboardVersionMismatch = errors.New("The dashboard has been changed by someone else")
ErrDashboardTitleEmpty = errors.New("Dashboard title cannot be empty") ErrDashboardTitleEmpty = errors.New("Dashboard title cannot be empty")
ErrDashboardFolderCannotHaveParent = errors.New("A Dashboard Folder cannot be added to another folder") ErrDashboardFolderCannotHaveParent = errors.New("A Dashboard Folder cannot be added to another folder")
...@@ -116,6 +116,7 @@ func NewDashboardFromJson(data *simplejson.Json) *Dashboard { ...@@ -116,6 +116,7 @@ func NewDashboardFromJson(data *simplejson.Json) *Dashboard {
dash.Uid = uid dash.Uid = uid
} else { } else {
dash.Uid = util.GenerateShortUid() dash.Uid = util.GenerateShortUid()
dash.Data.Set("uid", dash.Uid)
} }
return dash return dash
......
...@@ -25,7 +25,7 @@ func SaveDashboard(cmd *m.SaveDashboardCommand) error { ...@@ -25,7 +25,7 @@ func SaveDashboard(cmd *m.SaveDashboardCommand) error {
dash := cmd.GetDashboardModel() dash := cmd.GetDashboardModel()
// try get existing dashboard // try get existing dashboard
var existing, sameTitle m.Dashboard var existing m.Dashboard
if dash.Id > 0 { if dash.Id > 0 {
dashWithIdExists, err := sess.Where("id=? AND org_id=?", dash.Id, dash.OrgId).Get(&existing) dashWithIdExists, err := sess.Where("id=? AND org_id=?", dash.Id, dash.OrgId).Get(&existing)
...@@ -51,19 +51,20 @@ func SaveDashboard(cmd *m.SaveDashboardCommand) error { ...@@ -51,19 +51,20 @@ func SaveDashboard(cmd *m.SaveDashboardCommand) error {
} }
} }
sameTitleExists, err := sess.Where("org_id=? AND slug=?", dash.OrgId, dash.Slug).Get(&sameTitle) var sameUid m.Dashboard
sameUidExists, err := sess.Where("org_id=? AND uid=?", dash.OrgId, dash.Uid).Get(&sameUid)
if err != nil { if err != nil {
return err return err
} }
if sameTitleExists { if sameUidExists {
// another dashboard with same name // another dashboard with same uid
if dash.Id != sameTitle.Id { if dash.Id != sameUid.Id {
if cmd.Overwrite { if cmd.Overwrite {
dash.Id = sameTitle.Id dash.Id = sameUid.Id
dash.Version = sameTitle.Version dash.Version = sameUid.Version
} else { } else {
return m.ErrDashboardWithSameNameExists return m.ErrDashboardWithSameUIDExists
} }
} }
} }
...@@ -89,7 +90,7 @@ func SaveDashboard(cmd *m.SaveDashboardCommand) error { ...@@ -89,7 +90,7 @@ func SaveDashboard(cmd *m.SaveDashboardCommand) error {
dash.Updated = cmd.UpdatedAt dash.Updated = cmd.UpdatedAt
} }
affectedRows, err = sess.MustCols("folder_id", "has_acl").Id(dash.Id).Update(dash) affectedRows, err = sess.MustCols("folder_id", "has_acl").ID(dash.Id).Update(dash)
} }
if err != nil { if err != nil {
......
...@@ -207,6 +207,22 @@ func TestDashboardDataAccess(t *testing.T) { ...@@ -207,6 +207,22 @@ func TestDashboardDataAccess(t *testing.T) {
} }
err := SaveDashboard(&cmd) err := SaveDashboard(&cmd)
So(err, ShouldBeNil)
})
Convey("Should not be able to save dashboard with same uid", func() {
cmd := m.SaveDashboardCommand{
OrgId: 1,
Dashboard: simplejson.NewFromAny(map[string]interface{}{
"id": nil,
"title": "test dash 23",
"uid": "dsfalkjngailuedt",
}),
}
err := SaveDashboard(&cmd)
So(err, ShouldBeNil)
err = SaveDashboard(&cmd)
So(err, ShouldNotBeNil) So(err, ShouldNotBeNil)
}) })
......
...@@ -12,7 +12,7 @@ import ( ...@@ -12,7 +12,7 @@ import (
) )
func updateTestDashboard(dashboard *m.Dashboard, data map[string]interface{}) { func updateTestDashboard(dashboard *m.Dashboard, data map[string]interface{}) {
data["title"] = dashboard.Title data["uid"] = dashboard.Uid
saveCmd := m.SaveDashboardCommand{ saveCmd := m.SaveDashboardCommand{
OrgId: dashboard.OrgId, OrgId: dashboard.OrgId,
...@@ -44,12 +44,11 @@ func TestGetDashboardVersion(t *testing.T) { ...@@ -44,12 +44,11 @@ func TestGetDashboardVersion(t *testing.T) {
dashCmd := m.GetDashboardQuery{ dashCmd := m.GetDashboardQuery{
OrgId: savedDash.OrgId, OrgId: savedDash.OrgId,
Slug: savedDash.Slug, Uid: savedDash.Uid,
} }
err = GetDashboard(&dashCmd) err = GetDashboard(&dashCmd)
So(err, ShouldBeNil) So(err, ShouldBeNil)
dashCmd.Result.Data.Del("uid")
eq := reflect.DeepEqual(dashCmd.Result.Data, query.Result.Data) eq := reflect.DeepEqual(dashCmd.Result.Data, query.Result.Data)
So(eq, ShouldEqual, true) So(eq, ShouldEqual, true)
}) })
......
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
} }
], ],
"uid": "1MHHlVjzz",
"title": "Nginx Connections", "title": "Nginx Connections",
"revision": 25, "revision": 25,
"schemaVersion": 11, "schemaVersion": 11,
......
...@@ -16,5 +16,6 @@ ...@@ -16,5 +16,6 @@
], ],
"schemaVersion": 11, "schemaVersion": 11,
"title": "Nginx Connections", "title": "Nginx Connections",
"uid": "1MHHlVjzz",
"version": 0 "version": 0
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment