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 }