@ -20,6 +20,7 @@ import (
org_service "code.gitea.io/gitea/services/org"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestMain ( m * testing . M ) {
@ -101,23 +102,31 @@ func TestRenameUser(t *testing.T) {
assert . NoError ( t , unittest . PrepareTestDatabase ( ) )
user := unittest . AssertExistsAndLoadBean ( t , & user_model . User { ID : 21 } )
t . Run ( "Non-Local" , func ( t * testing . T ) {
u := & user_model . User {
Type : user_model . UserTypeIndividual ,
LoginType : auth . OAuth2 ,
t . Run ( "External user" , func ( t * testing . T ) {
adminUser := unittest . AssertExistsAndLoadBean ( t , & user_model . User { ID : 1 , IsAdmin : true } )
externalUser := & user_model . User {
Name : "external_user" ,
Email : "external_user@gitea.io" ,
LoginType : auth . LDAP ,
}
assert . ErrorIs ( t , RenameUser ( t . Context ( ) , u , "user_rename" ) , user_model . ErrUserIsNotLocal { } )
require . NoError ( t , user_model . CreateUser ( t . Context ( ) , externalUser , & user_model . Meta { } ) )
err := RenameUser ( t . Context ( ) , externalUser , externalUser . Name + "_changed" , externalUser )
assert . True ( t , user_model . IsErrUserIsNotLocal ( err ) , "external user is not allowed to rename themselves" )
err = RenameUser ( t . Context ( ) , externalUser , externalUser . Name + "_changed" , adminUser )
assert . NoError ( t , err , "admin can rename external user" )
} )
t . Run ( "Same username" , func ( t * testing . T ) {
assert . NoError ( t , RenameUser ( t . Context ( ) , user , user . Name ) )
assert . NoError ( t , RenameUser ( t . Context ( ) , user , user . Name , user ))
} )
t . Run ( "Non usable username" , func ( t * testing . T ) {
usernames := [ ] string { "--diff" , ".well-known" , "gitea-actions" , "aaa.atom" , "aa.png" }
for _ , username := range usernames {
assert . Error ( t , user_model . IsUsableUsername ( username ) , "non-usable username: %s" , username )
assert . Error ( t , RenameUser ( t . Context ( ) , user , username ), "non-usable username: %s" , username )
assert . Error ( t , RenameUser ( t . Context ( ) , user , username , user ), "non-usable username: %s" , username )
}
} )
@ -126,7 +135,7 @@ func TestRenameUser(t *testing.T) {
unittest . AssertNotExistsBean ( t , & user_model . User { ID : user . ID , Name : caps } )
unittest . AssertExistsAndLoadBean ( t , & repo_model . Repository { OwnerID : user . ID , OwnerName : user . Name } )
assert . NoError ( t , RenameUser ( t . Context ( ) , user , caps ))
assert . NoError ( t , RenameUser ( t . Context ( ) , user , caps , user ))
unittest . AssertExistsAndLoadBean ( t , & user_model . User { ID : user . ID , Name : caps } )
unittest . AssertExistsAndLoadBean ( t , & repo_model . Repository { OwnerID : user . ID , OwnerName : caps } )
@ -135,17 +144,17 @@ func TestRenameUser(t *testing.T) {
t . Run ( "Already exists" , func ( t * testing . T ) {
existUser := unittest . AssertExistsAndLoadBean ( t , & user_model . User { ID : 1 } )
assert . ErrorIs ( t , RenameUser ( t . Context ( ) , user , existUser . Name ), user_model . ErrUserAlreadyExist { Name : existUser . Name } )
assert . ErrorIs ( t , RenameUser ( t . Context ( ) , user , existUser . LowerName ), user_model . ErrUserAlreadyExist { Name : existUser . LowerName } )
assert . ErrorIs ( t , RenameUser ( t . Context ( ) , user , existUser . Name , user ), user_model . ErrUserAlreadyExist { Name : existUser . Name } )
assert . ErrorIs ( t , RenameUser ( t . Context ( ) , user , existUser . LowerName , user ), user_model . ErrUserAlreadyExist { Name : existUser . LowerName } )
newUsername := fmt . Sprintf ( "uSEr%d" , existUser . ID )
assert . ErrorIs ( t , RenameUser ( t . Context ( ) , user , newUsername ), user_model . ErrUserAlreadyExist { Name : newUsername } )
assert . ErrorIs ( t , RenameUser ( t . Context ( ) , user , newUsername , user ), user_model . ErrUserAlreadyExist { Name : newUsername } )
} )
t . Run ( "Normal" , func ( t * testing . T ) {
oldUsername := user . Name
newUsername := "User_Rename"
assert . NoError ( t , RenameUser ( t . Context ( ) , user , newUsername ))
assert . NoError ( t , RenameUser ( t . Context ( ) , user , newUsername , user ))
unittest . AssertExistsAndLoadBean ( t , & user_model . User { ID : user . ID , Name : newUsername , LowerName : strings . ToLower ( newUsername ) } )
redirectUID , err := user_model . LookupUserRedirect ( t . Context ( ) , oldUsername )