code.gitea.io/gitea@v1.22.3/tests/integration/signin_test.go (about)

     1  // Copyright 2017 The Gitea Authors. All rights reserved.
     2  // SPDX-License-Identifier: MIT
     3  
     4  package integration
     5  
     6  import (
     7  	"net/http"
     8  	"net/url"
     9  	"strings"
    10  	"testing"
    11  
    12  	"code.gitea.io/gitea/models/unittest"
    13  	user_model "code.gitea.io/gitea/models/user"
    14  	"code.gitea.io/gitea/modules/setting"
    15  	"code.gitea.io/gitea/modules/translation"
    16  	"code.gitea.io/gitea/tests"
    17  
    18  	"github.com/stretchr/testify/assert"
    19  )
    20  
    21  func testLoginFailed(t *testing.T, username, password, message string) {
    22  	session := emptyTestSession(t)
    23  	req := NewRequestWithValues(t, "POST", "/user/login", map[string]string{
    24  		"_csrf":     GetCSRF(t, session, "/user/login"),
    25  		"user_name": username,
    26  		"password":  password,
    27  	})
    28  	resp := session.MakeRequest(t, req, http.StatusOK)
    29  
    30  	htmlDoc := NewHTMLParser(t, resp.Body)
    31  	resultMsg := htmlDoc.doc.Find(".ui.message>p").Text()
    32  
    33  	assert.EqualValues(t, message, resultMsg)
    34  }
    35  
    36  func TestSignin(t *testing.T) {
    37  	defer tests.PrepareTestEnv(t)()
    38  
    39  	user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})
    40  
    41  	// add new user with user2's email
    42  	user.Name = "testuser"
    43  	user.LowerName = strings.ToLower(user.Name)
    44  	user.ID = 0
    45  	unittest.AssertSuccessfulInsert(t, user)
    46  
    47  	samples := []struct {
    48  		username string
    49  		password string
    50  		message  string
    51  	}{
    52  		{username: "wrongUsername", password: "wrongPassword", message: translation.NewLocale("en-US").TrString("form.username_password_incorrect")},
    53  		{username: "wrongUsername", password: "password", message: translation.NewLocale("en-US").TrString("form.username_password_incorrect")},
    54  		{username: "user15", password: "wrongPassword", message: translation.NewLocale("en-US").TrString("form.username_password_incorrect")},
    55  		{username: "user1@example.com", password: "wrongPassword", message: translation.NewLocale("en-US").TrString("form.username_password_incorrect")},
    56  	}
    57  
    58  	for _, s := range samples {
    59  		testLoginFailed(t, s.username, s.password, s.message)
    60  	}
    61  }
    62  
    63  func TestSigninWithRememberMe(t *testing.T) {
    64  	defer tests.PrepareTestEnv(t)()
    65  
    66  	user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})
    67  	baseURL, _ := url.Parse(setting.AppURL)
    68  
    69  	session := emptyTestSession(t)
    70  	req := NewRequestWithValues(t, "POST", "/user/login", map[string]string{
    71  		"_csrf":     GetCSRF(t, session, "/user/login"),
    72  		"user_name": user.Name,
    73  		"password":  userPassword,
    74  		"remember":  "on",
    75  	})
    76  	session.MakeRequest(t, req, http.StatusSeeOther)
    77  
    78  	c := session.GetCookie(setting.CookieRememberName)
    79  	assert.NotNil(t, c)
    80  
    81  	session = emptyTestSession(t)
    82  
    83  	// Without session the settings page should not be reachable
    84  	req = NewRequest(t, "GET", "/user/settings")
    85  	session.MakeRequest(t, req, http.StatusSeeOther)
    86  
    87  	req = NewRequest(t, "GET", "/user/login")
    88  	// Set the remember me cookie for the login GET request
    89  	session.jar.SetCookies(baseURL, []*http.Cookie{c})
    90  	session.MakeRequest(t, req, http.StatusSeeOther)
    91  
    92  	// With session the settings page should be reachable
    93  	req = NewRequest(t, "GET", "/user/settings")
    94  	session.MakeRequest(t, req, http.StatusOK)
    95  }