package vagrant

import (
	"strings"
	"testing"

	"github.com/hashicorp/packer/packer-plugin-sdk/multistep"
)

func TestStepAdd_Impl(t *testing.T) {
	var raw interface{}
	raw = new(StepAddBox)
	if _, ok := raw.(multistep.Step); !ok {
		t.Fatalf("initialize should be a step")
	}
}

func TestPrepAddArgs(t *testing.T) {
	type testArgs struct {
		Step     StepAddBox
		Expected []string
	}
	addTests := []testArgs{
		{
			Step: StepAddBox{
				SourceBox: "my_source_box.box",
				BoxName:   "AWESOME BOX",
			},
			Expected: []string{"AWESOME BOX", "my_source_box.box"},
		},
		{
			Step: StepAddBox{
				SourceBox: "my_source_box",
				BoxName:   "AWESOME BOX",
			},
			Expected: []string{"my_source_box"},
		},
		{
			Step: StepAddBox{
				BoxVersion:   "eleventyone",
				CACert:       "adfasdf",
				CAPath:       "adfasdf",
				DownloadCert: "adfasdf",
				Clean:        true,
				Force:        true,
				Insecure:     true,
				Provider:     "virtualbox",
				SourceBox:    "bananabox.box",
				BoxName:      "bananas",
			},
			Expected: []string{"bananas", "bananabox.box", "--box-version", "eleventyone", "--cacert", "adfasdf", "--capath", "adfasdf", "--cert", "adfasdf", "--clean", "--force", "--insecure", "--provider", "virtualbox"},
		},
	}
	for _, addTest := range addTests {
		addArgs := addTest.Step.generateAddArgs()
		for i, val := range addTest.Expected {
			if strings.Compare(addArgs[i], val) != 0 {
				t.Fatalf("expected %#v but received %#v", addTest.Expected, addArgs)
			}
		}
	}
}
