code.gitea.io/gitea@v1.22.3/models/git/branch_test.go (about) 1 // Copyright 2017 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package git_test 5 6 import ( 7 "context" 8 "testing" 9 10 "code.gitea.io/gitea/models/db" 11 git_model "code.gitea.io/gitea/models/git" 12 issues_model "code.gitea.io/gitea/models/issues" 13 repo_model "code.gitea.io/gitea/models/repo" 14 "code.gitea.io/gitea/models/unittest" 15 "code.gitea.io/gitea/modules/git" 16 "code.gitea.io/gitea/modules/optional" 17 18 "github.com/stretchr/testify/assert" 19 ) 20 21 func TestAddDeletedBranch(t *testing.T) { 22 assert.NoError(t, unittest.PrepareTestDatabase()) 23 repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1}) 24 assert.EqualValues(t, git.Sha1ObjectFormat.Name(), repo.ObjectFormatName) 25 firstBranch := unittest.AssertExistsAndLoadBean(t, &git_model.Branch{ID: 1}) 26 27 assert.True(t, firstBranch.IsDeleted) 28 assert.NoError(t, git_model.AddDeletedBranch(db.DefaultContext, repo.ID, firstBranch.Name, firstBranch.DeletedByID)) 29 assert.NoError(t, git_model.AddDeletedBranch(db.DefaultContext, repo.ID, "branch2", int64(1))) 30 31 secondBranch := unittest.AssertExistsAndLoadBean(t, &git_model.Branch{RepoID: repo.ID, Name: "branch2"}) 32 assert.True(t, secondBranch.IsDeleted) 33 34 commit := &git.Commit{ 35 ID: git.MustIDFromString(secondBranch.CommitID), 36 CommitMessage: secondBranch.CommitMessage, 37 Committer: &git.Signature{ 38 When: secondBranch.CommitTime.AsLocalTime(), 39 }, 40 } 41 42 _, err := git_model.UpdateBranch(db.DefaultContext, repo.ID, secondBranch.PusherID, secondBranch.Name, commit) 43 assert.NoError(t, err) 44 } 45 46 func TestGetDeletedBranches(t *testing.T) { 47 assert.NoError(t, unittest.PrepareTestDatabase()) 48 repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1}) 49 50 branches, err := db.Find[git_model.Branch](db.DefaultContext, git_model.FindBranchOptions{ 51 ListOptions: db.ListOptionsAll, 52 RepoID: repo.ID, 53 IsDeletedBranch: optional.Some(true), 54 }) 55 assert.NoError(t, err) 56 assert.Len(t, branches, 2) 57 } 58 59 func TestGetDeletedBranch(t *testing.T) { 60 assert.NoError(t, unittest.PrepareTestDatabase()) 61 firstBranch := unittest.AssertExistsAndLoadBean(t, &git_model.Branch{ID: 1}) 62 63 assert.NotNil(t, getDeletedBranch(t, firstBranch)) 64 } 65 66 func TestDeletedBranchLoadUser(t *testing.T) { 67 assert.NoError(t, unittest.PrepareTestDatabase()) 68 69 firstBranch := unittest.AssertExistsAndLoadBean(t, &git_model.Branch{ID: 1}) 70 secondBranch := unittest.AssertExistsAndLoadBean(t, &git_model.Branch{ID: 2}) 71 72 branch := getDeletedBranch(t, firstBranch) 73 assert.Nil(t, branch.DeletedBy) 74 branch.LoadDeletedBy(db.DefaultContext) 75 assert.NotNil(t, branch.DeletedBy) 76 assert.Equal(t, "user1", branch.DeletedBy.Name) 77 78 branch = getDeletedBranch(t, secondBranch) 79 assert.Nil(t, branch.DeletedBy) 80 branch.LoadDeletedBy(db.DefaultContext) 81 assert.NotNil(t, branch.DeletedBy) 82 assert.Equal(t, "Ghost", branch.DeletedBy.Name) 83 } 84 85 func TestRemoveDeletedBranch(t *testing.T) { 86 assert.NoError(t, unittest.PrepareTestDatabase()) 87 repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1}) 88 89 firstBranch := unittest.AssertExistsAndLoadBean(t, &git_model.Branch{ID: 1}) 90 91 err := git_model.RemoveDeletedBranchByID(db.DefaultContext, repo.ID, 1) 92 assert.NoError(t, err) 93 unittest.AssertNotExistsBean(t, firstBranch) 94 unittest.AssertExistsAndLoadBean(t, &git_model.Branch{ID: 2}) 95 } 96 97 func getDeletedBranch(t *testing.T, branch *git_model.Branch) *git_model.Branch { 98 repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1}) 99 100 deletedBranch, err := git_model.GetDeletedBranchByID(db.DefaultContext, repo.ID, branch.ID) 101 assert.NoError(t, err) 102 assert.Equal(t, branch.ID, deletedBranch.ID) 103 assert.Equal(t, branch.Name, deletedBranch.Name) 104 assert.Equal(t, branch.CommitID, deletedBranch.CommitID) 105 assert.Equal(t, branch.DeletedByID, deletedBranch.DeletedByID) 106 107 return deletedBranch 108 } 109 110 func TestFindRenamedBranch(t *testing.T) { 111 assert.NoError(t, unittest.PrepareTestDatabase()) 112 branch, exist, err := git_model.FindRenamedBranch(db.DefaultContext, 1, "dev") 113 assert.NoError(t, err) 114 assert.True(t, exist) 115 assert.Equal(t, "master", branch.To) 116 117 _, exist, err = git_model.FindRenamedBranch(db.DefaultContext, 1, "unknow") 118 assert.NoError(t, err) 119 assert.False(t, exist) 120 } 121 122 func TestRenameBranch(t *testing.T) { 123 assert.NoError(t, unittest.PrepareTestDatabase()) 124 repo1 := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1}) 125 _isDefault := false 126 127 ctx, committer, err := db.TxContext(db.DefaultContext) 128 defer committer.Close() 129 assert.NoError(t, err) 130 assert.NoError(t, git_model.UpdateProtectBranch(ctx, repo1, &git_model.ProtectedBranch{ 131 RepoID: repo1.ID, 132 RuleName: "master", 133 }, git_model.WhitelistOptions{})) 134 assert.NoError(t, committer.Commit()) 135 136 assert.NoError(t, git_model.RenameBranch(db.DefaultContext, repo1, "master", "main", func(ctx context.Context, isDefault bool) error { 137 _isDefault = isDefault 138 return nil 139 })) 140 141 assert.True(t, _isDefault) 142 repo1 = unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1}) 143 assert.Equal(t, "main", repo1.DefaultBranch) 144 145 pull := unittest.AssertExistsAndLoadBean(t, &issues_model.PullRequest{ID: 1}) // merged 146 assert.Equal(t, "master", pull.BaseBranch) 147 148 pull = unittest.AssertExistsAndLoadBean(t, &issues_model.PullRequest{ID: 2}) // open 149 assert.Equal(t, "main", pull.BaseBranch) 150 151 renamedBranch := unittest.AssertExistsAndLoadBean(t, &git_model.RenamedBranch{ID: 2}) 152 assert.Equal(t, "master", renamedBranch.From) 153 assert.Equal(t, "main", renamedBranch.To) 154 assert.Equal(t, int64(1), renamedBranch.RepoID) 155 156 unittest.AssertExistsAndLoadBean(t, &git_model.ProtectedBranch{ 157 RepoID: repo1.ID, 158 RuleName: "main", 159 }) 160 } 161 162 func TestOnlyGetDeletedBranchOnCorrectRepo(t *testing.T) { 163 assert.NoError(t, unittest.PrepareTestDatabase()) 164 165 // Get deletedBranch with ID of 1 on repo with ID 2. 166 // This should return a nil branch as this deleted branch 167 // is actually on repo with ID 1. 168 repo2 := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 2}) 169 170 deletedBranch, err := git_model.GetDeletedBranchByID(db.DefaultContext, repo2.ID, 1) 171 172 // Expect error, and the returned branch is nil. 173 assert.Error(t, err) 174 assert.Nil(t, deletedBranch) 175 176 // Now get the deletedBranch with ID of 1 on repo with ID 1. 177 // This should return the deletedBranch. 178 repo1 := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1}) 179 180 deletedBranch, err = git_model.GetDeletedBranchByID(db.DefaultContext, repo1.ID, 1) 181 182 // Expect no error, and the returned branch to be not nil. 183 assert.NoError(t, err) 184 assert.NotNil(t, deletedBranch) 185 }