github.com/nathanielks/terraform@v0.6.1-0.20170509030759-13e1a62319dc/config/append_test.go (about)

     1  package config
     2  
     3  import (
     4  	"reflect"
     5  	"testing"
     6  )
     7  
     8  func TestAppend(t *testing.T) {
     9  	cases := []struct {
    10  		c1, c2, result *Config
    11  		err            bool
    12  	}{
    13  		{
    14  			&Config{
    15  				Atlas: &AtlasConfig{
    16  					Name: "foo",
    17  				},
    18  				Modules: []*Module{
    19  					&Module{Name: "foo"},
    20  				},
    21  				Outputs: []*Output{
    22  					&Output{Name: "foo"},
    23  				},
    24  				ProviderConfigs: []*ProviderConfig{
    25  					&ProviderConfig{Name: "foo"},
    26  				},
    27  				Resources: []*Resource{
    28  					&Resource{Name: "foo"},
    29  				},
    30  				Variables: []*Variable{
    31  					&Variable{Name: "foo"},
    32  				},
    33  
    34  				unknownKeys: []string{"foo"},
    35  			},
    36  
    37  			&Config{
    38  				Atlas: &AtlasConfig{
    39  					Name: "bar",
    40  				},
    41  				Modules: []*Module{
    42  					&Module{Name: "bar"},
    43  				},
    44  				Outputs: []*Output{
    45  					&Output{Name: "bar"},
    46  				},
    47  				ProviderConfigs: []*ProviderConfig{
    48  					&ProviderConfig{Name: "bar"},
    49  				},
    50  				Resources: []*Resource{
    51  					&Resource{Name: "bar"},
    52  				},
    53  				Variables: []*Variable{
    54  					&Variable{Name: "bar"},
    55  				},
    56  
    57  				unknownKeys: []string{"bar"},
    58  			},
    59  
    60  			&Config{
    61  				Atlas: &AtlasConfig{
    62  					Name: "bar",
    63  				},
    64  				Modules: []*Module{
    65  					&Module{Name: "foo"},
    66  					&Module{Name: "bar"},
    67  				},
    68  				Outputs: []*Output{
    69  					&Output{Name: "foo"},
    70  					&Output{Name: "bar"},
    71  				},
    72  				ProviderConfigs: []*ProviderConfig{
    73  					&ProviderConfig{Name: "foo"},
    74  					&ProviderConfig{Name: "bar"},
    75  				},
    76  				Resources: []*Resource{
    77  					&Resource{Name: "foo"},
    78  					&Resource{Name: "bar"},
    79  				},
    80  				Variables: []*Variable{
    81  					&Variable{Name: "foo"},
    82  					&Variable{Name: "bar"},
    83  				},
    84  
    85  				unknownKeys: []string{"foo", "bar"},
    86  			},
    87  
    88  			false,
    89  		},
    90  
    91  		// Terraform block
    92  		{
    93  			&Config{
    94  				Terraform: &Terraform{
    95  					RequiredVersion: "A",
    96  				},
    97  			},
    98  			&Config{},
    99  			&Config{
   100  				Terraform: &Terraform{
   101  					RequiredVersion: "A",
   102  				},
   103  			},
   104  			false,
   105  		},
   106  
   107  		{
   108  			&Config{},
   109  			&Config{
   110  				Terraform: &Terraform{
   111  					RequiredVersion: "A",
   112  				},
   113  			},
   114  			&Config{
   115  				Terraform: &Terraform{
   116  					RequiredVersion: "A",
   117  				},
   118  			},
   119  			false,
   120  		},
   121  
   122  		// appending configs merges terraform blocks
   123  		{
   124  			&Config{
   125  				Terraform: &Terraform{
   126  					RequiredVersion: "A",
   127  				},
   128  			},
   129  			&Config{
   130  				Terraform: &Terraform{
   131  					Backend: &Backend{
   132  						Type: "test",
   133  					},
   134  				},
   135  			},
   136  			&Config{
   137  				Terraform: &Terraform{
   138  					RequiredVersion: "A",
   139  					Backend: &Backend{
   140  						Type: "test",
   141  					},
   142  				},
   143  			},
   144  			false,
   145  		},
   146  	}
   147  
   148  	for i, tc := range cases {
   149  		actual, err := Append(tc.c1, tc.c2)
   150  		if err != nil != tc.err {
   151  			t.Fatalf("%d: error fail", i)
   152  		}
   153  
   154  		if !reflect.DeepEqual(actual, tc.result) {
   155  			t.Fatalf("%d: bad:\n\n%#v", i, actual)
   156  		}
   157  	}
   158  }