summaryrefslogtreecommitdiffstats
path: root/tests/integration/rename_branch_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/rename_branch_test.go
parentInitial commit. (diff)
downloadforgejo-upstream.tar.xz
forgejo-upstream.zip
Adding upstream version 9.0.0.upstream/9.0.0upstreamdebian
Signed-off-by: Daniel Baumann <daniel@debian.org>
Diffstat (limited to 'tests/integration/rename_branch_test.go')
-rw-r--r--tests/integration/rename_branch_test.go176
1 files changed, 176 insertions, 0 deletions
diff --git a/tests/integration/rename_branch_test.go b/tests/integration/rename_branch_test.go
new file mode 100644
index 0000000..a96cbf5
--- /dev/null
+++ b/tests/integration/rename_branch_test.go
@@ -0,0 +1,176 @@
+// Copyright 2021 The Gitea Authors. All rights reserved.
+// SPDX-License-Identifier: MIT
+
+package integration
+
+import (
+ "net/http"
+ "net/url"
+ "testing"
+
+ git_model "code.gitea.io/gitea/models/git"
+ repo_model "code.gitea.io/gitea/models/repo"
+ "code.gitea.io/gitea/models/unittest"
+ gitea_context "code.gitea.io/gitea/services/context"
+ "code.gitea.io/gitea/tests"
+
+ "github.com/stretchr/testify/assert"
+)
+
+func TestRenameBranch(t *testing.T) {
+ onGiteaRun(t, testRenameBranch)
+}
+
+func testRenameBranch(t *testing.T, u *url.URL) {
+ defer tests.PrepareTestEnv(t)()
+
+ repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1})
+ unittest.AssertExistsAndLoadBean(t, &git_model.Branch{RepoID: repo.ID, Name: "master"})
+
+ // get branch setting page
+ session := loginUser(t, "user2")
+ t.Run("Normal", func(t *testing.T) {
+ defer tests.PrintCurrentTest(t)()
+
+ req := NewRequestWithValues(t, "POST", "/user2/repo1/settings/rename_branch", map[string]string{
+ "_csrf": GetCSRF(t, session, "/user2/repo1/settings/branches"),
+ "from": "master",
+ "to": "main",
+ })
+ session.MakeRequest(t, req, http.StatusSeeOther)
+
+ // check new branch link
+ req = NewRequest(t, "GET", "/user2/repo1/src/branch/main/README.md")
+ session.MakeRequest(t, req, http.StatusOK)
+
+ // check old branch link
+ req = NewRequest(t, "GET", "/user2/repo1/src/branch/master/README.md")
+ resp := session.MakeRequest(t, req, http.StatusSeeOther)
+ location := resp.Header().Get("Location")
+ assert.Equal(t, "/user2/repo1/src/branch/main/README.md", location)
+
+ // check db
+ repo1 := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1})
+ assert.Equal(t, "main", repo1.DefaultBranch)
+ })
+
+ t.Run("Database synchronization", func(t *testing.T) {
+ defer tests.PrintCurrentTest(t)()
+
+ req := NewRequestWithValues(t, "POST", "/user2/repo1/settings/rename_branch", map[string]string{
+ "_csrf": GetCSRF(t, session, "/user2/repo1/settings/branches"),
+ "from": "master",
+ "to": "main",
+ })
+ session.MakeRequest(t, req, http.StatusSeeOther)
+
+ // check new branch link
+ req = NewRequestWithValues(t, "GET", "/user2/repo1/src/branch/main/README.md", nil)
+ session.MakeRequest(t, req, http.StatusOK)
+
+ // check old branch link
+ req = NewRequestWithValues(t, "GET", "/user2/repo1/src/branch/master/README.md", nil)
+ resp := session.MakeRequest(t, req, http.StatusSeeOther)
+ location := resp.Header().Get("Location")
+ assert.Equal(t, "/user2/repo1/src/branch/main/README.md", location)
+
+ // check db
+ repo1 := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1})
+ assert.Equal(t, "main", repo1.DefaultBranch)
+
+ // create branch1
+ csrf := GetCSRF(t, session, "/user2/repo1/src/branch/main")
+
+ req = NewRequestWithValues(t, "POST", "/user2/repo1/branches/_new/branch/main", map[string]string{
+ "_csrf": csrf,
+ "new_branch_name": "branch1",
+ })
+ session.MakeRequest(t, req, http.StatusSeeOther)
+
+ branch1 := unittest.AssertExistsAndLoadBean(t, &git_model.Branch{RepoID: repo1.ID, Name: "branch1"})
+ assert.Equal(t, "branch1", branch1.Name)
+
+ // create branch2
+ req = NewRequestWithValues(t, "POST", "/user2/repo1/branches/_new/branch/main", map[string]string{
+ "_csrf": csrf,
+ "new_branch_name": "branch2",
+ })
+ session.MakeRequest(t, req, http.StatusSeeOther)
+
+ branch2 := unittest.AssertExistsAndLoadBean(t, &git_model.Branch{RepoID: repo1.ID, Name: "branch2"})
+ assert.Equal(t, "branch2", branch2.Name)
+
+ // rename branch2 to branch1
+ req = NewRequestWithValues(t, "POST", "/user2/repo1/settings/rename_branch", map[string]string{
+ "_csrf": GetCSRF(t, session, "/user2/repo1/settings/branches"),
+ "from": "branch2",
+ "to": "branch1",
+ })
+ session.MakeRequest(t, req, http.StatusSeeOther)
+ flashCookie := session.GetCookie(gitea_context.CookieNameFlash)
+ assert.NotNil(t, flashCookie)
+ assert.Contains(t, flashCookie.Value, "error")
+
+ branch2 = unittest.AssertExistsAndLoadBean(t, &git_model.Branch{RepoID: repo1.ID, Name: "branch2"})
+ assert.Equal(t, "branch2", branch2.Name)
+ branch1 = unittest.AssertExistsAndLoadBean(t, &git_model.Branch{RepoID: repo1.ID, Name: "branch1"})
+ assert.Equal(t, "branch1", branch1.Name)
+
+ // delete branch1
+ req = NewRequestWithValues(t, "POST", "/user2/repo1/branches/delete", map[string]string{
+ "_csrf": GetCSRF(t, session, "/user2/repo1/settings/branches"),
+ "name": "branch1",
+ })
+ session.MakeRequest(t, req, http.StatusOK)
+ branch2 = unittest.AssertExistsAndLoadBean(t, &git_model.Branch{RepoID: repo1.ID, Name: "branch2"})
+ assert.Equal(t, "branch2", branch2.Name)
+ branch1 = unittest.AssertExistsAndLoadBean(t, &git_model.Branch{RepoID: repo1.ID, Name: "branch1"})
+ assert.True(t, branch1.IsDeleted) // virtual deletion
+
+ // rename branch2 to branch1 again
+ req = NewRequestWithValues(t, "POST", "/user2/repo1/settings/rename_branch", map[string]string{
+ "_csrf": GetCSRF(t, session, "/user2/repo1/settings/branches"),
+ "from": "branch2",
+ "to": "branch1",
+ })
+ session.MakeRequest(t, req, http.StatusSeeOther)
+
+ flashCookie = session.GetCookie(gitea_context.CookieNameFlash)
+ assert.NotNil(t, flashCookie)
+ assert.Contains(t, flashCookie.Value, "success")
+
+ unittest.AssertNotExistsBean(t, &git_model.Branch{RepoID: repo1.ID, Name: "branch2"})
+ branch1 = unittest.AssertExistsAndLoadBean(t, &git_model.Branch{RepoID: repo1.ID, Name: "branch1"})
+ assert.Equal(t, "branch1", branch1.Name)
+ })
+
+ t.Run("Protected branch", func(t *testing.T) {
+ defer tests.PrintCurrentTest(t)()
+
+ // Add protected branch
+ req := NewRequestWithValues(t, "POST", "/user2/repo1/settings/branches/edit", map[string]string{
+ "_csrf": GetCSRF(t, session, "/user2/repo1/settings/branches/edit"),
+ "rule_name": "*",
+ "enable_push": "true",
+ })
+ session.MakeRequest(t, req, http.StatusSeeOther)
+
+ // Verify it was added.
+ unittest.AssertExistsIf(t, true, &git_model.ProtectedBranch{RuleName: "*", RepoID: repo.ID})
+
+ req = NewRequestWithValues(t, "POST", "/user2/repo1/settings/rename_branch", map[string]string{
+ "_csrf": GetCSRF(t, session, "/user2/repo1/settings/branches"),
+ "from": "main",
+ "to": "main2",
+ })
+ session.MakeRequest(t, req, http.StatusSeeOther)
+
+ flashCookie := session.GetCookie(gitea_context.CookieNameFlash)
+ assert.NotNil(t, flashCookie)
+ assert.EqualValues(t, "error%3DCannot%2Brename%2Bbranch%2Bmain2%2Bbecause%2Bit%2Bis%2Ba%2Bprotected%2Bbranch.", flashCookie.Value)
+
+ // Verify it didn't change.
+ repo1 := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1})
+ assert.Equal(t, "main", repo1.DefaultBranch)
+ })
+}