dashboard_service_test.go 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  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. cmd.Result = &models.ValidateDashboardBeforeSaveResult{}
  42. return nil
  43. })
  44. testCases := []struct {
  45. Uid string
  46. Error error
  47. }{
  48. {Uid: "", Error: nil},
  49. {Uid: " ", Error: nil},
  50. {Uid: " \t ", Error: nil},
  51. {Uid: "asdf90_-", Error: nil},
  52. {Uid: "asdf/90", Error: models.ErrDashboardInvalidUid},
  53. {Uid: " asdfghjklqwertyuiopzxcvbnmasdfghjklqwer ", Error: nil},
  54. {Uid: "asdfghjklqwertyuiopzxcvbnmasdfghjklqwertyuiopzxcvbnmasdfghjklqwertyuiopzxcvbnm", Error: models.ErrDashboardUidToLong},
  55. }
  56. for _, tc := range testCases {
  57. dto.Dashboard = models.NewDashboard("title")
  58. dto.Dashboard.SetUid(tc.Uid)
  59. dto.User = &models.SignedInUser{}
  60. _, err := service.buildSaveDashboardCommand(dto, true)
  61. So(err, ShouldEqual, tc.Error)
  62. }
  63. })
  64. Convey("Should return validation error if alert data is invalid", func() {
  65. bus.AddHandler("test", func(cmd *models.ValidateDashboardAlertsCommand) error {
  66. return errors.New("error")
  67. })
  68. dto.Dashboard = models.NewDashboard("Dash")
  69. _, err := service.SaveDashboard(dto)
  70. So(err, ShouldEqual, models.ErrDashboardContainsInvalidAlertData)
  71. })
  72. })
  73. Reset(func() {
  74. guardian.New = origNewDashboardGuardian
  75. })
  76. })
  77. }