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 3.2KB

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