2017-04-25 10:24:51 +03:00
// Copyright 2017 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 integrations
import (
"net/http"
"testing"
2022-06-13 12:37:59 +03:00
issues_model "code.gitea.io/gitea/models/issues"
2022-04-07 21:59:56 +03:00
repo_model "code.gitea.io/gitea/models/repo"
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"
2022-04-07 21:59:56 +03:00
api "code.gitea.io/gitea/modules/structs"
2017-12-16 00:11:02 +03:00
"code.gitea.io/gitea/modules/test"
2022-04-03 12:46:48 +03:00
"code.gitea.io/gitea/modules/translation/i18n"
2017-07-01 22:48:29 +03:00
2017-04-25 10:24:51 +03:00
"github.com/stretchr/testify/assert"
)
func TestViewUser ( t * testing . T ) {
2019-11-26 02:21:37 +03:00
defer prepareTestEnv ( t ) ( )
2017-04-25 10:24:51 +03:00
2017-06-10 03:41:36 +03:00
req := NewRequest ( t , "GET" , "/user2" )
2017-07-07 22:36:47 +03:00
MakeRequest ( t , req , http . StatusOK )
2017-04-25 10:24:51 +03:00
}
2017-07-01 22:48:29 +03:00
func TestRenameUsername ( t * testing . T ) {
2019-11-26 02:21:37 +03:00
defer prepareTestEnv ( t ) ( )
2017-07-01 22:48:29 +03:00
session := loginUser ( t , "user2" )
2017-07-07 22:36:47 +03:00
req := NewRequestWithValues ( t , "POST" , "/user/settings" , map [ string ] string {
2018-05-05 03:28:30 +03:00
"_csrf" : GetCSRF ( t , session , "/user/settings" ) ,
"name" : "newUsername" ,
"email" : "user2@example.com" ,
2020-12-04 09:20:30 +03:00
"language" : "en-US" ,
2017-07-01 22:48:29 +03:00
} )
2022-03-23 07:54:07 +03:00
session . MakeRequest ( t , req , http . StatusSeeOther )
2017-07-01 22:48:29 +03:00
2021-11-24 12:49:20 +03:00
unittest . AssertExistsAndLoadBean ( t , & user_model . User { Name : "newUsername" } )
unittest . AssertNotExistsBean ( t , & user_model . User { Name : "user2" } )
2017-07-01 22:48:29 +03:00
}
func TestRenameInvalidUsername ( t * testing . T ) {
2019-11-26 02:21:37 +03:00
defer prepareTestEnv ( t ) ( )
2017-07-01 22:48:29 +03:00
invalidUsernames := [ ] string {
"%2f*" ,
"%2f." ,
"%2f.." ,
"%00" ,
"thisHas ASpace" ,
2019-01-24 17:12:17 +03:00
"p<A>tho>lo<gical" ,
2017-07-01 22:48:29 +03:00
}
session := loginUser ( t , "user2" )
for _ , invalidUsername := range invalidUsernames {
t . Logf ( "Testing username %s" , invalidUsername )
2017-07-07 22:36:47 +03:00
req := NewRequestWithValues ( t , "POST" , "/user/settings" , map [ string ] string {
"_csrf" : GetCSRF ( t , session , "/user/settings" ) ,
2017-07-01 22:48:29 +03:00
"name" : invalidUsername ,
"email" : "user2@example.com" ,
} )
2017-07-07 22:36:47 +03:00
resp := session . MakeRequest ( t , req , http . StatusOK )
htmlDoc := NewHTMLParser ( t , resp . Body )
2017-07-01 22:48:29 +03:00
assert . Contains ( t ,
htmlDoc . doc . Find ( ".ui.negative.message" ) . Text ( ) ,
i18n . Tr ( "en" , "form.alpha_dash_dot_error" ) ,
)
2021-11-24 12:49:20 +03:00
unittest . AssertNotExistsBean ( t , & user_model . User { Name : invalidUsername } )
2017-07-01 22:48:29 +03:00
}
}
func TestRenameReservedUsername ( t * testing . T ) {
2019-11-26 02:21:37 +03:00
defer prepareTestEnv ( t ) ( )
2017-07-01 22:48:29 +03:00
reservedUsernames := [ ] string {
2022-03-31 07:02:13 +03:00
"." ,
".." ,
".well-known" ,
2019-09-24 20:12:56 +03:00
"admin" ,
"api" ,
2022-03-31 07:02:13 +03:00
"assets" ,
2019-09-24 20:12:56 +03:00
"attachments" ,
2022-03-31 07:02:13 +03:00
"avatar" ,
2019-09-24 20:12:56 +03:00
"avatars" ,
2022-03-31 07:02:13 +03:00
"captcha" ,
"commits" ,
"debug" ,
"error" ,
2019-09-24 20:12:56 +03:00
"explore" ,
2022-03-31 07:02:13 +03:00
"favicon.ico" ,
"ghost" ,
2019-09-24 20:12:56 +03:00
"issues" ,
"login" ,
2022-03-31 07:02:13 +03:00
"manifest.json" ,
2019-09-24 20:12:56 +03:00
"metrics" ,
2022-03-31 07:02:13 +03:00
"milestones" ,
"new" ,
2019-09-24 20:12:56 +03:00
"notifications" ,
"org" ,
"pulls" ,
2022-03-31 07:02:13 +03:00
"raw" ,
2019-09-24 20:12:56 +03:00
"repo" ,
2022-03-31 07:02:13 +03:00
"repo-avatars" ,
"robots.txt" ,
2019-11-18 23:03:25 +03:00
"search" ,
2022-03-31 07:02:13 +03:00
"serviceworker.js" ,
"ssh_info" ,
"swagger.v1.json" ,
"user" ,
"v2" ,
2017-07-01 22:48:29 +03:00
}
session := loginUser ( t , "user2" )
for _ , reservedUsername := range reservedUsernames {
t . Logf ( "Testing username %s" , reservedUsername )
2017-07-07 22:36:47 +03:00
req := NewRequestWithValues ( t , "POST" , "/user/settings" , map [ string ] string {
2018-05-05 03:28:30 +03:00
"_csrf" : GetCSRF ( t , session , "/user/settings" ) ,
"name" : reservedUsername ,
"email" : "user2@example.com" ,
2020-12-04 09:20:30 +03:00
"language" : "en-US" ,
2017-07-01 22:48:29 +03:00
} )
2022-03-23 07:54:07 +03:00
resp := session . MakeRequest ( t , req , http . StatusSeeOther )
2017-07-01 22:48:29 +03:00
2017-12-16 00:11:02 +03:00
req = NewRequest ( t , "GET" , test . RedirectURL ( resp ) )
2017-07-07 22:36:47 +03:00
resp = session . MakeRequest ( t , req , http . StatusOK )
htmlDoc := NewHTMLParser ( t , resp . Body )
2017-07-01 22:48:29 +03:00
assert . Contains ( t ,
htmlDoc . doc . Find ( ".ui.negative.message" ) . Text ( ) ,
2018-02-25 16:56:25 +03:00
i18n . Tr ( "en" , "user.form.name_reserved" , reservedUsername ) ,
2017-07-01 22:48:29 +03:00
)
2021-11-24 12:49:20 +03:00
unittest . AssertNotExistsBean ( t , & user_model . User { Name : reservedUsername } )
2017-07-01 22:48:29 +03:00
}
}
2019-04-14 19:43:56 +03:00
func TestExportUserGPGKeys ( t * testing . T ) {
2019-11-26 02:21:37 +03:00
defer prepareTestEnv ( t ) ( )
2022-01-20 20:46:10 +03:00
// Export empty key list
2019-04-14 19:43:56 +03:00
testExportUserGPGKeys ( t , "user1" , ` -- -- - BEGIN PGP PUBLIC KEY BLOCK -- -- -
2022-03-02 19:32:18 +03:00
Note : This user hasn ' t uploaded any GPG keys .
2019-04-14 19:43:56 +03:00
= twTO
-- -- - END PGP PUBLIC KEY BLOCK -- -- -
` )
2022-01-20 20:46:10 +03:00
// Import key
// User1 <user1@example.com>
2019-04-14 19:43:56 +03:00
session := loginUser ( t , "user1" )
token := getTokenForLoggedInUser ( t , session )
testCreateGPGKey ( t , session . MakeRequest , token , http . StatusCreated , ` -- -- - BEGIN PGP PUBLIC KEY BLOCK -- -- -
mQENBFyy / VUBCADJ7zbM20Z1RWmFoVgp5WkQfI2rU1Vj9cQHes9i42wVLLtcbPeo
QzubgzvMPITDy7nfWxgSf83E23DoHQ1ACFbQh / 6 eFSRrjsusp3YQ / 0 8 NSfPPbcu8
0 M5G + VGwSfzS5uEcwBVQmHyKdcOZIERTNMtYZx1C3bjLD1XVJHvWz9D72Uq4qeO3
8 SR + lzp5n6ppUakcmRnxt3nGRBj1 + hEGkdgzyPo93iy + WioegY2lwCA9xMEo5dah
BmYxWx51zyiXYlReTaxlyb3 / nuSUt8IcW3Q8zjdtJj4Nu8U1SpV8EdaA1I9IPbHW
510 OSLmD3XhqHH5m6mIxL1YoWxk3V7gpDROtABEBAAG0GVVzZXIxIDx1c2VyMUBl
eGFtcGxlLmNvbT6JAU4EEwEIADgWIQTQEbrYxmXsp1z3j7z9 + v0I6RSEHwUCXLL9
VQIbAwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAKCRD9 + v0I6RSEH22YCACFqL5 +
6 M0m18AMC / pumcpnnmvAS1GrrKTF8nOROA1augZwp1WCNuKw2R6uOJIHANrYECSn
u7 + j6GBP2gbIW8mSAzS6HWCs7GGiPpVtT4wcu8wljUI6BxjpyZtoEkriyBjt6HfK
rkegbkuySoJvjq4IcO5D1LB1JWgsUjMYQJj / ZpBIzVtjG9QtFSOiT1Hct4PoZHdC
nsdSgyCkwRZXG + u3kT / wP9F663ba4o16vYlz3dCGo66lF2tyoG3qcyZ1OUzUrnuv
96 ytAzT6XIhrE0nVoBprMxFF5zExotJD3bHjcGBFNLf944bhjKee3U6t9 + OsfJVC
l7N5xxIawCuTQdbfuQENBFyy / VUBCADe61yGEoTwKfsOKIhxLaNoRmD883O0tiWt
soO / HPj9dPQLTOiwXgSgSCd8C + LNxGKct87wgFozpah4tDLC6c0nALuHJ0SLbkfz
55 aRhLeOOcrAydatDp72GroXzqpZ0xZBk5wjIWdgEol2GmVRM8QGbeuakU / HVz5y
lPzxUUocgdbSi3GE3zbzijQzVJdyL / kw / KP7pKT / PPKKJ2C5NQDLy0XGKEHddXGR
EWKkVlRalxq / TjfaMR0bi3MpezBsQmp99ATPO / d7trayZUxQHRtXzGFiOXfDHATr
qN730sODjqvU + mpc / SHCRwh9qWDjZRHSuKU5YDBjb5jIQJivZsQ / ABEBAAGJATYE
GAEIACAWIQTQEbrYxmXsp1z3j7z9 + v0I6RSEHwUCXLL9VQIbDAAKCRD9 + v0I6RSE
H7WoB / 4 tXl + 97 rQ6owPCGSVp1Xbwt2521V7COgsOFRVTRTryEWxRW8mm0S7wQvax
C0TLXKur6NVYQMn01iyL + FZzRpEWNuYF3f9QeeLJ / + l2DafESNhNTy17 + RPmacK6
21 dccpqchByVw / UMDeHSyjQLiG2lxzt8Gfx2gHmSbrq3aWovTGyz6JTffZvfy / n2
0 Hm437OBPazO0gZyXhdV2PE5RSUfvAgm44235tcV5EV0d32TJDfv61 + Vr2GUbah6
7 XhJ1v6JYuh8kaYaEz8OpZDeh7f6Ho6PzJrsy / TKTKhGgZNINj1iaPFyOkQgKR5M
GrE0MHOxUbc9tbtyk0F1SuzREUBH
= DDXw
-- -- - END PGP PUBLIC KEY BLOCK -- -- -
` )
2022-01-20 20:46:10 +03:00
// Export new key
2019-04-14 19:43:56 +03:00
testExportUserGPGKeys ( t , "user1" , ` -- -- - BEGIN PGP PUBLIC KEY BLOCK -- -- -
xsBNBFyy / VUBCADJ7zbM20Z1RWmFoVgp5WkQfI2rU1Vj9cQHes9i42wVLLtcbPeo
QzubgzvMPITDy7nfWxgSf83E23DoHQ1ACFbQh / 6 eFSRrjsusp3YQ / 0 8 NSfPPbcu8
0 M5G + VGwSfzS5uEcwBVQmHyKdcOZIERTNMtYZx1C3bjLD1XVJHvWz9D72Uq4qeO3
8 SR + lzp5n6ppUakcmRnxt3nGRBj1 + hEGkdgzyPo93iy + WioegY2lwCA9xMEo5dah
BmYxWx51zyiXYlReTaxlyb3 / nuSUt8IcW3Q8zjdtJj4Nu8U1SpV8EdaA1I9IPbHW
510 OSLmD3XhqHH5m6mIxL1YoWxk3V7gpDROtABEBAAHNGVVzZXIxIDx1c2VyMUBl
eGFtcGxlLmNvbT7CwI4EEwEIADgWIQTQEbrYxmXsp1z3j7z9 + v0I6RSEHwUCXLL9
VQIbAwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAKCRD9 + v0I6RSEH22YCACFqL5 +
6 M0m18AMC / pumcpnnmvAS1GrrKTF8nOROA1augZwp1WCNuKw2R6uOJIHANrYECSn
u7 + j6GBP2gbIW8mSAzS6HWCs7GGiPpVtT4wcu8wljUI6BxjpyZtoEkriyBjt6HfK
rkegbkuySoJvjq4IcO5D1LB1JWgsUjMYQJj / ZpBIzVtjG9QtFSOiT1Hct4PoZHdC
nsdSgyCkwRZXG + u3kT / wP9F663ba4o16vYlz3dCGo66lF2tyoG3qcyZ1OUzUrnuv
96 ytAzT6XIhrE0nVoBprMxFF5zExotJD3bHjcGBFNLf944bhjKee3U6t9 + OsfJVC
l7N5xxIawCuTQdbfzsBNBFyy / VUBCADe61yGEoTwKfsOKIhxLaNoRmD883O0tiWt
soO / HPj9dPQLTOiwXgSgSCd8C + LNxGKct87wgFozpah4tDLC6c0nALuHJ0SLbkfz
55 aRhLeOOcrAydatDp72GroXzqpZ0xZBk5wjIWdgEol2GmVRM8QGbeuakU / HVz5y
lPzxUUocgdbSi3GE3zbzijQzVJdyL / kw / KP7pKT / PPKKJ2C5NQDLy0XGKEHddXGR
EWKkVlRalxq / TjfaMR0bi3MpezBsQmp99ATPO / d7trayZUxQHRtXzGFiOXfDHATr
qN730sODjqvU + mpc / SHCRwh9qWDjZRHSuKU5YDBjb5jIQJivZsQ / ABEBAAHCwHYE
GAEIACAWIQTQEbrYxmXsp1z3j7z9 + v0I6RSEHwUCXLL9VQIbDAAKCRD9 + v0I6RSE
H7WoB / 4 tXl + 97 rQ6owPCGSVp1Xbwt2521V7COgsOFRVTRTryEWxRW8mm0S7wQvax
C0TLXKur6NVYQMn01iyL + FZzRpEWNuYF3f9QeeLJ / + l2DafESNhNTy17 + RPmacK6
21 dccpqchByVw / UMDeHSyjQLiG2lxzt8Gfx2gHmSbrq3aWovTGyz6JTffZvfy / n2
0 Hm437OBPazO0gZyXhdV2PE5RSUfvAgm44235tcV5EV0d32TJDfv61 + Vr2GUbah6
7 XhJ1v6JYuh8kaYaEz8OpZDeh7f6Ho6PzJrsy / TKTKhGgZNINj1iaPFyOkQgKR5M
GrE0MHOxUbc9tbtyk0F1SuzREUBH
= WFf5
-- -- - END PGP PUBLIC KEY BLOCK -- -- -
` )
}
func testExportUserGPGKeys ( t * testing . T , user , expected string ) {
session := loginUser ( t , user )
t . Logf ( "Testing username %s export gpg keys" , user )
req := NewRequest ( t , "GET" , "/" + user + ".gpg" )
resp := session . MakeRequest ( t , req , http . StatusOK )
2022-01-20 20:46:10 +03:00
// t.Log(resp.Body.String())
2019-04-14 19:43:56 +03:00
assert . Equal ( t , expected , resp . Body . String ( ) )
}
2022-04-07 21:59:56 +03:00
func TestListStopWatches ( t * testing . T ) {
defer prepareTestEnv ( t ) ( )
repo := unittest . AssertExistsAndLoadBean ( t , & repo_model . Repository { ID : 1 } ) . ( * repo_model . Repository )
owner := unittest . AssertExistsAndLoadBean ( t , & user_model . User { ID : repo . OwnerID } ) . ( * user_model . User )
session := loginUser ( t , owner . Name )
req := NewRequestf ( t , "GET" , "/user/stopwatches" )
resp := session . MakeRequest ( t , req , http . StatusOK )
var apiWatches [ ] * api . StopWatch
DecodeJSON ( t , resp , & apiWatches )
2022-06-13 12:37:59 +03:00
stopwatch := unittest . AssertExistsAndLoadBean ( t , & issues_model . Stopwatch { UserID : owner . ID } ) . ( * issues_model . Stopwatch )
issue := unittest . AssertExistsAndLoadBean ( t , & issues_model . Issue { ID : stopwatch . IssueID } ) . ( * issues_model . Issue )
2022-04-07 21:59:56 +03:00
if assert . Len ( t , apiWatches , 1 ) {
assert . EqualValues ( t , stopwatch . CreatedUnix . AsTime ( ) . Unix ( ) , apiWatches [ 0 ] . Created . Unix ( ) )
assert . EqualValues ( t , issue . Index , apiWatches [ 0 ] . IssueIndex )
assert . EqualValues ( t , issue . Title , apiWatches [ 0 ] . IssueTitle )
assert . EqualValues ( t , repo . Name , apiWatches [ 0 ] . RepoName )
assert . EqualValues ( t , repo . OwnerName , apiWatches [ 0 ] . RepoOwnerName )
assert . Greater ( t , int64 ( apiWatches [ 0 ] . Seconds ) , int64 ( 0 ) )
}
}