mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2025-10-24 11:02:42 +00:00
Refs: https://codeberg.org/forgejo/forgejo/issues/1403 (cherry picked from commit87bd40411e) Conflicts: routers/api/v1/user/user.go https://codeberg.org/forgejo/forgejo/pulls/1469 (cherry picked from commit74f70ca873) (cherry picked from commit673a75bb43) (cherry picked from commitfcd4535ac6) (cherry picked from commit56b229f22e) (cherry picked from commit45b922ae76) (cherry picked from commit03805f3bf4) (cherry picked from commit16c67f70d5) (cherry picked from commit1b862a14ad)
110 lines
3.2 KiB
Go
110 lines
3.2 KiB
Go
// Copyright 2019 The Gitea Authors. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package integration
|
|
|
|
import (
|
|
"net/http"
|
|
"testing"
|
|
|
|
auth_model "code.gitea.io/gitea/models/auth"
|
|
"code.gitea.io/gitea/models/unittest"
|
|
user_model "code.gitea.io/gitea/models/user"
|
|
api "code.gitea.io/gitea/modules/structs"
|
|
"code.gitea.io/gitea/tests"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
type SearchResults struct {
|
|
OK bool `json:"ok"`
|
|
Data []*api.User `json:"data"`
|
|
}
|
|
|
|
func TestAPIUserSearchLoggedIn(t *testing.T) {
|
|
defer tests.PrepareTestEnv(t)()
|
|
adminUsername := "user1"
|
|
session := loginUser(t, adminUsername)
|
|
token := getTokenForLoggedInUser(t, session, auth_model.AccessTokenScopeReadUser)
|
|
query := "user2"
|
|
req := NewRequestf(t, "GET", "/api/v1/users/search?token=%s&q=%s", token, query)
|
|
resp := MakeRequest(t, req, http.StatusOK)
|
|
|
|
var results SearchResults
|
|
DecodeJSON(t, resp, &results)
|
|
assert.NotEmpty(t, results.Data)
|
|
for _, user := range results.Data {
|
|
assert.Contains(t, user.UserName, query)
|
|
assert.NotEmpty(t, user.Email)
|
|
}
|
|
}
|
|
|
|
func TestAPIUserSearchNotLoggedIn(t *testing.T) {
|
|
defer tests.PrepareTestEnv(t)()
|
|
query := "user2"
|
|
req := NewRequestf(t, "GET", "/api/v1/users/search?q=%s", query)
|
|
resp := MakeRequest(t, req, http.StatusOK)
|
|
|
|
var results SearchResults
|
|
DecodeJSON(t, resp, &results)
|
|
assert.NotEmpty(t, results.Data)
|
|
var modelUser *user_model.User
|
|
for _, user := range results.Data {
|
|
assert.Contains(t, user.UserName, query)
|
|
modelUser = unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: user.ID})
|
|
assert.EqualValues(t, modelUser.GetPlaceholderEmail(), user.Email)
|
|
}
|
|
}
|
|
|
|
func TestAPIUserSearchSystemUsers(t *testing.T) {
|
|
defer tests.PrepareTestEnv(t)()
|
|
for _, systemUser := range []*user_model.User{
|
|
user_model.NewGhostUser(),
|
|
user_model.NewActionsUser(),
|
|
} {
|
|
t.Run(systemUser.Name, func(t *testing.T) {
|
|
req := NewRequestf(t, "GET", "/api/v1/users/search?uid=%d", systemUser.ID)
|
|
resp := MakeRequest(t, req, http.StatusOK)
|
|
|
|
var results SearchResults
|
|
DecodeJSON(t, resp, &results)
|
|
assert.NotEmpty(t, results.Data)
|
|
if assert.EqualValues(t, 1, len(results.Data)) {
|
|
user := results.Data[0]
|
|
assert.EqualValues(t, user.UserName, systemUser.Name)
|
|
assert.EqualValues(t, user.ID, systemUser.ID)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestAPIUserSearchAdminLoggedInUserHidden(t *testing.T) {
|
|
defer tests.PrepareTestEnv(t)()
|
|
adminUsername := "user1"
|
|
session := loginUser(t, adminUsername)
|
|
token := getTokenForLoggedInUser(t, session, auth_model.AccessTokenScopeReadUser)
|
|
query := "user31"
|
|
req := NewRequestf(t, "GET", "/api/v1/users/search?token=%s&q=%s", token, query)
|
|
req.SetBasicAuth(token, "x-oauth-basic")
|
|
resp := MakeRequest(t, req, http.StatusOK)
|
|
|
|
var results SearchResults
|
|
DecodeJSON(t, resp, &results)
|
|
assert.NotEmpty(t, results.Data)
|
|
for _, user := range results.Data {
|
|
assert.Contains(t, user.UserName, query)
|
|
assert.NotEmpty(t, user.Email)
|
|
assert.EqualValues(t, "private", user.Visibility)
|
|
}
|
|
}
|
|
|
|
func TestAPIUserSearchNotLoggedInUserHidden(t *testing.T) {
|
|
defer tests.PrepareTestEnv(t)()
|
|
query := "user31"
|
|
req := NewRequestf(t, "GET", "/api/v1/users/search?q=%s", query)
|
|
resp := MakeRequest(t, req, http.StatusOK)
|
|
|
|
var results SearchResults
|
|
DecodeJSON(t, resp, &results)
|
|
assert.Empty(t, results.Data)
|
|
}
|