mirror of
				https://github.com/go-gitea/gitea
				synced 2025-10-31 03:18:24 +00:00 
			
		
		
		
	before if it was nonglob each load would try to glob it and the check that is not glob ... now we only do that once and no future loading will trigger it --- *Sponsored by Kithara Software GmbH*
		
			
				
	
	
		
			106 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			106 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| // Copyright 2023 The Gitea Authors. All rights reserved.
 | |
| // SPDX-License-Identifier: MIT
 | |
| 
 | |
| package git
 | |
| 
 | |
| import (
 | |
| 	"fmt"
 | |
| 	"testing"
 | |
| 
 | |
| 	"github.com/stretchr/testify/assert"
 | |
| )
 | |
| 
 | |
| func TestBranchRuleMatchPriority(t *testing.T) {
 | |
| 	kases := []struct {
 | |
| 		Rules            []string
 | |
| 		BranchName       string
 | |
| 		ExpectedMatchIdx int
 | |
| 	}{
 | |
| 		{
 | |
| 			Rules:            []string{"release/*", "release/v1.17"},
 | |
| 			BranchName:       "release/v1.17",
 | |
| 			ExpectedMatchIdx: 1,
 | |
| 		},
 | |
| 		{
 | |
| 			Rules:            []string{"release/v1.17", "release/*"},
 | |
| 			BranchName:       "release/v1.17",
 | |
| 			ExpectedMatchIdx: 0,
 | |
| 		},
 | |
| 		{
 | |
| 			Rules:            []string{"release/**/v1.17", "release/test/v1.17"},
 | |
| 			BranchName:       "release/test/v1.17",
 | |
| 			ExpectedMatchIdx: 1,
 | |
| 		},
 | |
| 		{
 | |
| 			Rules:            []string{"release/test/v1.17", "release/**/v1.17"},
 | |
| 			BranchName:       "release/test/v1.17",
 | |
| 			ExpectedMatchIdx: 0,
 | |
| 		},
 | |
| 		{
 | |
| 			Rules:            []string{"release/**", "release/v1.0.0"},
 | |
| 			BranchName:       "release/v1.0.0",
 | |
| 			ExpectedMatchIdx: 1,
 | |
| 		},
 | |
| 		{
 | |
| 			Rules:            []string{"release/v1.0.0", "release/**"},
 | |
| 			BranchName:       "release/v1.0.0",
 | |
| 			ExpectedMatchIdx: 0,
 | |
| 		},
 | |
| 		{
 | |
| 			Rules:            []string{"release/**", "release/v1.0.0"},
 | |
| 			BranchName:       "release/v2.0.0",
 | |
| 			ExpectedMatchIdx: 0,
 | |
| 		},
 | |
| 		{
 | |
| 			Rules:            []string{"release/*", "release/v1.0.0"},
 | |
| 			BranchName:       "release/1/v2.0.0",
 | |
| 			ExpectedMatchIdx: -1,
 | |
| 		},
 | |
| 	}
 | |
| 
 | |
| 	for _, kase := range kases {
 | |
| 		var pbs ProtectedBranchRules
 | |
| 		for _, rule := range kase.Rules {
 | |
| 			pbs = append(pbs, &ProtectedBranch{RuleName: rule})
 | |
| 		}
 | |
| 		pbs.sort()
 | |
| 		matchedPB := pbs.GetFirstMatched(kase.BranchName)
 | |
| 		if matchedPB == nil {
 | |
| 			if kase.ExpectedMatchIdx >= 0 {
 | |
| 				assert.Error(t, fmt.Errorf("no matched rules but expected %s[%d]", kase.Rules[kase.ExpectedMatchIdx], kase.ExpectedMatchIdx))
 | |
| 			}
 | |
| 		} else {
 | |
| 			assert.EqualValues(t, kase.Rules[kase.ExpectedMatchIdx], matchedPB.RuleName)
 | |
| 		}
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func TestBranchRuleSort(t *testing.T) {
 | |
| 	in := []*ProtectedBranch{{
 | |
| 		RuleName:    "b",
 | |
| 		CreatedUnix: 1,
 | |
| 	}, {
 | |
| 		RuleName:    "b/*",
 | |
| 		CreatedUnix: 3,
 | |
| 	}, {
 | |
| 		RuleName:    "a/*",
 | |
| 		CreatedUnix: 2,
 | |
| 	}, {
 | |
| 		RuleName:    "c",
 | |
| 		CreatedUnix: 0,
 | |
| 	}, {
 | |
| 		RuleName:    "a",
 | |
| 		CreatedUnix: 4,
 | |
| 	}}
 | |
| 	expect := []string{"c", "b", "a", "a/*", "b/*"}
 | |
| 
 | |
| 	pbr := ProtectedBranchRules(in)
 | |
| 	pbr.sort()
 | |
| 
 | |
| 	var got []string
 | |
| 	for i := range pbr {
 | |
| 		got = append(got, pbr[i].RuleName)
 | |
| 	}
 | |
| 	assert.Equal(t, expect, got)
 | |
| }
 |