You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

api_user_search_test.go 2.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. // Copyright 2019 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package integration
  4. import (
  5. "fmt"
  6. "net/http"
  7. "testing"
  8. "code.gitea.io/gitea/models/unittest"
  9. user_model "code.gitea.io/gitea/models/user"
  10. "code.gitea.io/gitea/modules/setting"
  11. api "code.gitea.io/gitea/modules/structs"
  12. "code.gitea.io/gitea/tests"
  13. "github.com/stretchr/testify/assert"
  14. )
  15. type SearchResults struct {
  16. OK bool `json:"ok"`
  17. Data []*api.User `json:"data"`
  18. }
  19. func TestAPIUserSearchLoggedIn(t *testing.T) {
  20. defer tests.PrepareTestEnv(t)()
  21. adminUsername := "user1"
  22. session := loginUser(t, adminUsername)
  23. token := getTokenForLoggedInUser(t, session)
  24. query := "user2"
  25. req := NewRequestf(t, "GET", "/api/v1/users/search?token=%s&q=%s", token, query)
  26. resp := session.MakeRequest(t, req, http.StatusOK)
  27. var results SearchResults
  28. DecodeJSON(t, resp, &results)
  29. assert.NotEmpty(t, results.Data)
  30. for _, user := range results.Data {
  31. assert.Contains(t, user.UserName, query)
  32. assert.NotEmpty(t, user.Email)
  33. }
  34. }
  35. func TestAPIUserSearchNotLoggedIn(t *testing.T) {
  36. defer tests.PrepareTestEnv(t)()
  37. query := "user2"
  38. req := NewRequestf(t, "GET", "/api/v1/users/search?q=%s", query)
  39. resp := MakeRequest(t, req, http.StatusOK)
  40. var results SearchResults
  41. DecodeJSON(t, resp, &results)
  42. assert.NotEmpty(t, results.Data)
  43. var modelUser *user_model.User
  44. for _, user := range results.Data {
  45. assert.Contains(t, user.UserName, query)
  46. modelUser = unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: user.ID})
  47. if modelUser.KeepEmailPrivate {
  48. assert.EqualValues(t, fmt.Sprintf("%s@%s", modelUser.LowerName, setting.Service.NoReplyAddress), user.Email)
  49. } else {
  50. assert.EqualValues(t, modelUser.Email, user.Email)
  51. }
  52. }
  53. }
  54. func TestAPIUserSearchAdminLoggedInUserHidden(t *testing.T) {
  55. defer tests.PrepareTestEnv(t)()
  56. adminUsername := "user1"
  57. session := loginUser(t, adminUsername)
  58. token := getTokenForLoggedInUser(t, session)
  59. query := "user31"
  60. req := NewRequestf(t, "GET", "/api/v1/users/search?token=%s&q=%s", token, query)
  61. req.SetBasicAuth(token, "x-oauth-basic")
  62. resp := session.MakeRequest(t, req, http.StatusOK)
  63. var results SearchResults
  64. DecodeJSON(t, resp, &results)
  65. assert.NotEmpty(t, results.Data)
  66. for _, user := range results.Data {
  67. assert.Contains(t, user.UserName, query)
  68. assert.NotEmpty(t, user.Email)
  69. assert.EqualValues(t, "private", user.Visibility)
  70. }
  71. }
  72. func TestAPIUserSearchNotLoggedInUserHidden(t *testing.T) {
  73. defer tests.PrepareTestEnv(t)()
  74. query := "user31"
  75. req := NewRequestf(t, "GET", "/api/v1/users/search?q=%s", query)
  76. resp := MakeRequest(t, req, http.StatusOK)
  77. var results SearchResults
  78. DecodeJSON(t, resp, &results)
  79. assert.Empty(t, results.Data)
  80. }