1
1
package rules
2
2
3
3
import (
4
+ "path/filepath"
4
5
"testing"
5
6
7
+ "github.com/hashicorp/hcl/v2"
6
8
"github.com/terraform-linters/tflint-plugin-sdk/helper"
7
9
)
8
10
@@ -25,6 +27,17 @@ terraform {}
25
27
{
26
28
Rule : NewTerraformRequiredVersionRule (),
27
29
Message : "terraform \" required_version\" attribute is required" ,
30
+ Range : hcl.Range {
31
+ Filename : "module.tf" ,
32
+ Start : hcl.Pos {
33
+ Line : 2 ,
34
+ Column : 1 ,
35
+ },
36
+ End : hcl.Pos {
37
+ Line : 2 ,
38
+ Column : 10 ,
39
+ },
40
+ },
28
41
},
29
42
},
30
43
},
@@ -53,6 +66,31 @@ terraform {
53
66
` ,
54
67
Expected : helper.Issues {},
55
68
},
69
+ {
70
+ Name : "no terraform block" ,
71
+ Content : `
72
+ locals {
73
+ foo = "bar"
74
+ }
75
+ ` ,
76
+ Expected : helper.Issues {
77
+ {
78
+ Rule : NewTerraformRequiredVersionRule (),
79
+ Message : "terraform \" required_version\" attribute is required" ,
80
+ Range : hcl.Range {
81
+ Filename : "module.tf" ,
82
+ Start : hcl.Pos {
83
+ Line : 1 ,
84
+ Column : 1 ,
85
+ },
86
+ End : hcl.Pos {
87
+ Line : 1 ,
88
+ Column : 1 ,
89
+ },
90
+ },
91
+ },
92
+ },
93
+ },
56
94
}
57
95
58
96
rule := NewTerraformRequiredVersionRule ()
@@ -73,3 +111,84 @@ terraform {
73
111
})
74
112
}
75
113
}
114
+
115
+ func Test_TerraformRequiredVersionRuleMultipleFiles (t * testing.T ) {
116
+ cases := []struct {
117
+ Name string
118
+ Files []string
119
+ Expected helper.Issues
120
+ }{
121
+ {
122
+ Name : "has terraform.tf and main.tf" ,
123
+ Files : []string {"modules/foo/main.tf" , "modules/foo/terraform.tf" },
124
+ Expected : helper.Issues {
125
+ {
126
+ Rule : NewTerraformRequiredVersionRule (),
127
+ Message : "terraform \" required_version\" attribute is required" ,
128
+ Range : hcl.Range {
129
+ Filename : filepath .FromSlash ("modules/foo/terraform.tf" ),
130
+ Start : hcl.Pos {
131
+ Line : 1 ,
132
+ Column : 1 ,
133
+ },
134
+ End : hcl.Pos {
135
+ Line : 1 ,
136
+ Column : 1 ,
137
+ },
138
+ },
139
+ },
140
+ },
141
+ },
142
+ {
143
+ Name : "has main.tf" ,
144
+ Files : []string {"modules/foo/outputs.tf" , "modules/foo/main.tf" , "modules/foo/variables.tf" },
145
+ Expected : helper.Issues {
146
+ {
147
+ Rule : NewTerraformRequiredVersionRule (),
148
+ Message : "terraform \" required_version\" attribute is required" ,
149
+ Range : hcl.Range {
150
+ Filename : filepath .FromSlash ("modules/foo/main.tf" ),
151
+ Start : hcl.Pos {
152
+ Line : 1 ,
153
+ Column : 1 ,
154
+ },
155
+ End : hcl.Pos {
156
+ Line : 1 ,
157
+ Column : 1 ,
158
+ },
159
+ },
160
+ },
161
+ },
162
+ },
163
+ {
164
+ Name : "has neither terraform.tf or main.tf" ,
165
+ Files : []string {"modules/foo/variables.tf" , "modules/foo/outputs.tf" },
166
+ Expected : helper.Issues {
167
+ {
168
+ Rule : NewTerraformRequiredVersionRule (),
169
+ Message : "terraform \" required_version\" attribute is required" ,
170
+ Range : hcl.Range {
171
+ Filename : filepath .FromSlash ("modules/foo/terraform.tf" ),
172
+ },
173
+ },
174
+ },
175
+ },
176
+ }
177
+
178
+ rule := NewTerraformRequiredVersionRule ()
179
+
180
+ for _ , tc := range cases {
181
+ t .Run (tc .Name , func (t * testing.T ) {
182
+ var files = map [string ]string {}
183
+ for _ , filename := range tc .Files {
184
+ files [filepath .FromSlash (filename )] = ""
185
+ }
186
+ runner := helper .TestRunner (t , files )
187
+ if err := rule .Check (runner ); err != nil {
188
+ t .Fatal (err )
189
+ }
190
+
191
+ helper .AssertIssues (t , tc .Expected , runner .Issues )
192
+ })
193
+ }
194
+ }
0 commit comments