@@ -2,6 +2,7 @@ package provider_test
22
33import (
44 "fmt"
5+ "regexp"
56 "testing"
67
78 "github.com/hashicorp/terraform-plugin-testing/helper/resource"
@@ -36,7 +37,7 @@ resource %[1]q %[2]q {
3637 rules = [
3738 {
3839 title = "Has a Description"
39- expression = "description != null"
40+ expression = "entity. description() != null"
4041 weight = 1
4142 level = "Bronze"
4243 failure_message = "The description is required"
@@ -70,7 +71,7 @@ resource %[1]q %[2]q {
7071 rules = [
7172 {
7273 title = "Has a Description"
73- expression = "description != null"
74+ expression = "entity. description() != null"
7475 weight = 1
7576 level = "Bronze"
7677 failure_message = "The description is required"
@@ -105,7 +106,7 @@ resource %[1]q %[2]q {
105106 rules = [
106107 {
107108 title = "Has a Description"
108- expression = "description != null"
109+ expression = "entity. description() != null"
109110 weight = 1
110111 level = "Bronze"
111112 failure_message = "The description is required"
@@ -148,7 +149,7 @@ resource %[1]q %[2]q {
148149 rules = [
149150 {
150151 title = "Has a Description"
151- expression = "description != null"
152+ expression = "entity. description() != null"
152153 weight = 1
153154 level = "Bronze"
154155 failure_message = "The description is required"
@@ -167,7 +168,6 @@ resource %[1]q %[2]q {
167168 filter = {
168169 types = {
169170 include = ["service"]
170- exclude = ["deprecated"]
171171 }
172172 groups = {
173173 include = ["team-a", "team-b"]
@@ -180,6 +180,44 @@ resource %[1]q %[2]q {
180180}` , t .ResourceType (), t .Tag , t .Name , t .Description , t .Draft )
181181}
182182
183+ func (t * testScorecardResource ) ToTerraformWithFilterTypesExclude () string {
184+ return fmt .Sprintf (`
185+ resource %[1]q %[2]q {
186+ tag = %[2]q
187+ name = %[3]q
188+ description = %[4]q
189+ draft = %[5]t
190+ rules = [
191+ {
192+ title = "Has a Description"
193+ expression = "entity.description() != null"
194+ weight = 1
195+ level = "Bronze"
196+ failure_message = "The description is required"
197+ description = "The service has a description"
198+ }
199+ ]
200+ ladder = {
201+ levels = [
202+ {
203+ name = "Bronze"
204+ rank = 1
205+ color = "#c38b5f"
206+ }
207+ ]
208+ }
209+ filter = {
210+ types = {
211+ exclude = ["deprecated"]
212+ }
213+ query = "owners_is_set"
214+ }
215+ evaluation = {
216+ window = 24
217+ }
218+ }` , t .ResourceType (), t .Tag , t .Name , t .Description , t .Draft )
219+ }
220+
183221/***********************************************************************************************************************
184222 * Tests
185223 **********************************************************************************************************************/
@@ -202,7 +240,7 @@ func TestAccScorecardResourceComplete(t *testing.T) {
202240 resource .TestCheckResourceAttr (stub .ResourceFullName (), "draft" , fmt .Sprintf ("%t" , stub .Draft )),
203241
204242 resource .TestCheckResourceAttr (stub .ResourceFullName (), "rules.0.title" , "Has a Description" ),
205- resource .TestCheckResourceAttr (stub .ResourceFullName (), "rules.0.expression" , "description != null" ),
243+ resource .TestCheckResourceAttr (stub .ResourceFullName (), "rules.0.expression" , "entity. description() != null" ),
206244 resource .TestCheckResourceAttr (stub .ResourceFullName (), "rules.0.weight" , "1" ),
207245 resource .TestCheckResourceAttr (stub .ResourceFullName (), "rules.0.level" , "Bronze" ),
208246 resource .TestCheckResourceAttr (stub .ResourceFullName (), "rules.0.failure_message" , "The description is required" ),
@@ -225,7 +263,7 @@ func TestAccScorecardResourceComplete(t *testing.T) {
225263 resource .TestCheckResourceAttr (stub .ResourceFullName (), "draft" , fmt .Sprintf ("%t" , stub .Draft )),
226264
227265 resource .TestCheckResourceAttr (stub .ResourceFullName (), "rules.0.title" , "Has a Description" ),
228- resource .TestCheckResourceAttr (stub .ResourceFullName (), "rules.0.expression" , "description != null" ),
266+ resource .TestCheckResourceAttr (stub .ResourceFullName (), "rules.0.expression" , "entity. description() != null" ),
229267 resource .TestCheckResourceAttr (stub .ResourceFullName (), "rules.0.weight" , "1" ),
230268 resource .TestCheckResourceAttr (stub .ResourceFullName (), "rules.0.level" , "Bronze" ),
231269 resource .TestCheckResourceAttr (stub .ResourceFullName (), "rules.0.failure_message" , "The description is required" ),
@@ -250,7 +288,7 @@ func TestAccScorecardResourceComplete(t *testing.T) {
250288 resource .TestCheckResourceAttr (stub .ResourceFullName (), "draft" , "false" ),
251289
252290 resource .TestCheckResourceAttr (stub .ResourceFullName (), "rules.0.title" , "Has a Description" ),
253- resource .TestCheckResourceAttr (stub .ResourceFullName (), "rules.0.expression" , "description != null" ),
291+ resource .TestCheckResourceAttr (stub .ResourceFullName (), "rules.0.expression" , "entity. description() != null" ),
254292 resource .TestCheckResourceAttr (stub .ResourceFullName (), "rules.0.weight" , "1" ),
255293 resource .TestCheckResourceAttr (stub .ResourceFullName (), "rules.0.level" , "Bronze" ),
256294 resource .TestCheckResourceAttr (stub .ResourceFullName (), "rules.0.failure_message" , "The description is required" ),
@@ -264,8 +302,8 @@ func TestAccScorecardResourceComplete(t *testing.T) {
264302 resource .TestCheckResourceAttr (stub .ResourceFullName (), "ladder.levels.1.rank" , "2" ),
265303 resource .TestCheckResourceAttr (stub .ResourceFullName (), "ladder.levels.1.color" , "#c3c3c3" ),
266304
267- resource .TestCheckResourceAttr (stub .ResourceFullName (), "filter.types.include.0 " , "service" ),
268- resource .TestCheckResourceAttr (stub .ResourceFullName (), "filter.types.include.1 " , "app" ),
305+ resource .TestCheckTypeSetElemAttr (stub .ResourceFullName (), "filter.types.include.* " , "service" ),
306+ resource .TestCheckTypeSetElemAttr (stub .ResourceFullName (), "filter.types.include.* " , "app" ),
269307 resource .TestCheckResourceAttr (stub .ResourceFullName (), "filter.query" , "owners_is_set" ),
270308
271309 resource .TestCheckResourceAttr (stub .ResourceFullName (), "evaluation.window" , "24" ),
@@ -279,10 +317,21 @@ func TestAccScorecardResourceComplete(t *testing.T) {
279317 resource .TestCheckResourceAttr (stub .ResourceFullName (), "name" , stub .Name ),
280318 resource .TestCheckResourceAttr (stub .ResourceFullName (), "description" , stub .Description ),
281319
282- resource .TestCheckResourceAttr (stub .ResourceFullName (), "filter.types.include.0" , "service" ),
283- resource .TestCheckResourceAttr (stub .ResourceFullName (), "filter.types.exclude.0" , "deprecated" ),
284- resource .TestCheckResourceAttr (stub .ResourceFullName (), "filter.groups.include.0" , "team-a" ),
285- resource .TestCheckResourceAttr (stub .ResourceFullName (), "filter.groups.include.1" , "team-b" ),
320+ resource .TestCheckTypeSetElemAttr (stub .ResourceFullName (), "filter.types.include.*" , "service" ),
321+ resource .TestCheckTypeSetElemAttr (stub .ResourceFullName (), "filter.groups.include.*" , "team-a" ),
322+ resource .TestCheckTypeSetElemAttr (stub .ResourceFullName (), "filter.groups.include.*" , "team-b" ),
323+ resource .TestCheckResourceAttr (stub .ResourceFullName (), "filter.query" , "owners_is_set" ),
324+ ),
325+ },
326+ // Read testing with types exclude filter
327+ {
328+ Config : stub .ToTerraformWithFilterTypesExclude (),
329+ Check : resource .ComposeAggregateTestCheckFunc (
330+ resource .TestCheckResourceAttr (stub .ResourceFullName (), "tag" , stub .Tag ),
331+ resource .TestCheckResourceAttr (stub .ResourceFullName (), "name" , stub .Name ),
332+ resource .TestCheckResourceAttr (stub .ResourceFullName (), "description" , stub .Description ),
333+
334+ resource .TestCheckTypeSetElemAttr (stub .ResourceFullName (), "filter.types.exclude.*" , "deprecated" ),
286335 resource .TestCheckResourceAttr (stub .ResourceFullName (), "filter.query" , "owners_is_set" ),
287336 ),
288337 },
@@ -306,3 +355,46 @@ func TestAccScorecardResourceComplete(t *testing.T) {
306355 },
307356 })
308357}
358+
359+ func TestAccScorecardResourceFilterTypesValidation (t * testing.T ) {
360+ resource .Test (t , resource.TestCase {
361+ PreCheck : func () { testAccPreCheck (t ) },
362+ ProtoV6ProviderFactories : testAccProtoV6ProviderFactories ,
363+ Steps : []resource.TestStep {
364+ {
365+ Config : `
366+ resource "cortex_scorecard" "test" {
367+ tag = "test-validation"
368+ name = "Validation Test"
369+
370+ ladder = {
371+ levels = [
372+ {
373+ name = "Bronze"
374+ rank = 1
375+ color = "#c38b5f"
376+ }
377+ ]
378+ }
379+
380+ rules = [
381+ {
382+ title = "Has Description"
383+ expression = "entity.description() != null"
384+ weight = 1
385+ level = "Bronze"
386+ }
387+ ]
388+
389+ filter = {
390+ types = {
391+ include = ["service"]
392+ exclude = ["deprecated"]
393+ }
394+ }
395+ }` ,
396+ ExpectError : regexp .MustCompile (`Attribute "filter\.types\.(include|exclude)" cannot be specified when` ),
397+ },
398+ },
399+ })
400+ }
0 commit comments