Skip to content

Commit de36d2f

Browse files
committed
fix tests
1 parent d7608e5 commit de36d2f

File tree

3 files changed

+21
-37
lines changed

3 files changed

+21
-37
lines changed

models/user/user.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -868,15 +868,16 @@ func makeTimeLimitCodeHashData(opts *TimeLimitCodeOptions, u *User) string {
868868
return fmt.Sprintf("%s|%d|%s|%s|%s|%s", opts.Purpose, u.ID, strings.ToLower(util.IfZero(opts.NewEmail, u.Email)), u.LowerName, u.Passwd, u.Rands)
869869
}
870870

871-
// GenerateUserTimeLimitCode generates an activate code based on user information and given e-mail.
871+
// GenerateUserTimeLimitCode generates a time-limit code based on user information and given e-mail.
872+
// TODO: need to use cache or db to store it to make sure a code can only be consumed once
872873
func GenerateUserTimeLimitCode(opts *TimeLimitCodeOptions, u *User) string {
873874
data := makeTimeLimitCodeHashData(opts, u)
874875
code := base.CreateTimeLimitCode(data, setting.Service.ActiveCodeLives, time.Now(), nil)
875876
code += hex.EncodeToString([]byte(u.LowerName)) // Add tail hex username
876877
return code
877878
}
878879

879-
// VerifyUserTimeLimitCode verifies active code when active account
880+
// VerifyUserTimeLimitCode verifies the time-limit code
880881
func VerifyUserTimeLimitCode(ctx context.Context, opts *TimeLimitCodeOptions, code string) (user *User) {
881882
if user = GetVerifyUser(ctx, code); user != nil {
882883
// time limit code

tests/integration/org_team_invite_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -274,7 +274,8 @@ func TestOrgTeamEmailInviteRedirectsNewUserWithActivation(t *testing.T) {
274274
user, err := user_model.GetUserByName(db.DefaultContext, "doesnotexist")
275275
assert.NoError(t, err)
276276

277-
activateURL := fmt.Sprintf("/user/activate?code=%s", user.GenerateEmailActivateCode("[email protected]"))
277+
activationCode := user_model.GenerateUserTimeLimitCode(&user_model.TimeLimitCodeOptions{Purpose: user_model.TimeLimitCodeActivateAccount}, user)
278+
activateURL := fmt.Sprintf("/user/activate?code=%s", activationCode)
278279
req = NewRequestWithValues(t, "POST", activateURL, map[string]string{
279280
"password": "examplePassword!1",
280281
})

tests/integration/signup_test.go

Lines changed: 16 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
package integration
55

66
import (
7+
"code.gitea.io/gitea/models/db"
78
"fmt"
89
"net/http"
910
"strings"
@@ -99,34 +100,40 @@ func TestSignupEmailActive(t *testing.T) {
99100

100101
// try to sign up and send the activation email
101102
req := NewRequestWithValues(t, "POST", "/user/sign_up", map[string]string{
102-
"user_name": "test-user-1",
103-
"email": "email[email protected]",
103+
"user_name": "Test-User-1",
104+
"email": "EmAiL[email protected]",
104105
"password": "password1",
105106
"retype": "password1",
106107
})
107108
resp := MakeRequest(t, req, http.StatusOK)
108-
assert.Contains(t, resp.Body.String(), `A new confirmation email has been sent to <b>email[email protected]</b>.`)
109+
assert.Contains(t, resp.Body.String(), `A new confirmation email has been sent to <b>EmAiL[email protected]</b>.`)
109110

110111
// access "user/activate" means trying to re-send the activation email
111112
session := loginUserWithPassword(t, "test-user-1", "password1")
112113
resp = session.MakeRequest(t, NewRequest(t, "GET", "/user/activate"), http.StatusOK)
113114
assert.Contains(t, resp.Body.String(), "You have already requested an activation email recently")
114115

115-
// access anywhere else will see a "Activate Your Account" prompt, and there is a chance to change email
116+
// access anywhere else will see an "Activate Your Account" prompt, and there is a chance to change email
116117
resp = session.MakeRequest(t, NewRequest(t, "GET", "/user/issues"), http.StatusOK)
117118
assert.Contains(t, resp.Body.String(), `<input id="change-email" name="change_email" `)
118119

119120
// post to "user/activate" with a new email
120121
session.MakeRequest(t, NewRequestWithValues(t, "POST", "/user/activate", map[string]string{"change_email": "[email protected]"}), http.StatusSeeOther)
121-
user := unittest.AssertExistsAndLoadBean(t, &user_model.User{Name: "test-user-1"})
122+
user := unittest.AssertExistsAndLoadBean(t, &user_model.User{Name: "Test-User-1"})
122123
assert.Equal(t, "[email protected]", user.Email)
123124
email := unittest.AssertExistsAndLoadBean(t, &user_model.EmailAddress{Email: "[email protected]"})
124125
assert.False(t, email.IsActivated)
125126
assert.True(t, email.IsPrimary)
126127

128+
// generate an activation code from lower-cased email
129+
activationCode := user_model.GenerateUserTimeLimitCode(&user_model.TimeLimitCodeOptions{Purpose: user_model.TimeLimitCodeActivateAccount}, user)
130+
// and update the user email to case-sensitive, it shouldn't affect the verification later
131+
_, _ = db.Exec(db.DefaultContext, "UPDATE `user` SET email=? WHERE id=?", "[email protected]", user.ID)
132+
user = unittest.AssertExistsAndLoadBean(t, &user_model.User{Name: "Test-User-1"})
133+
assert.Equal(t, "[email protected]", user.Email)
134+
127135
// access "user/activate" with a valid activation code, then get the "verify password" page
128-
user = unittest.AssertExistsAndLoadBean(t, &user_model.User{Name: "test-user-1"})
129-
activationCode := user.GenerateEmailActivateCode(user.Email)
136+
user = unittest.AssertExistsAndLoadBean(t, &user_model.User{Name: "Test-User-1"})
130137
resp = session.MakeRequest(t, NewRequest(t, "GET", "/user/activate?code="+activationCode), http.StatusOK)
131138
assert.Contains(t, resp.Body.String(), `<input id="verify-password"`)
132139

@@ -138,7 +145,7 @@ func TestSignupEmailActive(t *testing.T) {
138145
resp = session.MakeRequest(t, req, http.StatusOK)
139146
assert.Contains(t, resp.Body.String(), `Your password does not match`)
140147
assert.Contains(t, resp.Body.String(), `<input id="verify-password"`)
141-
user = unittest.AssertExistsAndLoadBean(t, &user_model.User{Name: "test-user-1"})
148+
user = unittest.AssertExistsAndLoadBean(t, &user_model.User{Name: "Test-User-1"})
142149
assert.False(t, user.IsActive)
143150

144151
// then use a correct password, the user should be activated
@@ -148,31 +155,6 @@ func TestSignupEmailActive(t *testing.T) {
148155
})
149156
resp = session.MakeRequest(t, req, http.StatusSeeOther)
150157
assert.Equal(t, "/", test.RedirectURL(resp))
151-
user = unittest.AssertExistsAndLoadBean(t, &user_model.User{Name: "test-user-1"})
152-
assert.True(t, user.IsActive)
153-
}
154-
155-
func TestSignUpWithUppercaseEmail(t *testing.T) {
156-
defer tests.PrepareTestEnv(t)()
157-
defer test.MockVariableValue(&setting.Service.RegisterEmailConfirm, true)()
158-
159-
req := NewRequestWithValues(t, "POST", "/user/sign_up", map[string]string{
160-
"user_name": "Upper-user-1",
161-
"email": "[email protected]",
162-
"password": "password1",
163-
"retype": "password1",
164-
})
165-
MakeRequest(t, req, http.StatusOK)
166-
167-
user := unittest.AssertExistsAndLoadBean(t, &user_model.User{Name: "Upper-user-1"})
168-
session := loginUserWithPassword(t, "Upper-user-1", "password1")
169-
activationCode := user.GenerateEmailActivateCode(user.Email)
170-
req = NewRequestWithValues(t, "POST", "/user/activate", map[string]string{
171-
"code": activationCode,
172-
"password": "password1",
173-
})
174-
resp := session.MakeRequest(t, req, http.StatusSeeOther)
175-
assert.Equal(t, "/", test.RedirectURL(resp))
176-
user = unittest.AssertExistsAndLoadBean(t, &user_model.User{Name: "Upper-user-1"})
158+
user = unittest.AssertExistsAndLoadBean(t, &user_model.User{Name: "Test-User-1"})
177159
assert.True(t, user.IsActive)
178160
}

0 commit comments

Comments
 (0)