github.com/GoogleCloudPlatform/terraformer@v0.8.18/terraformutils/providerwrapper/provider_test.go (about)

     1  package providerwrapper //nolint
     2  
     3  import (
     4  	"regexp"
     5  	"testing"
     6  
     7  	"github.com/hashicorp/terraform/configs/configschema"
     8  	"github.com/zclconf/go-cty/cty"
     9  )
    10  
    11  func TestIgnoredAttributes(t *testing.T) {
    12  	attributes := map[string]*configschema.Attribute{
    13  		"computed_attribute": {
    14  			Type:     cty.Number,
    15  			Computed: true,
    16  		},
    17  		"required_attribute": {
    18  			Type:     cty.String,
    19  			Required: true,
    20  		},
    21  	}
    22  
    23  	testCases := map[string]struct {
    24  		block                map[string]*configschema.NestedBlock
    25  		ignoredAttributes    []string
    26  		notIgnoredAttributes []string
    27  	}{
    28  		"nesting_set": {map[string]*configschema.NestedBlock{
    29  			"attribute_one": {
    30  				Block: configschema.Block{
    31  					Attributes: attributes,
    32  				},
    33  				Nesting: configschema.NestingSet,
    34  			},
    35  		}, []string{"nesting_set.attribute_one.computed_attribute"},
    36  			[]string{"nesting_set.attribute_one.required_attribute"}},
    37  		"nesting_list": {map[string]*configschema.NestedBlock{
    38  			"attribute_one": {
    39  				Block: configschema.Block{
    40  					Attributes: map[string]*configschema.Attribute{},
    41  					BlockTypes: map[string]*configschema.NestedBlock{
    42  						"attribute_two_nested": {
    43  							Nesting: configschema.NestingList,
    44  							Block: configschema.Block{
    45  								Attributes: attributes,
    46  							},
    47  						},
    48  					},
    49  				},
    50  				Nesting: configschema.NestingList,
    51  			},
    52  		}, []string{"nesting_list.0.attribute_one.0.attribute_two_nested.computed_attribute"},
    53  			[]string{"nesting_list.0.attribute_one.0.attribute_two_nested.required_attribute"}},
    54  	}
    55  
    56  	for key, tc := range testCases {
    57  		t.Run(key, func(t *testing.T) {
    58  			provider := ProviderWrapper{}
    59  			readOnlyAttributes := provider.readObjBlocks(tc.block, []string{}, key)
    60  			for _, attr := range tc.ignoredAttributes {
    61  				if ignored := isAttributeIgnored(attr, readOnlyAttributes); !ignored {
    62  					t.Errorf("attribute \"%s\" was not ignored. Pattern list: %s", attr, readOnlyAttributes)
    63  				}
    64  			}
    65  
    66  			for _, attr := range tc.notIgnoredAttributes {
    67  				if ignored := isAttributeIgnored(attr, readOnlyAttributes); ignored {
    68  					t.Errorf("attribute \"%s\" was ignored. Pattern list: %s", attr, readOnlyAttributes)
    69  				}
    70  			}
    71  		})
    72  	}
    73  }
    74  
    75  func isAttributeIgnored(name string, patterns []string) bool {
    76  	ignored := false
    77  	for _, pattern := range patterns {
    78  		if match, _ := regexp.MatchString(pattern, name); match {
    79  			ignored = true
    80  			break
    81  		}
    82  	}
    83  	return ignored
    84  }