Skip to content

Commit 7bde2bf

Browse files
earl-warrenGusted
andauthored
add unit test for user renaming (#26261)
- The user renaming function has zero test coverage. - This patch brings that up to speed to test for various scenarios and ensure that in a normal workflow the correct things has changed to their respective new value. Most scenarios are to ensure certain things DO NOT happen. (cherry picked from commit 5b9d34ed115c9ef24012b8027959ea0afdcb4e2d) Refs: https://codeberg.org/forgejo/forgejo/pulls/1156 Co-authored-by: Gusted <[email protected]>
1 parent 02d5f42 commit 7bde2bf

File tree

1 file changed

+64
-0
lines changed

1 file changed

+64
-0
lines changed

services/user/user_test.go

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,13 @@
44
package user
55

66
import (
7+
"fmt"
78
"path/filepath"
9+
"strings"
810
"testing"
911

1012
"code.gitea.io/gitea/models"
13+
"code.gitea.io/gitea/models/auth"
1114
"code.gitea.io/gitea/models/db"
1215
"code.gitea.io/gitea/models/organization"
1316
repo_model "code.gitea.io/gitea/models/repo"
@@ -94,6 +97,67 @@ func TestCreateUser(t *testing.T) {
9497
assert.NoError(t, DeleteUser(db.DefaultContext, user, false))
9598
}
9699

100+
func TestRenameUser(t *testing.T) {
101+
assert.NoError(t, unittest.PrepareTestDatabase())
102+
user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 21})
103+
104+
t.Run("Non-Local", func(t *testing.T) {
105+
u := &user_model.User{
106+
Type: user_model.UserTypeIndividual,
107+
LoginType: auth.OAuth2,
108+
}
109+
assert.ErrorIs(t, RenameUser(db.DefaultContext, u, "user_rename"), user_model.ErrUserIsNotLocal{})
110+
})
111+
112+
t.Run("Same username", func(t *testing.T) {
113+
assert.ErrorIs(t, RenameUser(db.DefaultContext, user, user.Name), user_model.ErrUsernameNotChanged{UID: user.ID, Name: user.Name})
114+
})
115+
116+
t.Run("Non usable username", func(t *testing.T) {
117+
usernames := []string{"--diff", "aa.png", ".well-known", "search", "aaa.atom"}
118+
for _, username := range usernames {
119+
t.Run(username, func(t *testing.T) {
120+
assert.Error(t, user_model.IsUsableUsername(username))
121+
assert.Error(t, RenameUser(db.DefaultContext, user, username))
122+
})
123+
}
124+
})
125+
126+
t.Run("Only capitalization", func(t *testing.T) {
127+
caps := strings.ToUpper(user.Name)
128+
unittest.AssertNotExistsBean(t, &user_model.User{ID: user.ID, Name: caps})
129+
unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{OwnerID: user.ID, OwnerName: user.Name})
130+
131+
assert.NoError(t, RenameUser(db.DefaultContext, user, caps))
132+
133+
unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: user.ID, Name: caps})
134+
unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{OwnerID: user.ID, OwnerName: caps})
135+
})
136+
137+
t.Run("Already exists", func(t *testing.T) {
138+
existUser := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 1})
139+
140+
assert.ErrorIs(t, RenameUser(db.DefaultContext, user, existUser.Name), user_model.ErrUserAlreadyExist{Name: existUser.Name})
141+
assert.ErrorIs(t, RenameUser(db.DefaultContext, user, existUser.LowerName), user_model.ErrUserAlreadyExist{Name: existUser.LowerName})
142+
newUsername := fmt.Sprintf("uSEr%d", existUser.ID)
143+
assert.ErrorIs(t, RenameUser(db.DefaultContext, user, newUsername), user_model.ErrUserAlreadyExist{Name: newUsername})
144+
})
145+
146+
t.Run("Normal", func(t *testing.T) {
147+
oldUsername := user.Name
148+
newUsername := "User_Rename"
149+
150+
assert.NoError(t, RenameUser(db.DefaultContext, user, newUsername))
151+
unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: user.ID, Name: newUsername, LowerName: strings.ToLower(newUsername)})
152+
153+
redirectUID, err := user_model.LookupUserRedirect(oldUsername)
154+
assert.NoError(t, err)
155+
assert.EqualValues(t, user.ID, redirectUID)
156+
157+
unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{OwnerID: user.ID, OwnerName: user.Name})
158+
})
159+
}
160+
97161
func TestCreateUser_Issue5882(t *testing.T) {
98162
// Init settings
99163
_ = setting.Admin

0 commit comments

Comments
 (0)