summaryrefslogtreecommitdiffstats
path: root/tests/integration/signup_test.go
diff options
context:
space:
mode:
authorDaniel Baumann <daniel@debian.org>2024-10-18 20:33:49 +0200
committerDaniel Baumann <daniel@debian.org>2024-10-18 20:33:49 +0200
commitdd136858f1ea40ad3c94191d647487fa4f31926c (patch)
tree58fec94a7b2a12510c9664b21793f1ed560c6518 /tests/integration/signup_test.go
parentInitial commit. (diff)
downloadforgejo-dd136858f1ea40ad3c94191d647487fa4f31926c.tar.xz
forgejo-dd136858f1ea40ad3c94191d647487fa4f31926c.zip
Adding upstream version 9.0.0.upstream/9.0.0upstreamdebian
Signed-off-by: Daniel Baumann <daniel@debian.org>
Diffstat (limited to 'tests/integration/signup_test.go')
-rw-r--r--tests/integration/signup_test.go209
1 files changed, 209 insertions, 0 deletions
diff --git a/tests/integration/signup_test.go b/tests/integration/signup_test.go
new file mode 100644
index 0000000..d5df41f
--- /dev/null
+++ b/tests/integration/signup_test.go
@@ -0,0 +1,209 @@
+// Copyright 2017 The Gitea Authors. All rights reserved.
+// SPDX-License-Identifier: MIT
+
+package integration
+
+import (
+ "fmt"
+ "net/http"
+ "strings"
+ "testing"
+
+ "code.gitea.io/gitea/models/unittest"
+ user_model "code.gitea.io/gitea/models/user"
+ "code.gitea.io/gitea/modules/cache"
+ "code.gitea.io/gitea/modules/setting"
+ "code.gitea.io/gitea/modules/test"
+ "code.gitea.io/gitea/modules/translation"
+ "code.gitea.io/gitea/tests"
+
+ "github.com/stretchr/testify/assert"
+)
+
+func TestSignup(t *testing.T) {
+ defer tests.PrepareTestEnv(t)()
+
+ setting.Service.EnableCaptcha = false
+
+ req := NewRequestWithValues(t, "POST", "/user/sign_up", map[string]string{
+ "user_name": "exampleUser",
+ "email": "exampleUser@example.com",
+ "password": "examplePassword!1",
+ "retype": "examplePassword!1",
+ })
+ MakeRequest(t, req, http.StatusSeeOther)
+
+ // should be able to view new user's page
+ req = NewRequest(t, "GET", "/exampleUser")
+ MakeRequest(t, req, http.StatusOK)
+}
+
+func TestSignupAsRestricted(t *testing.T) {
+ defer tests.PrepareTestEnv(t)()
+
+ setting.Service.EnableCaptcha = false
+ setting.Service.DefaultUserIsRestricted = true
+
+ req := NewRequestWithValues(t, "POST", "/user/sign_up", map[string]string{
+ "user_name": "restrictedUser",
+ "email": "restrictedUser@example.com",
+ "password": "examplePassword!1",
+ "retype": "examplePassword!1",
+ })
+ MakeRequest(t, req, http.StatusSeeOther)
+
+ // should be able to view new user's page
+ req = NewRequest(t, "GET", "/restrictedUser")
+ MakeRequest(t, req, http.StatusOK)
+
+ user2 := unittest.AssertExistsAndLoadBean(t, &user_model.User{Name: "restrictedUser"})
+ assert.True(t, user2.IsRestricted)
+}
+
+func TestSignupEmail(t *testing.T) {
+ defer tests.PrepareTestEnv(t)()
+
+ setting.Service.EnableCaptcha = false
+
+ tests := []struct {
+ email string
+ wantStatus int
+ wantMsg string
+ }{
+ {"exampleUser@example.com\r\n", http.StatusOK, translation.NewLocale("en-US").TrString("form.email_invalid")},
+ {"exampleUser@example.com\r", http.StatusOK, translation.NewLocale("en-US").TrString("form.email_invalid")},
+ {"exampleUser@example.com\n", http.StatusOK, translation.NewLocale("en-US").TrString("form.email_invalid")},
+ {"exampleUser@example.com", http.StatusSeeOther, ""},
+ }
+
+ for i, test := range tests {
+ req := NewRequestWithValues(t, "POST", "/user/sign_up", map[string]string{
+ "user_name": fmt.Sprintf("exampleUser%d", i),
+ "email": test.email,
+ "password": "examplePassword!1",
+ "retype": "examplePassword!1",
+ })
+ resp := MakeRequest(t, req, test.wantStatus)
+ if test.wantMsg != "" {
+ htmlDoc := NewHTMLParser(t, resp.Body)
+ assert.Equal(t,
+ test.wantMsg,
+ strings.TrimSpace(htmlDoc.doc.Find(".ui.message").Text()),
+ )
+ }
+ }
+}
+
+func TestSignupEmailChangeForInactiveUser(t *testing.T) {
+ defer tests.PrepareTestEnv(t)()
+
+ // Disable the captcha & enable email confirmation for registrations
+ defer test.MockVariableValue(&setting.Service.EnableCaptcha, false)()
+ defer test.MockVariableValue(&setting.Service.RegisterEmailConfirm, true)()
+
+ // Create user
+ req := NewRequestWithValues(t, "POST", "/user/sign_up", map[string]string{
+ "user_name": "exampleUserX",
+ "email": "wrong-email@example.com",
+ "password": "examplePassword!1",
+ "retype": "examplePassword!1",
+ })
+ MakeRequest(t, req, http.StatusOK)
+
+ session := loginUserWithPassword(t, "exampleUserX", "examplePassword!1")
+
+ // Verify that the initial e-mail is the wrong one.
+ user := unittest.AssertExistsAndLoadBean(t, &user_model.User{Name: "exampleUserX"})
+ assert.Equal(t, "wrong-email@example.com", user.Email)
+
+ // Change the email address
+ req = NewRequestWithValues(t, "POST", "/user/activate", map[string]string{
+ "email": "fine-email@example.com",
+ })
+ session.MakeRequest(t, req, http.StatusSeeOther)
+
+ // Verify that the email was updated
+ user = unittest.AssertExistsAndLoadBean(t, &user_model.User{Name: "exampleUserX"})
+ assert.Equal(t, "fine-email@example.com", user.Email)
+
+ // Try to change the email again
+ req = NewRequestWithValues(t, "POST", "/user/activate", map[string]string{
+ "email": "wrong-again@example.com",
+ })
+ session.MakeRequest(t, req, http.StatusSeeOther)
+ // Verify that the email was NOT updated
+ user = unittest.AssertExistsAndLoadBean(t, &user_model.User{Name: "exampleUserX"})
+ assert.Equal(t, "fine-email@example.com", user.Email)
+}
+
+func TestSignupEmailChangeForActiveUser(t *testing.T) {
+ defer tests.PrepareTestEnv(t)()
+
+ // Disable the captcha & enable email confirmation for registrations
+ defer test.MockVariableValue(&setting.Service.EnableCaptcha, false)()
+ defer test.MockVariableValue(&setting.Service.RegisterEmailConfirm, false)()
+
+ // Create user
+ req := NewRequestWithValues(t, "POST", "/user/sign_up", map[string]string{
+ "user_name": "exampleUserY",
+ "email": "wrong-email-2@example.com",
+ "password": "examplePassword!1",
+ "retype": "examplePassword!1",
+ })
+ MakeRequest(t, req, http.StatusSeeOther)
+
+ session := loginUserWithPassword(t, "exampleUserY", "examplePassword!1")
+
+ // Verify that the initial e-mail is the wrong one.
+ user := unittest.AssertExistsAndLoadBean(t, &user_model.User{Name: "exampleUserY"})
+ assert.Equal(t, "wrong-email-2@example.com", user.Email)
+
+ // Changing the email for a validated address is not available
+ req = NewRequestWithValues(t, "POST", "/user/activate", map[string]string{
+ "email": "fine-email-2@example.com",
+ })
+ session.MakeRequest(t, req, http.StatusNotFound)
+
+ // Verify that the email remained unchanged
+ user = unittest.AssertExistsAndLoadBean(t, &user_model.User{Name: "exampleUserY"})
+ assert.Equal(t, "wrong-email-2@example.com", user.Email)
+}
+
+func TestSignupImageCaptcha(t *testing.T) {
+ defer tests.PrepareTestEnv(t)()
+ defer test.MockVariableValue(&setting.Service.RegisterEmailConfirm, false)()
+ defer test.MockVariableValue(&setting.Service.EnableCaptcha, true)()
+ defer test.MockVariableValue(&setting.Service.CaptchaType, "image")()
+ c := cache.GetCache()
+
+ req := NewRequest(t, "GET", "/user/sign_up")
+ resp := MakeRequest(t, req, http.StatusOK)
+ htmlDoc := NewHTMLParser(t, resp.Body)
+
+ idCaptcha, ok := htmlDoc.Find("input[name='img-captcha-id']").Attr("value")
+ assert.True(t, ok)
+
+ digits, ok := c.Get("captcha:" + idCaptcha).(string)
+ assert.True(t, ok)
+ assert.Len(t, digits, 6)
+
+ digitStr := ""
+ // Convert digits to ASCII digits.
+ for _, digit := range digits {
+ digitStr += string(digit + '0')
+ }
+
+ req = NewRequestWithValues(t, "POST", "/user/sign_up", map[string]string{
+ "user_name": "captcha-test",
+ "email": "captcha-test@example.com",
+ "password": "examplePassword!1",
+ "retype": "examplePassword!1",
+ "img-captcha-id": idCaptcha,
+ "img-captcha-response": digitStr,
+ })
+ MakeRequest(t, req, http.StatusSeeOther)
+
+ loginUserWithPassword(t, "captcha-test", "examplePassword!1")
+
+ unittest.AssertExistsAndLoadBean(t, &user_model.User{Name: "captcha-test", IsActive: true})
+}