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