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,27 @@ 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
+ },
87
+ },
88
+ },
89
+ },
56
90
}
57
91
58
92
rule := NewTerraformRequiredVersionRule ()
@@ -73,3 +107,76 @@ terraform {
73
107
})
74
108
}
75
109
}
110
+
111
+ func Test_TerraformRequiredVersionRuleMultipleFiles (t * testing.T ) {
112
+ cases := []struct {
113
+ Name string
114
+ Files []string
115
+ Expected helper.Issues
116
+ }{
117
+ {
118
+ Name : "has terraform.tf and main.tf" ,
119
+ Files : []string {"modules/foo/main.tf" , "modules/foo/terraform.tf" },
120
+ Expected : helper.Issues {
121
+ {
122
+ Rule : NewTerraformRequiredVersionRule (),
123
+ Message : "terraform \" required_version\" attribute is required" ,
124
+ Range : hcl.Range {
125
+ Filename : filepath .FromSlash ("modules/foo/terraform.tf" ),
126
+ Start : hcl.Pos {
127
+ Line : 1 ,
128
+ Column : 1 ,
129
+ },
130
+ },
131
+ },
132
+ },
133
+ },
134
+ {
135
+ Name : "has main.tf" ,
136
+ Files : []string {"modules/foo/outputs.tf" , "modules/foo/main.tf" , "modules/foo/variables.tf" },
137
+ Expected : helper.Issues {
138
+ {
139
+ Rule : NewTerraformRequiredVersionRule (),
140
+ Message : "terraform \" required_version\" attribute is required" ,
141
+ Range : hcl.Range {
142
+ Filename : filepath .FromSlash ("modules/foo/main.tf" ),
143
+ Start : hcl.Pos {
144
+ Line : 1 ,
145
+ Column : 1 ,
146
+ },
147
+ },
148
+ },
149
+ },
150
+ },
151
+ {
152
+ Name : "has neither terraform.tf or main.tf" ,
153
+ Files : []string {"modules/foo/variables.tf" , "modules/foo/outputs.tf" },
154
+ Expected : helper.Issues {
155
+ {
156
+ Rule : NewTerraformRequiredVersionRule (),
157
+ Message : "terraform \" required_version\" attribute is required" ,
158
+ Range : hcl.Range {
159
+ Filename : filepath .FromSlash ("modules/foo/terraform.tf" ),
160
+ },
161
+ },
162
+ },
163
+ },
164
+ }
165
+
166
+ rule := NewTerraformRequiredVersionRule ()
167
+
168
+ for _ , tc := range cases {
169
+ t .Run (tc .Name , func (t * testing.T ) {
170
+ var files = map [string ]string {}
171
+ for _ , filename := range tc .Files {
172
+ files [filepath .FromSlash (filename )] = ""
173
+ }
174
+ runner := helper .TestRunner (t , files )
175
+ if err := rule .Check (runner ); err != nil {
176
+ t .Fatal (err )
177
+ }
178
+
179
+ helper .AssertIssues (t , tc .Expected , runner .Issues )
180
+ })
181
+ }
182
+ }
0 commit comments