dashboard_service_test.go 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  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.IsDashboardProvisionedQuery) error {
  45. cmd.Result = false
  46. return nil
  47. })
  48. testCases := []struct {
  49. Uid string
  50. Error error
  51. }{
  52. {Uid: "", Error: nil},
  53. {Uid: " ", Error: nil},
  54. {Uid: " \t ", Error: nil},
  55. {Uid: "asdf90_-", Error: nil},
  56. {Uid: "asdf/90", Error: models.ErrDashboardInvalidUid},
  57. {Uid: " asdfghjklqwertyuiopzxcvbnmasdfghjklqwer ", Error: nil},
  58. {Uid: "asdfghjklqwertyuiopzxcvbnmasdfghjklqwertyuiopzxcvbnmasdfghjklqwertyuiopzxcvbnm", Error: models.ErrDashboardUidToLong},
  59. }
  60. for _, tc := range testCases {
  61. dto.Dashboard = models.NewDashboard("title")
  62. dto.Dashboard.SetUid(tc.Uid)
  63. dto.User = &models.SignedInUser{}
  64. _, err := service.buildSaveDashboardCommand(dto, true)
  65. So(err, ShouldEqual, tc.Error)
  66. }
  67. })
  68. Convey("Should return validation error if dashboard is provisioned", func() {
  69. bus.AddHandler("test", func(cmd *models.IsDashboardProvisionedQuery) error {
  70. cmd.Result = true
  71. return nil
  72. })
  73. bus.AddHandler("test", func(cmd *models.ValidateDashboardAlertsCommand) error {
  74. return nil
  75. })
  76. bus.AddHandler("test", func(cmd *models.ValidateDashboardBeforeSaveCommand) error {
  77. return nil
  78. })
  79. dto.Dashboard = models.NewDashboard("Dash")
  80. dto.Dashboard.SetId(3)
  81. dto.User = &models.SignedInUser{UserId: 1}
  82. _, err := service.buildSaveDashboardCommand(dto, false)
  83. So(err, ShouldEqual, models.ErrDashboardCannotSaveProvisionedDashboard)
  84. })
  85. Convey("Should return validation error if alert data is invalid", func() {
  86. bus.AddHandler("test", func(cmd *models.IsDashboardProvisionedQuery) error {
  87. cmd.Result = false
  88. return nil
  89. })
  90. bus.AddHandler("test", func(cmd *models.ValidateDashboardAlertsCommand) error {
  91. return errors.New("error")
  92. })
  93. dto.Dashboard = models.NewDashboard("Dash")
  94. _, err := service.SaveDashboard(dto)
  95. So(err, ShouldEqual, models.ErrDashboardContainsInvalidAlertData)
  96. })
  97. })
  98. Reset(func() {
  99. guardian.New = origNewDashboardGuardian
  100. })
  101. })
  102. }