206 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			206 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package config
 | |
| 
 | |
| import (
 | |
| 	"testing"
 | |
| 
 | |
| 	"github.com/stretchr/testify/assert"
 | |
| 	"github.com/stretchr/testify/require"
 | |
| )
 | |
| 
 | |
| func TestGetExcludePatterns(t *testing.T) {
 | |
| 	patterns := GetExcludePatterns(nil)
 | |
| 
 | |
| 	assert.Equal(t, DefaultExcludePatterns, patterns)
 | |
| }
 | |
| 
 | |
| func TestGetExcludePatterns_includes(t *testing.T) {
 | |
| 	include := []string{DefaultExcludePatterns[0].ID, DefaultExcludePatterns[1].ID}
 | |
| 
 | |
| 	exclude := GetExcludePatterns(include)
 | |
| 	assert.Len(t, exclude, len(DefaultExcludePatterns)-len(include))
 | |
| 
 | |
| 	for _, p := range exclude {
 | |
| 		assert.NotContains(t, include, p.ID)
 | |
| 		assert.Contains(t, DefaultExcludePatterns, p)
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func TestExcludeRule_Validate(t *testing.T) {
 | |
| 	testCases := []struct {
 | |
| 		desc     string
 | |
| 		rule     *ExcludeRule
 | |
| 		expected string
 | |
| 	}{
 | |
| 		{
 | |
| 			desc:     "empty rule",
 | |
| 			rule:     &ExcludeRule{},
 | |
| 			expected: "at least 2 of (text, source, path[-except],  linters) should be set",
 | |
| 		},
 | |
| 		{
 | |
| 			desc: "only path rule",
 | |
| 			rule: &ExcludeRule{
 | |
| 				BaseRule{
 | |
| 					Path: "test",
 | |
| 				},
 | |
| 			},
 | |
| 			expected: "at least 2 of (text, source, path[-except],  linters) should be set",
 | |
| 		},
 | |
| 		{
 | |
| 			desc: "only path-except rule",
 | |
| 			rule: &ExcludeRule{
 | |
| 				BaseRule{
 | |
| 					PathExcept: "test",
 | |
| 				},
 | |
| 			},
 | |
| 			expected: "at least 2 of (text, source, path[-except],  linters) should be set",
 | |
| 		},
 | |
| 		{
 | |
| 			desc: "only text rule",
 | |
| 			rule: &ExcludeRule{
 | |
| 				BaseRule{
 | |
| 					Text: "test",
 | |
| 				},
 | |
| 			},
 | |
| 			expected: "at least 2 of (text, source, path[-except],  linters) should be set",
 | |
| 		},
 | |
| 		{
 | |
| 			desc: "only source rule",
 | |
| 			rule: &ExcludeRule{
 | |
| 				BaseRule{
 | |
| 					Source: "test",
 | |
| 				},
 | |
| 			},
 | |
| 			expected: "at least 2 of (text, source, path[-except],  linters) should be set",
 | |
| 		},
 | |
| 		{
 | |
| 			desc: "invalid path rule",
 | |
| 			rule: &ExcludeRule{
 | |
| 				BaseRule{
 | |
| 					Path: "**test",
 | |
| 				},
 | |
| 			},
 | |
| 			expected: "invalid path regex: error parsing regexp: missing argument to repetition operator: `*`",
 | |
| 		},
 | |
| 		{
 | |
| 			desc: "invalid path-except rule",
 | |
| 			rule: &ExcludeRule{
 | |
| 				BaseRule{
 | |
| 					PathExcept: "**test",
 | |
| 				},
 | |
| 			},
 | |
| 			expected: "invalid path-except regex: error parsing regexp: missing argument to repetition operator: `*`",
 | |
| 		},
 | |
| 		{
 | |
| 			desc: "invalid text rule",
 | |
| 			rule: &ExcludeRule{
 | |
| 				BaseRule{
 | |
| 					Text: "**test",
 | |
| 				},
 | |
| 			},
 | |
| 			expected: "invalid text regex: error parsing regexp: missing argument to repetition operator: `*`",
 | |
| 		},
 | |
| 		{
 | |
| 			desc: "invalid source rule",
 | |
| 			rule: &ExcludeRule{
 | |
| 				BaseRule{
 | |
| 					Source: "**test",
 | |
| 				},
 | |
| 			},
 | |
| 			expected: "invalid source regex: error parsing regexp: missing argument to repetition operator: `*`",
 | |
| 		},
 | |
| 		{
 | |
| 			desc: "path and path-expect",
 | |
| 			rule: &ExcludeRule{
 | |
| 				BaseRule{
 | |
| 					Path:       "test",
 | |
| 					PathExcept: "test",
 | |
| 				},
 | |
| 			},
 | |
| 			expected: "path and path-except should not be set at the same time",
 | |
| 		},
 | |
| 	}
 | |
| 
 | |
| 	for _, test := range testCases {
 | |
| 		test := test
 | |
| 		t.Run(test.desc, func(t *testing.T) {
 | |
| 			t.Parallel()
 | |
| 
 | |
| 			err := test.rule.Validate()
 | |
| 			require.EqualError(t, err, test.expected)
 | |
| 		})
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func TestExcludeRule_Validate_error(t *testing.T) {
 | |
| 	testCases := []struct {
 | |
| 		desc string
 | |
| 		rule *ExcludeRule
 | |
| 	}{
 | |
| 		{
 | |
| 			desc: "path and linter",
 | |
| 			rule: &ExcludeRule{
 | |
| 				BaseRule{
 | |
| 					Path:    "test",
 | |
| 					Linters: []string{"a"},
 | |
| 				},
 | |
| 			},
 | |
| 		},
 | |
| 		{
 | |
| 			desc: "path-except and linter",
 | |
| 			rule: &ExcludeRule{
 | |
| 				BaseRule{
 | |
| 					PathExcept: "test",
 | |
| 					Linters:    []string{"a"},
 | |
| 				},
 | |
| 			},
 | |
| 		},
 | |
| 		{
 | |
| 			desc: "text and linter",
 | |
| 			rule: &ExcludeRule{
 | |
| 				BaseRule{
 | |
| 					Text:    "test",
 | |
| 					Linters: []string{"a"},
 | |
| 				},
 | |
| 			},
 | |
| 		},
 | |
| 		{
 | |
| 			desc: "source and linter",
 | |
| 			rule: &ExcludeRule{
 | |
| 				BaseRule{
 | |
| 					Source:  "test",
 | |
| 					Linters: []string{"a"},
 | |
| 				},
 | |
| 			},
 | |
| 		},
 | |
| 		{
 | |
| 			desc: "path and text",
 | |
| 			rule: &ExcludeRule{
 | |
| 				BaseRule{
 | |
| 					Path: "test",
 | |
| 					Text: "test",
 | |
| 				},
 | |
| 			},
 | |
| 		},
 | |
| 		{
 | |
| 			desc: "path and text and linter",
 | |
| 			rule: &ExcludeRule{
 | |
| 				BaseRule{
 | |
| 					Path:    "test",
 | |
| 					Text:    "test",
 | |
| 					Linters: []string{"a"},
 | |
| 				},
 | |
| 			},
 | |
| 		},
 | |
| 	}
 | |
| 
 | |
| 	for _, test := range testCases {
 | |
| 		test := test
 | |
| 		t.Run(test.desc, func(t *testing.T) {
 | |
| 			t.Parallel()
 | |
| 
 | |
| 			err := test.rule.Validate()
 | |
| 			require.NoError(t, err)
 | |
| 		})
 | |
| 	}
 | |
| }
 | 
