dashboard_service_test.go 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. package dashboards
  2. import (
  3. "errors"
  4. "testing"
  5. "github.com/grafana/grafana/pkg/services/guardian"
  6. "github.com/grafana/grafana/pkg/bus"
  7. "github.com/grafana/grafana/pkg/models"
  8. . "github.com/smartystreets/goconvey/convey"
  9. )
  10. func TestDashboardService(t *testing.T) {
  11. Convey("Dashboard service tests", t, func() {
  12. service := dashboardServiceImpl{}
  13. origNewDashboardGuardian := guardian.New
  14. guardian.MockDashboardGuardian(&guardian.FakeDashboardGuardian{CanSaveValue: true})
  15. Convey("Save dashboard validation", func() {
  16. dto := &SaveDashboardDTO{}
  17. Convey("When saving a dashboard with empty title it should return error", func() {
  18. titles := []string{"", " ", " \t "}
  19. for _, title := range titles {
  20. dto.Dashboard = models.NewDashboard(title)
  21. _, err := service.SaveDashboard(dto)
  22. So(err, ShouldEqual, models.ErrDashboardTitleEmpty)
  23. }
  24. })
  25. Convey("Should return validation error if it's a folder and have a folder id", func() {
  26. dto.Dashboard = models.NewDashboardFolder("Folder")
  27. dto.Dashboard.FolderId = 1
  28. _, err := service.SaveDashboard(dto)
  29. So(err, ShouldEqual, models.ErrDashboardFolderCannotHaveParent)
  30. })
  31. Convey("Should return validation error if folder is named General", func() {
  32. dto.Dashboard = models.NewDashboardFolder("General")
  33. _, err := service.SaveDashboard(dto)
  34. So(err, ShouldEqual, models.ErrDashboardFolderNameExists)
  35. })
  36. Convey("When saving a dashboard should validate uid", func() {
  37. bus.AddHandler("test", func(cmd *models.ValidateDashboardAlertsCommand) error {
  38. return nil
  39. })
  40. bus.AddHandler("test", func(cmd *models.ValidateDashboardBeforeSaveCommand) error {
  41. return nil
  42. })
  43. testCases := []struct {
  44. Uid string
  45. Error error
  46. }{
  47. {Uid: "", Error: nil},
  48. {Uid: " ", Error: nil},
  49. {Uid: " \t ", Error: nil},
  50. {Uid: "asdf90_-", Error: nil},
  51. {Uid: "asdf/90", Error: models.ErrDashboardInvalidUid},
  52. {Uid: " asdfghjklqwertyuiopzxcvbnmasdfghjklqwer ", Error: nil},
  53. {Uid: "asdfghjklqwertyuiopzxcvbnmasdfghjklqwertyuiopzxcvbnmasdfghjklqwertyuiopzxcvbnm", Error: models.ErrDashboardUidToLong},
  54. }
  55. for _, tc := range testCases {
  56. dto.Dashboard = models.NewDashboard("title")
  57. dto.Dashboard.SetUid(tc.Uid)
  58. dto.User = &models.SignedInUser{}
  59. _, err := service.buildSaveDashboardCommand(dto, true)
  60. So(err, ShouldEqual, tc.Error)
  61. }
  62. })
  63. Convey("Should return validation error if alert data is invalid", func() {
  64. bus.AddHandler("test", func(cmd *models.ValidateDashboardAlertsCommand) error {
  65. return errors.New("error")
  66. })
  67. dto.Dashboard = models.NewDashboard("Dash")
  68. _, err := service.SaveDashboard(dto)
  69. So(err, ShouldEqual, models.ErrDashboardContainsInvalidAlertData)
  70. })
  71. })
  72. Reset(func() {
  73. guardian.New = origNewDashboardGuardian
  74. })
  75. })
  76. }