Преглед изворни кода

Less verbose integration tests (#2123)

* Helper functions for intergration test boilerplate
tags/v1.2.0-rc1
Ethan Koenig пре 6 година
родитељ
комит
f1adaef458

+ 1
- 1
integrations/api_branch_test.go Прегледај датотеку



session := loginUser(t, "user2") session := loginUser(t, "user2")
req := NewRequestf(t, "GET", "/api/v1/repos/user2/repo1/branches/%s", branchName) req := NewRequestf(t, "GET", "/api/v1/repos/user2/repo1/branches/%s", branchName)
resp := session.MakeRequest(t, req)
resp := session.MakeRequest(t, req, NoExpectedStatus)
if !exists { if !exists {
assert.EqualValues(t, http.StatusNotFound, resp.HeaderCode) assert.EqualValues(t, http.StatusNotFound, resp.HeaderCode)
return return

+ 1
- 2
integrations/api_comment_test.go Прегледај датотеку

session := loginUser(t, repoOwner.Name) session := loginUser(t, repoOwner.Name)
req := NewRequestf(t, "GET", "/api/v1/repos/%s/%s/issues/%d/comments", req := NewRequestf(t, "GET", "/api/v1/repos/%s/%s/issues/%d/comments",
repoOwner.Name, repo.Name, issue.Index) repoOwner.Name, repo.Name, issue.Index)
resp := session.MakeRequest(t, req)
assert.EqualValues(t, http.StatusOK, resp.HeaderCode)
resp := session.MakeRequest(t, req, http.StatusOK)


var comments []*api.Comment var comments []*api.Comment
DecodeJSON(t, resp, &comments) DecodeJSON(t, resp, &comments)

+ 2
- 4
integrations/api_issue_label_test.go Прегледај датотеку

Labels: []int64{label.ID}, Labels: []int64{label.ID},
}) })
session := loginUser(t, owner.Name) session := loginUser(t, owner.Name)
resp := session.MakeRequest(t, req)
assert.EqualValues(t, http.StatusOK, resp.HeaderCode)
resp := session.MakeRequest(t, req, http.StatusOK)
var apiLabels []*api.Label var apiLabels []*api.Label
DecodeJSON(t, resp, &apiLabels) DecodeJSON(t, resp, &apiLabels)
assert.Len(t, apiLabels, models.GetCount(t, &models.IssueLabel{IssueID: issue.ID})) assert.Len(t, apiLabels, models.GetCount(t, &models.IssueLabel{IssueID: issue.ID}))
Labels: []int64{label.ID}, Labels: []int64{label.ID},
}) })
session := loginUser(t, owner.Name) session := loginUser(t, owner.Name)
resp := session.MakeRequest(t, req)
assert.EqualValues(t, http.StatusOK, resp.HeaderCode)
resp := session.MakeRequest(t, req, http.StatusOK)
var apiLabels []*api.Label var apiLabels []*api.Label
DecodeJSON(t, resp, &apiLabels) DecodeJSON(t, resp, &apiLabels)
assert.Len(t, apiLabels, 1) assert.Len(t, apiLabels, 1)

+ 2
- 4
integrations/api_issue_test.go Прегледај датотеку

session := loginUser(t, owner.Name) session := loginUser(t, owner.Name)
req := NewRequestf(t, "GET", "/api/v1/repos/%s/%s/issues?state=all", req := NewRequestf(t, "GET", "/api/v1/repos/%s/%s/issues?state=all",
owner.Name, repo.Name) owner.Name, repo.Name)
resp := session.MakeRequest(t, req)
assert.EqualValues(t, http.StatusOK, resp.HeaderCode)
resp := session.MakeRequest(t, req, http.StatusOK)
var apiIssues []*api.Issue var apiIssues []*api.Issue
DecodeJSON(t, resp, &apiIssues) DecodeJSON(t, resp, &apiIssues)
assert.Len(t, apiIssues, models.GetCount(t, &models.Issue{RepoID: repo.ID})) assert.Len(t, apiIssues, models.GetCount(t, &models.Issue{RepoID: repo.ID}))
Title: title, Title: title,
Assignee: owner.Name, Assignee: owner.Name,
}) })
resp := session.MakeRequest(t, req)
assert.EqualValues(t, http.StatusCreated, resp.HeaderCode)
resp := session.MakeRequest(t, req, http.StatusCreated)
var apiIssue api.Issue var apiIssue api.Issue
DecodeJSON(t, resp, &apiIssue) DecodeJSON(t, resp, &apiIssue)
assert.Equal(t, apiIssue.Body, body) assert.Equal(t, apiIssue.Body, body)

+ 1
- 2
integrations/api_pull_test.go Прегледај датотеку



session := loginUser(t, "user2") session := loginUser(t, "user2")
req := NewRequestf(t, "GET", "/api/v1/repos/%s/%s/pulls?state=all", owner.Name, repo.Name) req := NewRequestf(t, "GET", "/api/v1/repos/%s/%s/pulls?state=all", owner.Name, repo.Name)
resp := session.MakeRequest(t, req)
assert.EqualValues(t, http.StatusOK, resp.HeaderCode)
resp := session.MakeRequest(t, req, http.StatusOK)


var pulls []*api.PullRequest var pulls []*api.PullRequest
DecodeJSON(t, resp, &pulls) DecodeJSON(t, resp, &pulls)

+ 2
- 6
integrations/api_repo_test.go Прегледај датотеку

import ( import (
"net/http" "net/http"
"testing" "testing"

"github.com/stretchr/testify/assert"
) )


func TestAPIUserReposNotLogin(t *testing.T) { func TestAPIUserReposNotLogin(t *testing.T) {
prepareTestEnv(t) prepareTestEnv(t)


req := NewRequest(t, "GET", "/api/v1/users/user2/repos") req := NewRequest(t, "GET", "/api/v1/users/user2/repos")
resp := MakeRequest(req)
assert.EqualValues(t, http.StatusOK, resp.HeaderCode)
MakeRequest(t, req, http.StatusOK)
} }


func TestAPISearchRepoNotLogin(t *testing.T) { func TestAPISearchRepoNotLogin(t *testing.T) {
prepareTestEnv(t) prepareTestEnv(t)


req := NewRequest(t, "GET", "/api/v1/repos/search?q=Test") req := NewRequest(t, "GET", "/api/v1/repos/search?q=Test")
resp := MakeRequest(req)
assert.EqualValues(t, http.StatusOK, resp.HeaderCode)
MakeRequest(t, req, http.StatusOK)
} }

+ 1
- 2
integrations/api_team_test.go Прегледај датотеку



session := loginUser(t, user.Name) session := loginUser(t, user.Name)
req := NewRequestf(t, "GET", "/api/v1/teams/%d", teamUser.TeamID) req := NewRequestf(t, "GET", "/api/v1/teams/%d", teamUser.TeamID)
resp := session.MakeRequest(t, req)
assert.EqualValues(t, http.StatusOK, resp.HeaderCode)
resp := session.MakeRequest(t, req, http.StatusOK)


var apiTeam api.Team var apiTeam api.Team
DecodeJSON(t, resp, &apiTeam) DecodeJSON(t, resp, &apiTeam)

+ 7
- 19
integrations/change_default_branch_test.go Прегледај датотеку

"testing" "testing"


"code.gitea.io/gitea/models" "code.gitea.io/gitea/models"

"github.com/stretchr/testify/assert"
) )


func TestChangeDefaultBranch(t *testing.T) { func TestChangeDefaultBranch(t *testing.T) {
session := loginUser(t, owner.Name) session := loginUser(t, owner.Name)
branchesURL := fmt.Sprintf("/%s/%s/settings/branches", owner.Name, repo.Name) branchesURL := fmt.Sprintf("/%s/%s/settings/branches", owner.Name, repo.Name)


req := NewRequest(t, "GET", branchesURL)
resp := session.MakeRequest(t, req)
assert.EqualValues(t, http.StatusOK, resp.HeaderCode)
doc := NewHTMLParser(t, resp.Body)

req = NewRequestWithValues(t, "POST", branchesURL, map[string]string{
"_csrf": doc.GetCSRF(),
csrf := GetCSRF(t, session, branchesURL)
req := NewRequestWithValues(t, "POST", branchesURL, map[string]string{
"_csrf": csrf,
"action": "default_branch", "action": "default_branch",
"branch": "DefaultBranch", "branch": "DefaultBranch",
}) })
resp = session.MakeRequest(t, req)
assert.EqualValues(t, http.StatusFound, resp.HeaderCode)

req = NewRequest(t, "GET", branchesURL)
resp = session.MakeRequest(t, req)
assert.EqualValues(t, http.StatusOK, resp.HeaderCode)
doc = NewHTMLParser(t, resp.Body)
session.MakeRequest(t, req, http.StatusFound)


csrf = GetCSRF(t, session, branchesURL)
req = NewRequestWithValues(t, "POST", branchesURL, map[string]string{ req = NewRequestWithValues(t, "POST", branchesURL, map[string]string{
"_csrf": doc.GetInputValueByName("_csrf"),
"_csrf": csrf,
"action": "default_branch", "action": "default_branch",
"branch": "does_not_exist", "branch": "does_not_exist",
}) })
resp = session.MakeRequest(t, req)
assert.EqualValues(t, http.StatusNotFound, resp.HeaderCode)
session.MakeRequest(t, req, http.StatusNotFound)
} }

+ 4
- 11
integrations/delete_user_test.go Прегледај датотеку

"testing" "testing"


"code.gitea.io/gitea/models" "code.gitea.io/gitea/models"

"github.com/stretchr/testify/assert"
) )


func TestDeleteUser(t *testing.T) { func TestDeleteUser(t *testing.T) {


session := loginUser(t, "user1") session := loginUser(t, "user1")


req := NewRequest(t, "GET", "/admin/users/8")
resp := session.MakeRequest(t, req)
assert.EqualValues(t, http.StatusOK, resp.HeaderCode)

doc := NewHTMLParser(t, resp.Body)
req = NewRequestWithValues(t, "POST", "/admin/users/8/delete", map[string]string{
"_csrf": doc.GetCSRF(),
csrf := GetCSRF(t, session, "/admin/users/8")
req := NewRequestWithValues(t, "POST", "/admin/users/8/delete", map[string]string{
"_csrf": csrf,
}) })
resp = session.MakeRequest(t, req)
assert.EqualValues(t, http.StatusOK, resp.HeaderCode)
session.MakeRequest(t, req, http.StatusOK)


models.AssertNotExistsBean(t, &models.User{ID: 8}) models.AssertNotExistsBean(t, &models.User{ID: 8})
models.CheckConsistencyFor(t, &models.User{}) models.CheckConsistencyFor(t, &models.User{})

+ 15
- 32
integrations/editor_test.go Прегледај датотеку



// Request editor page // Request editor page
req := NewRequest(t, "GET", "/user2/repo1/_new/master/") req := NewRequest(t, "GET", "/user2/repo1/_new/master/")
resp := session.MakeRequest(t, req)
assert.EqualValues(t, http.StatusOK, resp.HeaderCode)
resp := session.MakeRequest(t, req, http.StatusOK)


doc := NewHTMLParser(t, resp.Body) doc := NewHTMLParser(t, resp.Body)
lastCommit := doc.GetInputValueByName("last_commit") lastCommit := doc.GetInputValueByName("last_commit")
"content": "Content", "content": "Content",
"commit_choice": "direct", "commit_choice": "direct",
}) })
resp = session.MakeRequest(t, req)
assert.EqualValues(t, http.StatusFound, resp.HeaderCode)
resp = session.MakeRequest(t, req, http.StatusFound)
} }


func TestCreateFileOnProtectedBranch(t *testing.T) { func TestCreateFileOnProtectedBranch(t *testing.T) {


session := loginUser(t, "user2") session := loginUser(t, "user2")


// Open repository branch settings
req := NewRequest(t, "GET", "/user2/repo1/settings/branches")
resp := session.MakeRequest(t, req)
assert.EqualValues(t, http.StatusOK, resp.HeaderCode)

doc := NewHTMLParser(t, resp.Body)

csrf := GetCSRF(t, session, "/user2/repo1/settings/branches")
// Change master branch to protected // Change master branch to protected
req = NewRequestWithValues(t, "POST", "/user2/repo1/settings/branches?action=protected_branch", map[string]string{
"_csrf": doc.GetCSRF(),
req := NewRequestWithValues(t, "POST", "/user2/repo1/settings/branches?action=protected_branch", map[string]string{
"_csrf": csrf,
"branchName": "master", "branchName": "master",
"canPush": "true", "canPush": "true",
}) })
resp = session.MakeRequest(t, req)
assert.EqualValues(t, http.StatusOK, resp.HeaderCode)
resp := session.MakeRequest(t, req, http.StatusOK)
// Check if master branch has been locked successfully // Check if master branch has been locked successfully
flashCookie := session.GetCookie("macaron_flash") flashCookie := session.GetCookie("macaron_flash")
assert.NotNil(t, flashCookie) assert.NotNil(t, flashCookie)


// Request editor page // Request editor page
req = NewRequest(t, "GET", "/user2/repo1/_new/master/") req = NewRequest(t, "GET", "/user2/repo1/_new/master/")
resp = session.MakeRequest(t, req)
assert.EqualValues(t, http.StatusOK, resp.HeaderCode)
resp = session.MakeRequest(t, req, http.StatusOK)


doc = NewHTMLParser(t, resp.Body)
doc := NewHTMLParser(t, resp.Body)
lastCommit := doc.GetInputValueByName("last_commit") lastCommit := doc.GetInputValueByName("last_commit")
assert.NotEmpty(t, lastCommit) assert.NotEmpty(t, lastCommit)


"commit_choice": "direct", "commit_choice": "direct",
}) })


resp = session.MakeRequest(t, req)
assert.EqualValues(t, http.StatusOK, resp.HeaderCode)
resp = session.MakeRequest(t, req, http.StatusOK)
// Check body for error message // Check body for error message
assert.Contains(t, string(resp.Body), "Can not commit to protected branch 'master'.") assert.Contains(t, string(resp.Body), "Can not commit to protected branch 'master'.")
} }


// Get to the 'edit this file' page // Get to the 'edit this file' page
req := NewRequest(t, "GET", path.Join(user, repo, "_edit", branch, filePath)) req := NewRequest(t, "GET", path.Join(user, repo, "_edit", branch, filePath))
resp := session.MakeRequest(t, req)
assert.EqualValues(t, http.StatusOK, resp.HeaderCode)
resp := session.MakeRequest(t, req, http.StatusOK)


htmlDoc := NewHTMLParser(t, resp.Body) htmlDoc := NewHTMLParser(t, resp.Body)
lastCommit := htmlDoc.GetInputValueByName("last_commit") lastCommit := htmlDoc.GetInputValueByName("last_commit")
"commit_choice": "direct", "commit_choice": "direct",
}, },
) )
resp = session.MakeRequest(t, req)
assert.EqualValues(t, http.StatusFound, resp.HeaderCode)
resp = session.MakeRequest(t, req, http.StatusFound)


// Verify the change // Verify the change
req = NewRequest(t, "GET", path.Join(user, repo, "raw", branch, filePath)) req = NewRequest(t, "GET", path.Join(user, repo, "raw", branch, filePath))
resp = session.MakeRequest(t, req)
assert.EqualValues(t, http.StatusOK, resp.HeaderCode)
resp = session.MakeRequest(t, req, http.StatusOK)
assert.EqualValues(t, newContent, string(resp.Body)) assert.EqualValues(t, newContent, string(resp.Body))


return resp return resp


// Get to the 'edit this file' page // Get to the 'edit this file' page
req := NewRequest(t, "GET", path.Join(user, repo, "_edit", branch, filePath)) req := NewRequest(t, "GET", path.Join(user, repo, "_edit", branch, filePath))
resp := session.MakeRequest(t, req)
assert.EqualValues(t, http.StatusOK, resp.HeaderCode)
resp := session.MakeRequest(t, req, http.StatusOK)


htmlDoc := NewHTMLParser(t, resp.Body) htmlDoc := NewHTMLParser(t, resp.Body)
lastCommit := htmlDoc.GetInputValueByName("last_commit") lastCommit := htmlDoc.GetInputValueByName("last_commit")
"new_branch_name": targetBranch, "new_branch_name": targetBranch,
}, },
) )
resp = session.MakeRequest(t, req)
assert.EqualValues(t, http.StatusFound, resp.HeaderCode)
resp = session.MakeRequest(t, req, http.StatusFound)


// Verify the change // Verify the change
req = NewRequest(t, "GET", path.Join(user, repo, "raw", targetBranch, filePath)) req = NewRequest(t, "GET", path.Join(user, repo, "raw", targetBranch, filePath))
resp = session.MakeRequest(t, req)
assert.EqualValues(t, http.StatusOK, resp.HeaderCode)
resp = session.MakeRequest(t, req, http.StatusOK)
assert.EqualValues(t, newContent, string(resp.Body)) assert.EqualValues(t, newContent, string(resp.Body))


return resp return resp

+ 23
- 7
integrations/integration_test.go Прегледај датотеку

return nil return nil
} }


func (s *TestSession) MakeRequest(t testing.TB, req *http.Request) *TestResponse {
func (s *TestSession) MakeRequest(t testing.TB, req *http.Request, expectedStatus int) *TestResponse {
baseURL, err := url.Parse(setting.AppURL) baseURL, err := url.Parse(setting.AppURL)
assert.NoError(t, err) assert.NoError(t, err)
for _, c := range s.jar.Cookies(baseURL) { for _, c := range s.jar.Cookies(baseURL) {
req.AddCookie(c) req.AddCookie(c)
} }
resp := MakeRequest(req)
resp := MakeRequest(t, req, expectedStatus)


ch := http.Header{} ch := http.Header{}
ch.Add("Cookie", strings.Join(resp.Headers["Set-Cookie"], ";")) ch.Add("Cookie", strings.Join(resp.Headers["Set-Cookie"], ";"))


func loginUserWithPassword(t testing.TB, userName, password string) *TestSession { func loginUserWithPassword(t testing.TB, userName, password string) *TestSession {
req := NewRequest(t, "GET", "/user/login") req := NewRequest(t, "GET", "/user/login")
resp := MakeRequest(req)
assert.EqualValues(t, http.StatusOK, resp.HeaderCode)
resp := MakeRequest(t, req, http.StatusOK)


doc := NewHTMLParser(t, resp.Body) doc := NewHTMLParser(t, resp.Body)
req = NewRequestWithValues(t, "POST", "/user/login", map[string]string{ req = NewRequestWithValues(t, "POST", "/user/login", map[string]string{
"user_name": userName, "user_name": userName,
"password": password, "password": password,
}) })
resp = MakeRequest(req)
assert.EqualValues(t, http.StatusFound, resp.HeaderCode)
resp = MakeRequest(t, req, http.StatusFound)


ch := http.Header{} ch := http.Header{}
ch.Add("Cookie", strings.Join(resp.Headers["Set-Cookie"], ";")) ch.Add("Cookie", strings.Join(resp.Headers["Set-Cookie"], ";"))
return request return request
} }


func MakeRequest(req *http.Request) *TestResponse {
const NoExpectedStatus = -1

func MakeRequest(t testing.TB, req *http.Request, expectedStatus int) *TestResponse {
buffer := bytes.NewBuffer(nil) buffer := bytes.NewBuffer(nil)
respWriter := &TestResponseWriter{ respWriter := &TestResponseWriter{
Writer: buffer, Writer: buffer,
Headers: make(map[string][]string), Headers: make(map[string][]string),
} }
mac.ServeHTTP(respWriter, req) mac.ServeHTTP(respWriter, req)
if expectedStatus != NoExpectedStatus {
assert.EqualValues(t, expectedStatus, respWriter.HeaderCode)
}
return &TestResponse{ return &TestResponse{
HeaderCode: respWriter.HeaderCode, HeaderCode: respWriter.HeaderCode,
Body: buffer.Bytes(), Body: buffer.Bytes(),
decoder := json.NewDecoder(bytes.NewBuffer(resp.Body)) decoder := json.NewDecoder(bytes.NewBuffer(resp.Body))
assert.NoError(t, decoder.Decode(v)) assert.NoError(t, decoder.Decode(v))
} }

func GetCSRF(t testing.TB, session *TestSession, urlStr string) string {
req := NewRequest(t, "GET", urlStr)
resp := session.MakeRequest(t, req, http.StatusOK)
doc := NewHTMLParser(t, resp.Body)
return doc.GetCSRF()
}

func RedirectURL(t testing.TB, resp *TestResponse) string {
urlSlice := resp.Headers["Location"]
assert.NotEmpty(t, urlSlice, "No redirect URL founds")
return urlSlice[0]
}

+ 2
- 2
integrations/internal_test.go Прегледај датотеку

t.Log(reqURL) t.Log(reqURL)
req.Header.Add("Authorization", fmt.Sprintf("Bearer %s", setting.InternalToken)) req.Header.Add("Authorization", fmt.Sprintf("Bearer %s", setting.InternalToken))


resp := MakeRequest(req)
resp := MakeRequest(t, req, NoExpectedStatus)
if isErr { if isErr {
assert.EqualValues(t, 500, resp.HeaderCode)
assert.EqualValues(t, http.StatusInternalServerError, resp.HeaderCode)
} else { } else {
assert.EqualValues(t, http.StatusOK, resp.HeaderCode) assert.EqualValues(t, http.StatusOK, resp.HeaderCode)
var branch models.ProtectedBranch var branch models.ProtectedBranch

+ 8
- 16
integrations/issue_test.go Прегледај датотеку

prepareTestEnv(t) prepareTestEnv(t)


req := NewRequest(t, "GET", "/user2/repo1/issues") req := NewRequest(t, "GET", "/user2/repo1/issues")
resp := MakeRequest(req)
assert.EqualValues(t, http.StatusOK, resp.HeaderCode)
MakeRequest(t, req, http.StatusOK)
} }


func TestNoLoginViewIssuesSortByType(t *testing.T) { func TestNoLoginViewIssuesSortByType(t *testing.T) {


session := loginUser(t, user.Name) session := loginUser(t, user.Name)
req := NewRequest(t, "GET", repo.RelLink()+"/issues?type=created_by") req := NewRequest(t, "GET", repo.RelLink()+"/issues?type=created_by")
resp := session.MakeRequest(t, req)
assert.EqualValues(t, http.StatusOK, resp.HeaderCode)
resp := session.MakeRequest(t, req, http.StatusOK)


htmlDoc := NewHTMLParser(t, resp.Body) htmlDoc := NewHTMLParser(t, resp.Body)
issuesSelection := getIssuesSelection(htmlDoc) issuesSelection := getIssuesSelection(htmlDoc)
prepareTestEnv(t) prepareTestEnv(t)


req := NewRequest(t, "GET", "/user2/repo1/issues/1") req := NewRequest(t, "GET", "/user2/repo1/issues/1")
resp := MakeRequest(req)
assert.EqualValues(t, http.StatusOK, resp.HeaderCode)
MakeRequest(t, req, http.StatusOK)
} }


func testNewIssue(t *testing.T, session *TestSession, user, repo, title string) { func testNewIssue(t *testing.T, session *TestSession, user, repo, title string) {


req := NewRequest(t, "GET", path.Join(user, repo, "issues", "new")) req := NewRequest(t, "GET", path.Join(user, repo, "issues", "new"))
resp := session.MakeRequest(t, req)
assert.EqualValues(t, http.StatusOK, resp.HeaderCode)
resp := session.MakeRequest(t, req, http.StatusOK)


htmlDoc := NewHTMLParser(t, resp.Body) htmlDoc := NewHTMLParser(t, resp.Body)
link, exists := htmlDoc.doc.Find("form.ui.form").Attr("action") link, exists := htmlDoc.doc.Find("form.ui.form").Attr("action")
"_csrf": htmlDoc.GetCSRF(), "_csrf": htmlDoc.GetCSRF(),
"title": title, "title": title,
}) })
resp = session.MakeRequest(t, req)
assert.EqualValues(t, http.StatusFound, resp.HeaderCode)
redirectedURL := resp.Headers["Location"]
assert.NotEmpty(t, redirectedURL, "Redirected URL is not found")

req = NewRequest(t, "GET", redirectedURL[0])
resp = session.MakeRequest(t, req)
assert.EqualValues(t, http.StatusOK, resp.HeaderCode)
resp = session.MakeRequest(t, req, http.StatusFound)

req = NewRequest(t, "GET", RedirectURL(t, resp))
resp = session.MakeRequest(t, req, http.StatusOK)
} }


func TestNewIssue(t *testing.T) { func TestNewIssue(t *testing.T) {

+ 2
- 3
integrations/pull_compare_test.go Прегледај датотеку



session := loginUser(t, "user2") session := loginUser(t, "user2")
req := NewRequest(t, "GET", "/user2/repo1/pulls") req := NewRequest(t, "GET", "/user2/repo1/pulls")
resp := session.MakeRequest(t, req)
assert.EqualValues(t, http.StatusOK, resp.HeaderCode)
resp := session.MakeRequest(t, req, http.StatusOK)
htmlDoc := NewHTMLParser(t, resp.Body) htmlDoc := NewHTMLParser(t, resp.Body)
link, exists := htmlDoc.doc.Find(".navbar").Find(".ui.green.button").Attr("href") link, exists := htmlDoc.doc.Find(".navbar").Find(".ui.green.button").Attr("href")
assert.True(t, exists, "The template has changed") assert.True(t, exists, "The template has changed")


req = NewRequest(t, "GET", link) req = NewRequest(t, "GET", link)
resp = session.MakeRequest(t, req)
resp = session.MakeRequest(t, req, http.StatusOK)
assert.EqualValues(t, http.StatusOK, resp.HeaderCode) assert.EqualValues(t, http.StatusOK, resp.HeaderCode)
} }

+ 3
- 6
integrations/pull_create_test.go Прегледај датотеку



func testPullCreate(t *testing.T, session *TestSession, user, repo, branch string) *TestResponse { func testPullCreate(t *testing.T, session *TestSession, user, repo, branch string) *TestResponse {
req := NewRequest(t, "GET", path.Join(user, repo)) req := NewRequest(t, "GET", path.Join(user, repo))
resp := session.MakeRequest(t, req)
assert.EqualValues(t, http.StatusOK, resp.HeaderCode)
resp := session.MakeRequest(t, req, http.StatusOK)


// Click the little green button to create a pull // Click the little green button to create a pull
htmlDoc := NewHTMLParser(t, resp.Body) htmlDoc := NewHTMLParser(t, resp.Body)
} }


req = NewRequest(t, "GET", link) req = NewRequest(t, "GET", link)
resp = session.MakeRequest(t, req)
assert.EqualValues(t, http.StatusOK, resp.HeaderCode)
resp = session.MakeRequest(t, req, http.StatusOK)


// Submit the form for creating the pull // Submit the form for creating the pull
htmlDoc = NewHTMLParser(t, resp.Body) htmlDoc = NewHTMLParser(t, resp.Body)
"_csrf": htmlDoc.GetCSRF(), "_csrf": htmlDoc.GetCSRF(),
"title": "This is a pull title", "title": "This is a pull title",
}) })
resp = session.MakeRequest(t, req)
assert.EqualValues(t, http.StatusFound, resp.HeaderCode)
resp = session.MakeRequest(t, req, http.StatusFound)


//TODO check the redirected URL //TODO check the redirected URL



+ 9
- 18
integrations/pull_merge_test.go Прегледај датотеку



func testPullMerge(t *testing.T, session *TestSession, user, repo, pullnum string) *TestResponse { func testPullMerge(t *testing.T, session *TestSession, user, repo, pullnum string) *TestResponse {
req := NewRequest(t, "GET", path.Join(user, repo, "pulls", pullnum)) req := NewRequest(t, "GET", path.Join(user, repo, "pulls", pullnum))
resp := session.MakeRequest(t, req)
assert.EqualValues(t, http.StatusOK, resp.HeaderCode)
resp := session.MakeRequest(t, req, http.StatusOK)


// Click the little green button to craete a pull
// Click the little green button to create a pull
htmlDoc := NewHTMLParser(t, resp.Body) htmlDoc := NewHTMLParser(t, resp.Body)
link, exists := htmlDoc.doc.Find("form.ui.form>button.ui.green.button").Parent().Attr("action") link, exists := htmlDoc.doc.Find("form.ui.form>button.ui.green.button").Parent().Attr("action")
assert.True(t, exists, "The template has changed") assert.True(t, exists, "The template has changed")
req = NewRequestWithValues(t, "POST", link, map[string]string{ req = NewRequestWithValues(t, "POST", link, map[string]string{
"_csrf": htmlDoc.GetCSRF(), "_csrf": htmlDoc.GetCSRF(),
}) })
resp = session.MakeRequest(t, req)
assert.EqualValues(t, http.StatusFound, resp.HeaderCode)
resp = session.MakeRequest(t, req, http.StatusFound)


return resp return resp
} }


func testPullCleanUp(t *testing.T, session *TestSession, user, repo, pullnum string) *TestResponse { func testPullCleanUp(t *testing.T, session *TestSession, user, repo, pullnum string) *TestResponse {
req := NewRequest(t, "GET", path.Join(user, repo, "pulls", pullnum)) req := NewRequest(t, "GET", path.Join(user, repo, "pulls", pullnum))
resp := session.MakeRequest(t, req)
assert.EqualValues(t, http.StatusOK, resp.HeaderCode)
resp := session.MakeRequest(t, req, http.StatusOK)


// Click the little green button to craete a pull
// Click the little green button to create a pull
htmlDoc := NewHTMLParser(t, resp.Body) htmlDoc := NewHTMLParser(t, resp.Body)
link, exists := htmlDoc.doc.Find(".comments .merge .delete-button").Attr("data-url") link, exists := htmlDoc.doc.Find(".comments .merge .delete-button").Attr("data-url")
assert.True(t, exists, "The template has changed") assert.True(t, exists, "The template has changed")
req = NewRequestWithValues(t, "POST", link, map[string]string{ req = NewRequestWithValues(t, "POST", link, map[string]string{
"_csrf": htmlDoc.GetCSRF(), "_csrf": htmlDoc.GetCSRF(),
}) })
resp = session.MakeRequest(t, req)
assert.EqualValues(t, http.StatusOK, resp.HeaderCode)
resp = session.MakeRequest(t, req, http.StatusOK)


return resp return resp
} }
testEditFile(t, session, "user1", "repo1", "master", "README.md") testEditFile(t, session, "user1", "repo1", "master", "README.md")


resp := testPullCreate(t, session, "user1", "repo1", "master") resp := testPullCreate(t, session, "user1", "repo1", "master")
redirectedURL := resp.Headers["Location"]
assert.NotEmpty(t, redirectedURL, "Redirected URL is not found")


elem := strings.Split(redirectedURL[0], "/")
elem := strings.Split(RedirectURL(t, resp), "/")
assert.EqualValues(t, "pulls", elem[3]) assert.EqualValues(t, "pulls", elem[3])
testPullMerge(t, session, elem[1], elem[2], elem[4]) testPullMerge(t, session, elem[1], elem[2], elem[4])
} }
testEditFileToNewBranch(t, session, "user1", "repo1", "master", "feature/test", "README.md") testEditFileToNewBranch(t, session, "user1", "repo1", "master", "feature/test", "README.md")


resp := testPullCreate(t, session, "user1", "repo1", "feature/test") resp := testPullCreate(t, session, "user1", "repo1", "feature/test")
redirectedURL := resp.Headers["Location"]
assert.NotEmpty(t, redirectedURL, "Redirected URL is not found")


elem := strings.Split(redirectedURL[0], "/")
elem := strings.Split(RedirectURL(t, resp), "/")
assert.EqualValues(t, "pulls", elem[3]) assert.EqualValues(t, "pulls", elem[3])
testPullMerge(t, session, elem[1], elem[2], elem[4]) testPullMerge(t, session, elem[1], elem[2], elem[4])




// Check branch deletion result // Check branch deletion result
req := NewRequest(t, "GET", respJSON.Redirect) req := NewRequest(t, "GET", respJSON.Redirect)
resp = session.MakeRequest(t, req)
assert.EqualValues(t, http.StatusOK, resp.HeaderCode)
resp = session.MakeRequest(t, req, http.StatusOK)


htmlDoc := NewHTMLParser(t, resp.Body) htmlDoc := NewHTMLParser(t, resp.Body)
resultMsg := htmlDoc.doc.Find(".ui.message>p").Text() resultMsg := htmlDoc.doc.Find(".ui.message>p").Text()

+ 6
- 12
integrations/release_test.go Прегледај датотеку



func createNewRelease(t *testing.T, session *TestSession, repoURL, tag, title string, preRelease, draft bool) { func createNewRelease(t *testing.T, session *TestSession, repoURL, tag, title string, preRelease, draft bool) {
req := NewRequest(t, "GET", repoURL+"/releases/new") req := NewRequest(t, "GET", repoURL+"/releases/new")
resp := session.MakeRequest(t, req)
assert.EqualValues(t, http.StatusOK, resp.HeaderCode)
resp := session.MakeRequest(t, req, http.StatusOK)
htmlDoc := NewHTMLParser(t, resp.Body) htmlDoc := NewHTMLParser(t, resp.Body)


link, exists := htmlDoc.doc.Find("form").Attr("action") link, exists := htmlDoc.doc.Find("form").Attr("action")
} }
req = NewRequestWithValues(t, "POST", link, postData) req = NewRequestWithValues(t, "POST", link, postData)


resp = session.MakeRequest(t, req)
assert.EqualValues(t, http.StatusFound, resp.HeaderCode)
resp = session.MakeRequest(t, req, http.StatusFound)


redirectedURL := resp.Headers["Location"]
assert.NotEmpty(t, redirectedURL, "Redirected URL is not found")
RedirectURL(t, resp) // check that redirect URL exists
} }


func checkLatestReleaseAndCount(t *testing.T, session *TestSession, repoURL, version, label string, count int) { func checkLatestReleaseAndCount(t *testing.T, session *TestSession, repoURL, version, label string, count int) {
req := NewRequest(t, "GET", repoURL+"/releases") req := NewRequest(t, "GET", repoURL+"/releases")
resp := session.MakeRequest(t, req)
assert.EqualValues(t, http.StatusOK, resp.HeaderCode)
resp := session.MakeRequest(t, req, http.StatusOK)


htmlDoc := NewHTMLParser(t, resp.Body) htmlDoc := NewHTMLParser(t, resp.Body)
labelText := htmlDoc.doc.Find("#release-list > li .meta .label").First().Text() labelText := htmlDoc.doc.Find("#release-list > li .meta .label").First().Text()


session := loginUser(t, "user2") session := loginUser(t, "user2")
req := NewRequest(t, "GET", "/user2/repo1/releases") req := NewRequest(t, "GET", "/user2/repo1/releases")
resp := session.MakeRequest(t, req)
assert.EqualValues(t, http.StatusOK, resp.HeaderCode)
session.MakeRequest(t, req, http.StatusOK)
} }


func TestViewReleasesNoLogin(t *testing.T) { func TestViewReleasesNoLogin(t *testing.T) {
prepareTestEnv(t) prepareTestEnv(t)


req := NewRequest(t, "GET", "/user2/repo1/releases") req := NewRequest(t, "GET", "/user2/repo1/releases")
resp := MakeRequest(req)
assert.EqualValues(t, http.StatusOK, resp.HeaderCode)
MakeRequest(t, req, http.StatusOK)
} }


func TestCreateRelease(t *testing.T) { func TestCreateRelease(t *testing.T) {

+ 4
- 8
integrations/repo_commits_test.go Прегледај датотеку



// Request repository commits page // Request repository commits page
req := NewRequest(t, "GET", "/user2/repo1/commits/master") req := NewRequest(t, "GET", "/user2/repo1/commits/master")
resp := session.MakeRequest(t, req)
assert.EqualValues(t, http.StatusOK, resp.HeaderCode)
resp := session.MakeRequest(t, req, http.StatusOK)


doc := NewHTMLParser(t, resp.Body) doc := NewHTMLParser(t, resp.Body)
commitURL, exists := doc.doc.Find("#commits-table tbody tr td.sha a").Attr("href") commitURL, exists := doc.doc.Find("#commits-table tbody tr td.sha a").Attr("href")


// Request repository commits page // Request repository commits page
req := NewRequest(t, "GET", "/user2/repo1/commits/master") req := NewRequest(t, "GET", "/user2/repo1/commits/master")
resp := session.MakeRequest(t, req)
assert.EqualValues(t, http.StatusOK, resp.HeaderCode)
resp := session.MakeRequest(t, req, http.StatusOK)


doc := NewHTMLParser(t, resp.Body) doc := NewHTMLParser(t, resp.Body)
// Get first commit URL // Get first commit URL
}, },
) )


resp = session.MakeRequest(t, req)
assert.EqualValues(t, http.StatusCreated, resp.HeaderCode)
resp = session.MakeRequest(t, req, http.StatusCreated)


req = NewRequest(t, "GET", "/user2/repo1/commits/master") req = NewRequest(t, "GET", "/user2/repo1/commits/master")
resp = session.MakeRequest(t, req)
assert.EqualValues(t, http.StatusOK, resp.HeaderCode)
resp = session.MakeRequest(t, req, http.StatusOK)


doc = NewHTMLParser(t, resp.Body) doc = NewHTMLParser(t, resp.Body)
// Check if commit status is displayed in message column // Check if commit status is displayed in message column

+ 5
- 10
integrations/repo_fork_test.go Прегледај датотеку

func testRepoFork(t *testing.T, session *TestSession) *TestResponse { func testRepoFork(t *testing.T, session *TestSession) *TestResponse {
// Step0: check the existence of the to-fork repo // Step0: check the existence of the to-fork repo
req := NewRequest(t, "GET", "/user1/repo1") req := NewRequest(t, "GET", "/user1/repo1")
resp := session.MakeRequest(t, req)
assert.EqualValues(t, http.StatusNotFound, resp.HeaderCode)
resp := session.MakeRequest(t, req, http.StatusNotFound)


// Step1: go to the main page of repo // Step1: go to the main page of repo
req = NewRequest(t, "GET", "/user2/repo1") req = NewRequest(t, "GET", "/user2/repo1")
resp = session.MakeRequest(t, req)
assert.EqualValues(t, http.StatusOK, resp.HeaderCode)
resp = session.MakeRequest(t, req, http.StatusOK)


// Step2: click the fork button // Step2: click the fork button
htmlDoc := NewHTMLParser(t, resp.Body) htmlDoc := NewHTMLParser(t, resp.Body)
link, exists := htmlDoc.doc.Find("a.ui.button[href^=\"/repo/fork/\"]").Attr("href") link, exists := htmlDoc.doc.Find("a.ui.button[href^=\"/repo/fork/\"]").Attr("href")
assert.True(t, exists, "The template has changed") assert.True(t, exists, "The template has changed")
req = NewRequest(t, "GET", link) req = NewRequest(t, "GET", link)
resp = session.MakeRequest(t, req)
assert.EqualValues(t, http.StatusOK, resp.HeaderCode)
resp = session.MakeRequest(t, req, http.StatusOK)


// Step3: fill the form of the forking // Step3: fill the form of the forking
htmlDoc = NewHTMLParser(t, resp.Body) htmlDoc = NewHTMLParser(t, resp.Body)
"uid": "1", "uid": "1",
"repo_name": "repo1", "repo_name": "repo1",
}) })
resp = session.MakeRequest(t, req)
assert.EqualValues(t, http.StatusFound, resp.HeaderCode)
resp = session.MakeRequest(t, req, http.StatusFound)


// Step4: check the existence of the forked repo // Step4: check the existence of the forked repo
req = NewRequest(t, "GET", "/user1/repo1") req = NewRequest(t, "GET", "/user1/repo1")
resp = session.MakeRequest(t, req)
assert.EqualValues(t, http.StatusOK, resp.HeaderCode)
resp = session.MakeRequest(t, req, http.StatusOK)


return resp return resp
} }

+ 2
- 4
integrations/repo_migrate_test.go Прегледај датотеку



func testRepoMigrate(t testing.TB, session *TestSession, cloneAddr, repoName string) *TestResponse { func testRepoMigrate(t testing.TB, session *TestSession, cloneAddr, repoName string) *TestResponse {
req := NewRequest(t, "GET", "/repo/migrate") req := NewRequest(t, "GET", "/repo/migrate")
resp := session.MakeRequest(t, req)
assert.EqualValues(t, http.StatusOK, resp.HeaderCode)
resp := session.MakeRequest(t, req, http.StatusOK)
htmlDoc := NewHTMLParser(t, resp.Body) htmlDoc := NewHTMLParser(t, resp.Body)


link, exists := htmlDoc.doc.Find("form.ui.form").Attr("action") link, exists := htmlDoc.doc.Find("form.ui.form").Attr("action")
"repo_name": repoName, "repo_name": repoName,
}, },
) )
resp = session.MakeRequest(t, req)
assert.EqualValues(t, http.StatusFound, resp.HeaderCode)
resp = session.MakeRequest(t, req, http.StatusFound)


return resp return resp
} }

+ 5
- 12
integrations/repo_test.go Прегледај датотеку

import ( import (
"net/http" "net/http"
"testing" "testing"

"github.com/stretchr/testify/assert"
) )


func TestViewRepo(t *testing.T) { func TestViewRepo(t *testing.T) {
prepareTestEnv(t) prepareTestEnv(t)


req := NewRequest(t, "GET", "/user2/repo1") req := NewRequest(t, "GET", "/user2/repo1")
resp := MakeRequest(req)
assert.EqualValues(t, http.StatusOK, resp.HeaderCode)
MakeRequest(t, req, http.StatusOK)


req = NewRequest(t, "GET", "/user3/repo3") req = NewRequest(t, "GET", "/user3/repo3")
resp = MakeRequest(req)
assert.EqualValues(t, http.StatusNotFound, resp.HeaderCode)
MakeRequest(t, req, http.StatusNotFound)


session := loginUser(t, "user1") session := loginUser(t, "user1")
resp = session.MakeRequest(t, req)
assert.EqualValues(t, http.StatusNotFound, resp.HeaderCode)
session.MakeRequest(t, req, http.StatusNotFound)
} }


func TestViewRepo2(t *testing.T) { func TestViewRepo2(t *testing.T) {


req := NewRequest(t, "GET", "/user3/repo3") req := NewRequest(t, "GET", "/user3/repo3")
session := loginUser(t, "user2") session := loginUser(t, "user2")
resp := session.MakeRequest(t, req)
assert.EqualValues(t, http.StatusOK, resp.HeaderCode)
session.MakeRequest(t, req, http.StatusOK)
} }


func TestViewRepo3(t *testing.T) { func TestViewRepo3(t *testing.T) {


req := NewRequest(t, "GET", "/user3/repo3") req := NewRequest(t, "GET", "/user3/repo3")
session := loginUser(t, "user3") session := loginUser(t, "user3")
resp := session.MakeRequest(t, req)
assert.EqualValues(t, http.StatusOK, resp.HeaderCode)
session.MakeRequest(t, req, http.StatusOK)
} }

+ 2
- 6
integrations/signup_test.go Прегледај датотеку

"testing" "testing"


"code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/setting"

"github.com/stretchr/testify/assert"
) )


func TestSignup(t *testing.T) { func TestSignup(t *testing.T) {
"password": "examplePassword", "password": "examplePassword",
"retype": "examplePassword", "retype": "examplePassword",
}) })
resp := MakeRequest(req)
assert.EqualValues(t, http.StatusFound, resp.HeaderCode)
MakeRequest(t, req, http.StatusFound)


// should be able to view new user's page // should be able to view new user's page
req = NewRequest(t, "GET", "/exampleUser") req = NewRequest(t, "GET", "/exampleUser")
resp = MakeRequest(req)
assert.EqualValues(t, http.StatusOK, resp.HeaderCode)
MakeRequest(t, req, http.StatusOK)
} }

+ 14
- 34
integrations/user_test.go Прегледај датотеку

prepareTestEnv(t) prepareTestEnv(t)


req := NewRequest(t, "GET", "/user2") req := NewRequest(t, "GET", "/user2")
resp := MakeRequest(req)
assert.EqualValues(t, http.StatusOK, resp.HeaderCode)
MakeRequest(t, req, http.StatusOK)
} }


func TestRenameUsername(t *testing.T) { func TestRenameUsername(t *testing.T) {
prepareTestEnv(t) prepareTestEnv(t)


session := loginUser(t, "user2") session := loginUser(t, "user2")

req := NewRequest(t, "GET", "/user/settings")
resp := session.MakeRequest(t, req)
assert.EqualValues(t, http.StatusOK, resp.HeaderCode)

htmlDoc := NewHTMLParser(t, resp.Body)
req = NewRequestWithValues(t, "POST", "/user/settings", map[string]string{
"_csrf": htmlDoc.GetCSRF(),
req := NewRequestWithValues(t, "POST", "/user/settings", map[string]string{
"_csrf": GetCSRF(t, session, "/user/settings"),
"name": "newUsername", "name": "newUsername",
"email": "user2@example.com", "email": "user2@example.com",
}) })
resp = session.MakeRequest(t, req)
assert.EqualValues(t, http.StatusFound, resp.HeaderCode)
session.MakeRequest(t, req, http.StatusFound)


models.AssertExistsAndLoadBean(t, &models.User{Name: "newUsername"}) models.AssertExistsAndLoadBean(t, &models.User{Name: "newUsername"})
models.AssertNotExistsBean(t, &models.User{Name: "user2"}) models.AssertNotExistsBean(t, &models.User{Name: "user2"})
session := loginUser(t, "user2") session := loginUser(t, "user2")
for _, invalidUsername := range invalidUsernames { for _, invalidUsername := range invalidUsernames {
t.Logf("Testing username %s", invalidUsername) t.Logf("Testing username %s", invalidUsername)
req := NewRequest(t, "GET", "/user/settings")
resp := session.MakeRequest(t, req)
assert.EqualValues(t, http.StatusOK, resp.HeaderCode)


htmlDoc := NewHTMLParser(t, resp.Body)
req = NewRequestWithValues(t, "POST", "/user/settings", map[string]string{
"_csrf": htmlDoc.GetCSRF(),
req := NewRequestWithValues(t, "POST", "/user/settings", map[string]string{
"_csrf": GetCSRF(t, session, "/user/settings"),
"name": invalidUsername, "name": invalidUsername,
"email": "user2@example.com", "email": "user2@example.com",
}) })
resp = session.MakeRequest(t, req)
assert.EqualValues(t, http.StatusOK, resp.HeaderCode)
htmlDoc = NewHTMLParser(t, resp.Body)
resp := session.MakeRequest(t, req, http.StatusOK)
htmlDoc := NewHTMLParser(t, resp.Body)
assert.Contains(t, assert.Contains(t,
htmlDoc.doc.Find(".ui.negative.message").Text(), htmlDoc.doc.Find(".ui.negative.message").Text(),
i18n.Tr("en", "form.alpha_dash_dot_error"), i18n.Tr("en", "form.alpha_dash_dot_error"),
session := loginUser(t, "user2") session := loginUser(t, "user2")
for _, reservedUsername := range reservedUsernames { for _, reservedUsername := range reservedUsernames {
t.Logf("Testing username %s", reservedUsername) t.Logf("Testing username %s", reservedUsername)
req := NewRequest(t, "GET", "/user/settings")
resp := session.MakeRequest(t, req)
assert.EqualValues(t, http.StatusOK, resp.HeaderCode)

htmlDoc := NewHTMLParser(t, resp.Body)
req = NewRequestWithValues(t, "POST", "/user/settings", map[string]string{
"_csrf": htmlDoc.GetCSRF(),
req := NewRequestWithValues(t, "POST", "/user/settings", map[string]string{
"_csrf": GetCSRF(t, session, "/user/settings"),
"name": reservedUsername, "name": reservedUsername,
"email": "user2@example.com", "email": "user2@example.com",
}) })
resp = session.MakeRequest(t, req)
assert.EqualValues(t, http.StatusFound, resp.HeaderCode)
resp := session.MakeRequest(t, req, http.StatusFound)


req = NewRequest(t, "GET", "/user/settings")
resp = session.MakeRequest(t, req)
assert.EqualValues(t, http.StatusOK, resp.HeaderCode)
htmlDoc = NewHTMLParser(t, resp.Body)
req = NewRequest(t, "GET", RedirectURL(t, resp))
resp = session.MakeRequest(t, req, http.StatusOK)
htmlDoc := NewHTMLParser(t, resp.Body)
assert.Contains(t, assert.Contains(t,
htmlDoc.doc.Find(".ui.negative.message").Text(), htmlDoc.doc.Find(".ui.negative.message").Text(),
i18n.Tr("en", "user.newName_reserved"), i18n.Tr("en", "user.newName_reserved"),

+ 1
- 2
integrations/version_test.go Прегледај датотеку



setting.AppVer = "1.1.0+dev" setting.AppVer = "1.1.0+dev"
req := NewRequest(t, "GET", "/api/v1/version") req := NewRequest(t, "GET", "/api/v1/version")
resp := MakeRequest(req)
assert.EqualValues(t, http.StatusOK, resp.HeaderCode)
resp := MakeRequest(t, req, http.StatusOK)


var version gitea.ServerVersion var version gitea.ServerVersion
DecodeJSON(t, resp, &version) DecodeJSON(t, resp, &version)

Loading…
Откажи
Сачувај