11package tests
22
33import (
4+ "strings"
45 "testing"
56
67 "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
@@ -13,57 +14,49 @@ import (
1314func TestSDKv2DetailedDiffMap (t * testing.T ) {
1415 t .Parallel ()
1516
16- res := schema.Resource {
17- Schema : map [string ]* schema.Schema {
18- "map_prop" : {
19- Type : schema .TypeMap ,
20- Optional : true ,
21- Elem : & schema.Schema {Type : schema .TypeString },
22- },
23- },
24- }
25-
26- ctyVal := func (v map [string ]string ) map [string ]cty.Value {
27- ctyMap := make (map [string ]cty.Value )
28-
17+ ctyMaker := func (v map [string ]string ) cty.Value {
2918 if len (v ) == 0 {
30- return map [string ]cty.Value {
31- "map_prop" : cty .MapValEmpty (cty .String ),
32- }
19+ return cty .MapValEmpty (cty .String )
3320 }
34-
21+ ctyMap := make ( map [ string ]cty. Value )
3522 for k , v := range v {
3623 ctyMap [k ] = cty .StringVal (v )
3724 }
38- return map [string ]cty.Value {
39- "map_prop" : cty .MapVal (ctyMap ),
40- }
25+ return cty .MapVal (ctyMap )
4126 }
4227
43- scenarios := []struct {
44- name string
45- initialValue map [string ]string
46- changeValue map [string ]string
47- }{
48- {"unchanged empty" , map [string ]string {}, map [string ]string {}},
49- {"unchanged non-empty" , map [string ]string {"key" : "val" }, map [string ]string {"key" : "val" }},
50- {"added" , map [string ]string {}, map [string ]string {"key" : "val" }},
51- {"removed" , map [string ]string {"key" : "val" }, map [string ]string {}},
52- {"value changed" , map [string ]string {"key" : "val" }, map [string ]string {"key" : "val2" }},
53- {"key changed" , map [string ]string {"key" : "val" }, map [string ]string {"key2" : "val" }},
54- }
28+ var nilVal map [string ]string
29+ schemaValueMakerPairs , scenarios := generatePrimitiveSchemaValueMakerPairs (
30+ schema .TypeMap , & schema.Schema {Type : schema .TypeString }, ctyMaker ,
31+ map [string ]string {"key" : "val1" }, map [string ]string {"key" : "val2" },
32+ map [string ]string {"key" : "computedVal" }, map [string ]string {"key" : "defaultVal" }, nilVal )
5533
56- for _ , scenario := range scenarios {
57- t .Run (scenario .name , func (t * testing.T ) {
34+ scenarios = append (scenarios , diffScenario [map [string ]string ]{
35+ name : "key changed" ,
36+ initialValue : ref (map [string ]string {"key" : "val1" }),
37+ changeValue : ref (map [string ]string {"key2" : "val1" }),
38+ })
39+
40+ for _ , schemaValueMakerPair := range schemaValueMakerPairs {
41+ t .Run (schemaValueMakerPair .name , func (t * testing.T ) {
5842 t .Parallel ()
59- diff := crosstests .Diff (t , & res , ctyVal (scenario .initialValue ), ctyVal (scenario .changeValue ))
60- autogold .ExpectFile (t , testOutput {
61- initialValue : scenario .initialValue ,
62- changeValue : scenario .changeValue ,
63- tfOut : diff .TFOut ,
64- pulumiOut : diff .PulumiOut ,
65- detailedDiff : diff .PulumiDiff .DetailedDiff ,
66- })
43+ for _ , scenario := range scenarios {
44+ t .Run (scenario .name , func (t * testing.T ) {
45+ if strings .Contains (schemaValueMakerPair .name , "required" ) &&
46+ (scenario .initialValue == nil || scenario .changeValue == nil ) {
47+ t .Skip ("Required fields cannot be unset" )
48+ }
49+ t .Parallel ()
50+ diff := crosstests .Diff (t , & schemaValueMakerPair .schema , schemaValueMakerPair .valueMaker (scenario .initialValue ), schemaValueMakerPair .valueMaker (scenario .changeValue ))
51+ autogold .ExpectFile (t , testOutput {
52+ initialValue : scenario .initialValue ,
53+ changeValue : scenario .changeValue ,
54+ tfOut : diff .TFOut ,
55+ pulumiOut : diff .PulumiOut ,
56+ detailedDiff : diff .PulumiDiff .DetailedDiff ,
57+ })
58+ })
59+ }
6760 })
6861 }
6962}
0 commit comments