code.gitea.io/gitea@v1.21.7/models/git/protected_banch_list_test.go (about)

     1  // Copyright 2023 The Gitea Authors. All rights reserved.
     2  // SPDX-License-Identifier: MIT
     3  
     4  package git
     5  
     6  import (
     7  	"fmt"
     8  	"testing"
     9  
    10  	"github.com/stretchr/testify/assert"
    11  )
    12  
    13  func TestBranchRuleMatchPriority(t *testing.T) {
    14  	kases := []struct {
    15  		Rules            []string
    16  		BranchName       string
    17  		ExpectedMatchIdx int
    18  	}{
    19  		{
    20  			Rules:            []string{"release/*", "release/v1.17"},
    21  			BranchName:       "release/v1.17",
    22  			ExpectedMatchIdx: 1,
    23  		},
    24  		{
    25  			Rules:            []string{"release/v1.17", "release/*"},
    26  			BranchName:       "release/v1.17",
    27  			ExpectedMatchIdx: 0,
    28  		},
    29  		{
    30  			Rules:            []string{"release/**/v1.17", "release/test/v1.17"},
    31  			BranchName:       "release/test/v1.17",
    32  			ExpectedMatchIdx: 1,
    33  		},
    34  		{
    35  			Rules:            []string{"release/test/v1.17", "release/**/v1.17"},
    36  			BranchName:       "release/test/v1.17",
    37  			ExpectedMatchIdx: 0,
    38  		},
    39  		{
    40  			Rules:            []string{"release/**", "release/v1.0.0"},
    41  			BranchName:       "release/v1.0.0",
    42  			ExpectedMatchIdx: 1,
    43  		},
    44  		{
    45  			Rules:            []string{"release/v1.0.0", "release/**"},
    46  			BranchName:       "release/v1.0.0",
    47  			ExpectedMatchIdx: 0,
    48  		},
    49  		{
    50  			Rules:            []string{"release/**", "release/v1.0.0"},
    51  			BranchName:       "release/v2.0.0",
    52  			ExpectedMatchIdx: 0,
    53  		},
    54  		{
    55  			Rules:            []string{"release/*", "release/v1.0.0"},
    56  			BranchName:       "release/1/v2.0.0",
    57  			ExpectedMatchIdx: -1,
    58  		},
    59  	}
    60  
    61  	for _, kase := range kases {
    62  		var pbs ProtectedBranchRules
    63  		for _, rule := range kase.Rules {
    64  			pbs = append(pbs, &ProtectedBranch{RuleName: rule})
    65  		}
    66  		pbs.sort()
    67  		matchedPB := pbs.GetFirstMatched(kase.BranchName)
    68  		if matchedPB == nil {
    69  			if kase.ExpectedMatchIdx >= 0 {
    70  				assert.Error(t, fmt.Errorf("no matched rules but expected %s[%d]", kase.Rules[kase.ExpectedMatchIdx], kase.ExpectedMatchIdx))
    71  			}
    72  		} else {
    73  			assert.EqualValues(t, kase.Rules[kase.ExpectedMatchIdx], matchedPB.RuleName)
    74  		}
    75  	}
    76  }