Browse Source

WIP: adds API check to stop folders being included in folders

Daniel Lee 8 years ago
parent
commit
dd02bf7c9b
3 changed files with 30 additions and 5 deletions
  1. 4 0
      pkg/api/dashboard.go
  2. 20 0
      pkg/api/dashboard_test.go
  3. 6 5
      pkg/models/dashboards.go

+ 4 - 0
pkg/api/dashboard.go

@@ -194,6 +194,10 @@ func PostDashboard(c *middleware.Context, cmd m.SaveDashboardCommand) Response {
 		return ApiError(403, "Does not have permission to save this dashboard", nil)
 	}
 
+	if dash.IsFolder && dash.ParentId > 0 {
+		return ApiError(400, m.ErrDashboardFolderCannotHaveParent.Error(), nil)
+	}
+
 	// Check if Title is empty
 	if dash.Title == "" {
 		return ApiError(400, m.ErrDashboardTitleEmpty.Error(), nil)

+ 20 - 0
pkg/api/dashboard_test.go

@@ -132,6 +132,26 @@ func TestDashboardApiEndpoint(t *testing.T) {
 				CallPostDashboard(sc)
 				So(sc.resp.Code, ShouldEqual, 200)
 			})
+
+			Convey("When saving a dashboard folder in another folder", func() {
+				bus.AddHandler("test", func(query *models.GetDashboardQuery) error {
+					query.Result = fakeDash
+					query.Result.IsFolder = true
+					return nil
+				})
+				invalidCmd := models.SaveDashboardCommand{
+					Dashboard: simplejson.NewFromAny(map[string]interface{}{
+						"parentId": fakeDash.ParentId,
+						"title":    fakeDash.Title,
+					}),
+				}
+				Convey("Should return an error", func() {
+					postDashboardScenario("When calling POST on", "/api/dashboards", "/api/dashboards", role, invalidCmd, func(sc *scenarioContext) {
+						CallPostDashboard(sc)
+						So(sc.resp.Code, ShouldEqual, 400)
+					})
+				})
+			})
 		})
 	})
 

+ 6 - 5
pkg/models/dashboards.go

@@ -11,11 +11,12 @@ import (
 
 // Typed errors
 var (
-	ErrDashboardNotFound           = errors.New("Dashboard not found")
-	ErrDashboardSnapshotNotFound   = errors.New("Dashboard snapshot not found")
-	ErrDashboardWithSameNameExists = errors.New("A dashboard with the same name already exists")
-	ErrDashboardVersionMismatch    = errors.New("The dashboard has been changed by someone else")
-	ErrDashboardTitleEmpty         = errors.New("Dashboard title cannot be empty")
+	ErrDashboardNotFound               = errors.New("Dashboard not found")
+	ErrDashboardSnapshotNotFound       = errors.New("Dashboard snapshot not found")
+	ErrDashboardWithSameNameExists     = errors.New("A dashboard with the same name already exists")
+	ErrDashboardVersionMismatch        = errors.New("The dashboard has been changed by someone else")
+	ErrDashboardTitleEmpty             = errors.New("Dashboard title cannot be empty")
+	ErrDashboardFolderCannotHaveParent = errors.New("A Dashboard Folder cannot be added to another folder")
 )
 
 type UpdatePluginDashboardError struct {