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  }