user_test.go 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. package api
  2. import (
  3. "net/http"
  4. "testing"
  5. "time"
  6. "github.com/grafana/grafana/pkg/bus"
  7. "github.com/grafana/grafana/pkg/components/simplejson"
  8. "github.com/grafana/grafana/pkg/models"
  9. . "github.com/smartystreets/goconvey/convey"
  10. "github.com/stretchr/testify/require"
  11. )
  12. func TestUserApiEndpoint(t *testing.T) {
  13. Convey("Given a user is logged in", t, func() {
  14. mockResult := models.SearchUserQueryResult{
  15. Users: []*models.UserSearchHitDTO{
  16. {Name: "user1"},
  17. {Name: "user2"},
  18. },
  19. TotalCount: 2,
  20. }
  21. loggedInUserScenario("When calling GET on", "api/users/:id", func(sc *scenarioContext) {
  22. fakeNow := time.Date(2019, 2, 11, 17, 30, 40, 0, time.UTC)
  23. bus.AddHandler("test", func(query *models.GetUserProfileQuery) error {
  24. query.Result = models.UserProfileDTO{
  25. Id: int64(1),
  26. Email: "daniel@grafana.com",
  27. Name: "Daniel",
  28. Login: "danlee",
  29. OrgId: int64(2),
  30. IsGrafanaAdmin: true,
  31. IsDisabled: false,
  32. IsExternal: false,
  33. UpdatedAt: fakeNow,
  34. }
  35. return nil
  36. })
  37. bus.AddHandler("test", func(query *models.GetAuthInfoQuery) error {
  38. query.Result = &models.UserAuth{
  39. AuthModule: models.AuthModuleLDAP,
  40. }
  41. return nil
  42. })
  43. sc.handlerFunc = GetUserByID
  44. sc.fakeReqWithParams("GET", sc.url, map[string]string{}).exec()
  45. expected := `
  46. {
  47. "id": 1,
  48. "email": "daniel@grafana.com",
  49. "name": "Daniel",
  50. "login": "danlee",
  51. "theme": "",
  52. "orgId": 2,
  53. "isGrafanaAdmin": true,
  54. "isDisabled": false,
  55. "isExternal": true,
  56. "authLabels": [
  57. "LDAP"
  58. ],
  59. "updatedAt": "2019-02-11T17:30:40Z"
  60. }
  61. `
  62. require.Equal(t, http.StatusOK, sc.resp.Code)
  63. require.JSONEq(t, expected, sc.resp.Body.String())
  64. })
  65. loggedInUserScenario("When calling GET on", "/api/users", func(sc *scenarioContext) {
  66. var sentLimit int
  67. var sendPage int
  68. bus.AddHandler("test", func(query *models.SearchUsersQuery) error {
  69. query.Result = mockResult
  70. sentLimit = query.Limit
  71. sendPage = query.Page
  72. return nil
  73. })
  74. sc.handlerFunc = SearchUsers
  75. sc.fakeReqWithParams("GET", sc.url, map[string]string{}).exec()
  76. So(sentLimit, ShouldEqual, 1000)
  77. So(sendPage, ShouldEqual, 1)
  78. respJSON, err := simplejson.NewJson(sc.resp.Body.Bytes())
  79. So(err, ShouldBeNil)
  80. So(len(respJSON.MustArray()), ShouldEqual, 2)
  81. })
  82. loggedInUserScenario("When calling GET with page and limit querystring parameters on", "/api/users", func(sc *scenarioContext) {
  83. var sentLimit int
  84. var sendPage int
  85. bus.AddHandler("test", func(query *models.SearchUsersQuery) error {
  86. query.Result = mockResult
  87. sentLimit = query.Limit
  88. sendPage = query.Page
  89. return nil
  90. })
  91. sc.handlerFunc = SearchUsers
  92. sc.fakeReqWithParams("GET", sc.url, map[string]string{"perpage": "10", "page": "2"}).exec()
  93. So(sentLimit, ShouldEqual, 10)
  94. So(sendPage, ShouldEqual, 2)
  95. })
  96. loggedInUserScenario("When calling GET on", "/api/users/search", func(sc *scenarioContext) {
  97. var sentLimit int
  98. var sendPage int
  99. bus.AddHandler("test", func(query *models.SearchUsersQuery) error {
  100. query.Result = mockResult
  101. sentLimit = query.Limit
  102. sendPage = query.Page
  103. return nil
  104. })
  105. sc.handlerFunc = SearchUsersWithPaging
  106. sc.fakeReqWithParams("GET", sc.url, map[string]string{}).exec()
  107. So(sentLimit, ShouldEqual, 1000)
  108. So(sendPage, ShouldEqual, 1)
  109. respJSON, err := simplejson.NewJson(sc.resp.Body.Bytes())
  110. So(err, ShouldBeNil)
  111. So(respJSON.Get("totalCount").MustInt(), ShouldEqual, 2)
  112. So(len(respJSON.Get("users").MustArray()), ShouldEqual, 2)
  113. })
  114. loggedInUserScenario("When calling GET with page and perpage querystring parameters on", "/api/users/search", func(sc *scenarioContext) {
  115. var sentLimit int
  116. var sendPage int
  117. bus.AddHandler("test", func(query *models.SearchUsersQuery) error {
  118. query.Result = mockResult
  119. sentLimit = query.Limit
  120. sendPage = query.Page
  121. return nil
  122. })
  123. sc.handlerFunc = SearchUsersWithPaging
  124. sc.fakeReqWithParams("GET", sc.url, map[string]string{"perpage": "10", "page": "2"}).exec()
  125. So(sentLimit, ShouldEqual, 10)
  126. So(sendPage, ShouldEqual, 2)
  127. })
  128. })
  129. }