package fix

import (
	"reflect"
	"testing"
)

func TestFixerVagrantPPOverride_Impl(t *testing.T) {
	var _ Fixer = new(FixerVagrantPPOverride)
}

func TestFixerVagrantPPOverride_Fix(t *testing.T) {
	var f FixerVagrantPPOverride

	input := map[string]interface{}{
		"post-processors": []interface{}{
			"foo",

			map[string]interface{}{
				"type": "vagrant",
				"aws": map[string]interface{}{
					"foo": "bar",
				},
			},

			map[string]interface{}{
				"type": "vsphere",
			},

			[]interface{}{
				map[string]interface{}{
					"type": "vagrant",
					"vmware": map[string]interface{}{
						"foo": "bar",
					},
				},
			},
		},
	}

	expected := map[string]interface{}{
		"post-processors": []interface{}{
			"foo",

			map[string]interface{}{
				"type": "vagrant",
				"override": map[string]interface{}{
					"aws": map[string]interface{}{
						"foo": "bar",
					},
				},
			},

			map[string]interface{}{
				"type": "vsphere",
			},

			[]interface{}{
				map[string]interface{}{
					"type": "vagrant",
					"override": map[string]interface{}{
						"vmware": map[string]interface{}{
							"foo": "bar",
						},
					},
				},
			},
		},
	}

	output, err := f.Fix(input)
	if err != nil {
		t.Fatalf("err: %s", err)
	}

	if !reflect.DeepEqual(output, expected) {
		t.Fatalf("unexpected: %#v\nexpected: %#v\n", output, expected)
	}
}