HTTP API: fix for POST /api/dashboards/db returned 200 ok when dashboard was not found, Fixes #1929

This commit is contained in:
Torkel Ödegaard 2015-05-04 07:46:46 +02:00
parent 697529d0e8
commit 73ee8a5985
4 changed files with 28 additions and 3 deletions

View File

@ -87,6 +87,10 @@ func PostDashboard(c *middleware.Context, cmd m.SaveDashboardCommand) {
c.JSON(412, util.DynMap{"status": "version-mismatch", "message": err.Error()}) c.JSON(412, util.DynMap{"status": "version-mismatch", "message": err.Error()})
return return
} }
if err == m.ErrDashboardNotFound {
c.JSON(404, util.DynMap{"status": "not-found", "message": err.Error()})
return
}
c.JsonApiErr(500, "Failed to save dashboard", err) c.JsonApiErr(500, "Failed to save dashboard", err)
return return
} }

View File

@ -10,7 +10,7 @@ import (
// Typed errors // Typed errors
var ( var (
ErrDashboardNotFound = errors.New("Account not found") ErrDashboardNotFound = errors.New("Dashboard not found")
ErrDashboardWithSameNameExists = errors.New("A dashboard with the same name already exists") ErrDashboardWithSameNameExists = errors.New("A dashboard with the same name already exists")
ErrDashboardVersionMismatch = errors.New("The dashboard has been changed by someone else") ErrDashboardVersionMismatch = errors.New("The dashboard has been changed by someone else")
) )

View File

@ -48,13 +48,19 @@ func SaveDashboard(cmd *m.SaveDashboardCommand) error {
} }
} }
affectedRows := int64(0)
if dash.Id == 0 { if dash.Id == 0 {
metrics.M_Models_Dashboard_Insert.Inc(1) metrics.M_Models_Dashboard_Insert.Inc(1)
_, err = sess.Insert(dash) affectedRows, err = sess.Insert(dash)
} else { } else {
dash.Version += 1 dash.Version += 1
dash.Data["version"] = dash.Version dash.Data["version"] = dash.Version
_, err = sess.Id(dash.Id).Update(dash) affectedRows, err = sess.Id(dash.Id).Update(dash)
}
if affectedRows == 0 {
return m.ErrDashboardNotFound
} }
// delete existing tabs // delete existing tabs

View File

@ -51,6 +51,21 @@ func TestDashboardDataAccess(t *testing.T) {
So(query.Result.Slug, ShouldEqual, "test-dash-23") So(query.Result.Slug, ShouldEqual, "test-dash-23")
}) })
Convey("Should return error if no dashboard is updated", func() {
cmd := m.SaveDashboardCommand{
OrgId: 1,
Overwrite: true,
Dashboard: map[string]interface{}{
"id": float64(123412321),
"title": "Expect error",
"tags": []interface{}{},
},
}
err := SaveDashboard(&cmd)
So(err, ShouldNotBeNil)
})
Convey("Should be able to search for dashboard", func() { Convey("Should be able to search for dashboard", func() {
query := m.SearchDashboardsQuery{ query := m.SearchDashboardsQuery{
Title: "test", Title: "test",