dashboard_service_test.go 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  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. bus.ClearBusHandlers()
  13. service := &dashboardServiceImpl{}
  14. origNewDashboardGuardian := guardian.New
  15. guardian.MockDashboardGuardian(&guardian.FakeDashboardGuardian{CanSaveValue: true})
  16. Convey("Save dashboard validation", func() {
  17. dto := &SaveDashboardDTO{}
  18. Convey("When saving a dashboard with empty title it should return error", func() {
  19. titles := []string{"", " ", " \t "}
  20. for _, title := range titles {
  21. dto.Dashboard = models.NewDashboard(title)
  22. _, err := service.SaveDashboard(dto)
  23. So(err, ShouldEqual, models.ErrDashboardTitleEmpty)
  24. }
  25. })
  26. Convey("Should return validation error if it's a folder and have a folder id", func() {
  27. dto.Dashboard = models.NewDashboardFolder("Folder")
  28. dto.Dashboard.FolderId = 1
  29. _, err := service.SaveDashboard(dto)
  30. So(err, ShouldEqual, models.ErrDashboardFolderCannotHaveParent)
  31. })
  32. Convey("Should return validation error if folder is named General", func() {
  33. dto.Dashboard = models.NewDashboardFolder("General")
  34. _, err := service.SaveDashboard(dto)
  35. So(err, ShouldEqual, models.ErrDashboardFolderNameExists)
  36. })
  37. Convey("When saving a dashboard should validate uid", func() {
  38. bus.AddHandler("test", func(cmd *models.ValidateDashboardAlertsCommand) error {
  39. return nil
  40. })
  41. bus.AddHandler("test", func(cmd *models.ValidateDashboardBeforeSaveCommand) error {
  42. return nil
  43. })
  44. bus.AddHandler("test", func(cmd *models.GetProvisionedDashboardByDashboardId) error {
  45. return models.ErrDashboardProvisioningDoesNotExist
  46. })
  47. testCases := []struct {
  48. Uid string
  49. Error error
  50. }{
  51. {Uid: "", Error: nil},
  52. {Uid: " ", Error: nil},
  53. {Uid: " \t ", Error: nil},
  54. {Uid: "asdf90_-", Error: nil},
  55. {Uid: "asdf/90", Error: models.ErrDashboardInvalidUid},
  56. {Uid: " asdfghjklqwertyuiopzxcvbnmasdfghjklqwer ", Error: nil},
  57. {Uid: "asdfghjklqwertyuiopzxcvbnmasdfghjklqwertyuiopzxcvbnmasdfghjklqwertyuiopzxcvbnm", Error: models.ErrDashboardUidToLong},
  58. }
  59. for _, tc := range testCases {
  60. dto.Dashboard = models.NewDashboard("title")
  61. dto.Dashboard.SetUid(tc.Uid)
  62. dto.User = &models.SignedInUser{}
  63. _, err := service.buildSaveDashboardCommand(dto, true)
  64. So(err, ShouldEqual, tc.Error)
  65. }
  66. })
  67. Convey("Should return validation error if dashboard is provisioned", func() {
  68. bus.AddHandler("test", func(cmd *models.GetProvisionedDashboardByDashboardId) error {
  69. cmd.Result = &models.DashboardProvisioning{}
  70. return nil
  71. })
  72. bus.AddHandler("test", func(cmd *models.ValidateDashboardAlertsCommand) error {
  73. return nil
  74. })
  75. bus.AddHandler("test", func(cmd *models.ValidateDashboardBeforeSaveCommand) error {
  76. return nil
  77. })
  78. dto.Dashboard = models.NewDashboard("Dash")
  79. dto.Dashboard.SetId(3)
  80. dto.User = &models.SignedInUser{UserId: 1}
  81. _, err := service.buildSaveDashboardCommand(dto, false)
  82. So(err, ShouldEqual, models.ErrDashboardCannotSaveProvisionedDashboard)
  83. })
  84. Convey("Should return validation error if alert data is invalid", func() {
  85. bus.AddHandler("test", func(cmd *models.GetProvisionedDashboardByDashboardId) error {
  86. return models.ErrDashboardProvisioningDoesNotExist
  87. })
  88. bus.AddHandler("test", func(cmd *models.ValidateDashboardAlertsCommand) error {
  89. return errors.New("error")
  90. })
  91. dto.Dashboard = models.NewDashboard("Dash")
  92. _, err := service.SaveDashboard(dto)
  93. So(err, ShouldEqual, models.ErrDashboardContainsInvalidAlertData)
  94. })
  95. })
  96. Reset(func() {
  97. guardian.New = origNewDashboardGuardian
  98. })
  99. })
  100. }