mirror of https://github.com/go-gitea/gitea.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
137 lines
4.1 KiB
137 lines
4.1 KiB
// Copyright 2017 The Gitea Authors. All rights reserved. |
|
// SPDX-License-Identifier: MIT |
|
|
|
package integration |
|
|
|
import ( |
|
"fmt" |
|
"net/http" |
|
"strconv" |
|
"testing" |
|
|
|
repo_model "code.gitea.io/gitea/models/repo" |
|
"code.gitea.io/gitea/models/unittest" |
|
user_model "code.gitea.io/gitea/models/user" |
|
"code.gitea.io/gitea/modules/gitrepo" |
|
"code.gitea.io/gitea/tests" |
|
|
|
"github.com/stretchr/testify/assert" |
|
) |
|
|
|
func TestChangeDefaultBranch(t *testing.T) { |
|
defer tests.PrepareTestEnv(t)() |
|
repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1}) |
|
owner := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: repo.OwnerID}) |
|
|
|
session := loginUser(t, owner.Name) |
|
branchesURL := fmt.Sprintf("/%s/%s/settings/branches", owner.Name, repo.Name) |
|
|
|
csrf := GetUserCSRFToken(t, session) |
|
req := NewRequestWithValues(t, "POST", branchesURL, map[string]string{ |
|
"_csrf": csrf, |
|
"action": "default_branch", |
|
"branch": "DefaultBranch", |
|
}) |
|
session.MakeRequest(t, req, http.StatusSeeOther) |
|
|
|
csrf = GetUserCSRFToken(t, session) |
|
req = NewRequestWithValues(t, "POST", branchesURL, map[string]string{ |
|
"_csrf": csrf, |
|
"action": "default_branch", |
|
"branch": "does_not_exist", |
|
}) |
|
session.MakeRequest(t, req, http.StatusNotFound) |
|
} |
|
|
|
func checkDivergence(t *testing.T, session *TestSession, branchesURL, expectedDefaultBranch string, expectedBranchToDivergence map[string]*gitrepo.DivergeObject) { |
|
req := NewRequest(t, "GET", branchesURL) |
|
resp := session.MakeRequest(t, req, http.StatusOK) |
|
|
|
htmlDoc := NewHTMLParser(t, resp.Body) |
|
|
|
branchNodes := htmlDoc.doc.Find(".branch-name").Nodes |
|
branchNames := []string{} |
|
for _, node := range branchNodes { |
|
branchNames = append(branchNames, node.FirstChild.Data) |
|
} |
|
|
|
expectBranchCount := len(expectedBranchToDivergence) |
|
|
|
assert.Len(t, branchNames, expectBranchCount+1) |
|
assert.Equal(t, expectedDefaultBranch, branchNames[0]) |
|
|
|
allCountBehindNodes := htmlDoc.doc.Find(".count-behind").Nodes |
|
allCountAheadNodes := htmlDoc.doc.Find(".count-ahead").Nodes |
|
|
|
assert.Len(t, allCountAheadNodes, expectBranchCount) |
|
assert.Len(t, allCountBehindNodes, expectBranchCount) |
|
|
|
for i := range expectBranchCount { |
|
branchName := branchNames[i+1] |
|
assert.Contains(t, expectedBranchToDivergence, branchName) |
|
|
|
expectedCountAhead := expectedBranchToDivergence[branchName].Ahead |
|
expectedCountBehind := expectedBranchToDivergence[branchName].Behind |
|
countAhead, err := strconv.Atoi(allCountAheadNodes[i].FirstChild.Data) |
|
assert.NoError(t, err) |
|
countBehind, err := strconv.Atoi(allCountBehindNodes[i].FirstChild.Data) |
|
assert.NoError(t, err) |
|
|
|
assert.Equal(t, expectedCountAhead, countAhead) |
|
assert.Equal(t, expectedCountBehind, countBehind) |
|
} |
|
} |
|
|
|
func TestChangeDefaultBranchDivergence(t *testing.T) { |
|
defer tests.PrepareTestEnv(t)() |
|
repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 16}) |
|
owner := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: repo.OwnerID}) |
|
|
|
session := loginUser(t, owner.Name) |
|
branchesURL := fmt.Sprintf("/%s/%s/branches", owner.Name, repo.Name) |
|
settingsBranchesURL := fmt.Sprintf("/%s/%s/settings/branches", owner.Name, repo.Name) |
|
|
|
// check branch divergence before switching default branch |
|
expectedBranchToDivergenceBefore := map[string]*gitrepo.DivergeObject{ |
|
"not-signed": { |
|
Ahead: 0, |
|
Behind: 0, |
|
}, |
|
"good-sign-not-yet-validated": { |
|
Ahead: 0, |
|
Behind: 1, |
|
}, |
|
"good-sign": { |
|
Ahead: 1, |
|
Behind: 3, |
|
}, |
|
} |
|
checkDivergence(t, session, branchesURL, "master", expectedBranchToDivergenceBefore) |
|
|
|
// switch default branch |
|
newDefaultBranch := "good-sign-not-yet-validated" |
|
csrf := GetUserCSRFToken(t, session) |
|
req := NewRequestWithValues(t, "POST", settingsBranchesURL, map[string]string{ |
|
"_csrf": csrf, |
|
"action": "default_branch", |
|
"branch": newDefaultBranch, |
|
}) |
|
session.MakeRequest(t, req, http.StatusSeeOther) |
|
|
|
// check branch divergence after switching default branch |
|
expectedBranchToDivergenceAfter := map[string]*gitrepo.DivergeObject{ |
|
"master": { |
|
Ahead: 1, |
|
Behind: 0, |
|
}, |
|
"not-signed": { |
|
Ahead: 1, |
|
Behind: 0, |
|
}, |
|
"good-sign": { |
|
Ahead: 1, |
|
Behind: 2, |
|
}, |
|
} |
|
checkDivergence(t, session, branchesURL, newDefaultBranch, expectedBranchToDivergenceAfter) |
|
}
|
|
|