github.com/terraform-linters/tflint-plugin-sdk@v0.22.0/tflint/ruleset_test.go (about)

     1  package tflint
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/google/go-cmp/cmp"
     7  )
     8  
     9  type testRule struct {
    10  	DefaultRule
    11  	name string
    12  }
    13  
    14  func (r *testRule) Name() string       { return r.name }
    15  func (r *testRule) Enabled() bool      { return true }
    16  func (r *testRule) Severity() Severity { return ERROR }
    17  func (r *testRule) Check(Runner) error { return nil }
    18  
    19  type testRule1 struct {
    20  	testRule
    21  }
    22  
    23  type testRule2 struct {
    24  	testRule
    25  }
    26  
    27  type testRule3 struct {
    28  	testRule
    29  }
    30  
    31  func TestApplyGlobalConfig(t *testing.T) {
    32  	tests := []struct {
    33  		name   string
    34  		config *Config
    35  		want   []string
    36  	}{
    37  		{
    38  			name:   "default",
    39  			config: &Config{},
    40  			want:   []string{"test_rule1", "test_rule2", "test_rule3"},
    41  		},
    42  		{
    43  			name:   "disabled by default",
    44  			config: &Config{DisabledByDefault: true},
    45  			want:   []string{},
    46  		},
    47  		{
    48  			name: "rule config",
    49  			config: &Config{
    50  				Rules: map[string]*RuleConfig{
    51  					"test_rule1": {
    52  						Name:    "test_rule1",
    53  						Enabled: false,
    54  					},
    55  				},
    56  			},
    57  			want: []string{"test_rule2", "test_rule3"},
    58  		},
    59  		{
    60  			name:   "only",
    61  			config: &Config{Only: []string{"test_rule1"}},
    62  			want:   []string{"test_rule1"},
    63  		},
    64  		{
    65  			name: "disabled by default + rule config",
    66  			config: &Config{
    67  				Rules: map[string]*RuleConfig{
    68  					"test_rule2": {
    69  						Name:    "test_rule2",
    70  						Enabled: true,
    71  					},
    72  				},
    73  				DisabledByDefault: true,
    74  			},
    75  			want: []string{"test_rule2"},
    76  		},
    77  		{
    78  			name: "only + rule config",
    79  			config: &Config{
    80  				Rules: map[string]*RuleConfig{
    81  					"test_rule1": {
    82  						Name:    "test_rule1",
    83  						Enabled: false,
    84  					},
    85  				},
    86  				Only: []string{"test_rule1", "test_rule2"},
    87  			},
    88  			want: []string{"test_rule1", "test_rule2"},
    89  		},
    90  		{
    91  			name: "disabled by default + only",
    92  			config: &Config{
    93  				DisabledByDefault: true,
    94  				Only:              []string{"test_rule1", "test_rule2"},
    95  			},
    96  			want: []string{"test_rule1", "test_rule2"},
    97  		},
    98  		{
    99  			name: "disabled by default + only + rule config",
   100  			config: &Config{
   101  				Rules: map[string]*RuleConfig{
   102  					"test_rule2": {
   103  						Name:    "test_rule2",
   104  						Enabled: true,
   105  					},
   106  					"test_rule3": {
   107  						Name:    "test_rule3",
   108  						Enabled: false,
   109  					},
   110  				},
   111  				DisabledByDefault: true,
   112  				Only:              []string{"test_rule1", "test_rule3"},
   113  			},
   114  			want: []string{"test_rule1", "test_rule3"},
   115  		},
   116  	}
   117  
   118  	for _, test := range tests {
   119  		t.Run(test.name, func(t *testing.T) {
   120  			ruleset := &BuiltinRuleSet{
   121  				Rules: []Rule{
   122  					&testRule1{testRule: testRule{name: "test_rule1"}},
   123  					&testRule2{testRule: testRule{name: "test_rule2"}},
   124  					&testRule3{testRule: testRule{name: "test_rule3"}},
   125  				},
   126  			}
   127  
   128  			if err := ruleset.ApplyGlobalConfig(test.config); err != nil {
   129  				t.Fatal(err)
   130  			}
   131  
   132  			got := make([]string, len(ruleset.EnabledRules))
   133  			for i, r := range ruleset.EnabledRules {
   134  				got[i] = r.Name()
   135  			}
   136  
   137  			if diff := cmp.Diff(got, test.want); diff != "" {
   138  				t.Errorf(diff)
   139  			}
   140  		})
   141  	}
   142  }