2019-05-08 22:17:32 +03:00
// Copyright 2019 The Gitea Authors. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.package models
2022-09-02 22:18:23 +03:00
package integration
2019-05-08 22:17:32 +03:00
import (
2020-09-18 00:33:23 +03:00
"fmt"
2019-05-08 22:17:32 +03:00
"net/http"
"testing"
2021-11-16 11:53:21 +03:00
"code.gitea.io/gitea/models/unittest"
2021-11-24 12:49:20 +03:00
user_model "code.gitea.io/gitea/models/user"
2020-09-18 00:33:23 +03:00
"code.gitea.io/gitea/modules/setting"
2019-05-11 13:21:34 +03:00
api "code.gitea.io/gitea/modules/structs"
2022-09-02 22:18:23 +03:00
"code.gitea.io/gitea/tests"
2019-05-08 22:17:32 +03:00
"github.com/stretchr/testify/assert"
)
type SearchResults struct {
OK bool ` json:"ok" `
Data [ ] * api . User ` json:"data" `
}
func TestAPIUserSearchLoggedIn ( t * testing . T ) {
2022-09-02 22:18:23 +03:00
defer tests . PrepareTestEnv ( t ) ( )
2019-05-08 22:17:32 +03:00
adminUsername := "user1"
session := loginUser ( t , adminUsername )
token := getTokenForLoggedInUser ( t , session )
query := "user2"
req := NewRequestf ( t , "GET" , "/api/v1/users/search?token=%s&q=%s" , token , query )
resp := session . 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 ) {
2022-09-02 22:18:23 +03:00
defer tests . PrepareTestEnv ( t ) ( )
2019-05-08 22:17:32 +03:00
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 )
2021-11-24 12:49:20 +03:00
var modelUser * user_model . User
2019-05-08 22:17:32 +03:00
for _ , user := range results . Data {
assert . Contains ( t , user . UserName , query )
2022-08-16 05:22:25 +03:00
modelUser = unittest . AssertExistsAndLoadBean ( t , & user_model . User { ID : user . ID } )
2020-09-18 00:33:23 +03:00
if modelUser . KeepEmailPrivate {
assert . EqualValues ( t , fmt . Sprintf ( "%s@%s" , modelUser . LowerName , setting . Service . NoReplyAddress ) , user . Email )
} else {
assert . EqualValues ( t , modelUser . Email , user . Email )
}
2019-05-08 22:17:32 +03:00
}
}
2021-06-26 22:53:14 +03:00
func TestAPIUserSearchAdminLoggedInUserHidden ( t * testing . T ) {
2022-09-02 22:18:23 +03:00
defer tests . PrepareTestEnv ( t ) ( )
2021-06-26 22:53:14 +03:00
adminUsername := "user1"
session := loginUser ( t , adminUsername )
token := getTokenForLoggedInUser ( t , session )
query := "user31"
req := NewRequestf ( t , "GET" , "/api/v1/users/search?token=%s&q=%s" , token , query )
req . SetBasicAuth ( token , "x-oauth-basic" )
resp := session . 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 ) {
2022-09-02 22:18:23 +03:00
defer tests . PrepareTestEnv ( t ) ( )
2021-06-26 22:53:14 +03:00
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 )
}