terraform/helper/variables/merge_test.go

94 lines
1.5 KiB
Go

package variables
import (
"fmt"
"reflect"
"testing"
)
func TestMerge(t *testing.T) {
cases := []struct {
Name string
A, B map[string]interface{}
Expected map[string]interface{}
}{
{
"basic key/value",
map[string]interface{}{
"foo": "bar",
},
map[string]interface{}{
"bar": "baz",
},
map[string]interface{}{
"foo": "bar",
"bar": "baz",
},
},
{
"map unset",
map[string]interface{}{
"foo": "bar",
},
map[string]interface{}{
"bar": map[string]interface{}{
"foo": "bar",
},
},
map[string]interface{}{
"foo": "bar",
"bar": map[string]interface{}{
"foo": "bar",
},
},
},
{
"map merge",
map[string]interface{}{
"foo": "bar",
"bar": map[string]interface{}{
"bar": "baz",
},
},
map[string]interface{}{
"bar": map[string]interface{}{
"foo": "bar",
},
},
map[string]interface{}{
"foo": "bar",
"bar": map[string]interface{}{
"foo": "bar",
"bar": "baz",
},
},
},
{
"basic k/v with lists",
map[string]interface{}{
"foo": "bar",
"bar": []interface{}{"foo"},
},
map[string]interface{}{
"bar": []interface{}{"bar"},
},
map[string]interface{}{
"foo": "bar",
"bar": []interface{}{"bar"},
},
},
}
for i, tc := range cases {
t.Run(fmt.Sprintf("%d-%s", i, tc.Name), func(t *testing.T) {
actual := Merge(tc.A, tc.B)
if !reflect.DeepEqual(tc.Expected, actual) {
t.Fatalf("bad: %#v", actual)
}
})
}
}