package runner

import (
	"testing"

	"github.com/stretchr/testify/assert"
	"github.com/stretchr/testify/require"
	"gopkg.in/yaml.v3"
)

type hydrateTestCase struct {
	Name           string
	InputYaml      string
	InputVars      map[string]interface{}
	Success        bool
	ExpectedResult string
}

func TestHydrateScalarNode(t *testing.T) {
	testCases := []hydrateTestCase{
		{
			Name:           "simpleValue",
			InputYaml:      "<[namespace]>",
			InputVars:      map[string]interface{}{"namespace": "ns1"},
			Success:        true,
			ExpectedResult: "ns1",
		},
		{
			Name:           "two-on-one-line",
			InputYaml:      "<[beaver_image]>:<[beaver_tag]>",
			InputVars:      map[string]interface{}{"beaver_image": "img1", "beaver_tag": "3.1.4"},
			Success:        true,
			ExpectedResult: "img1:3.1.4",
		},
	}

	for _, tcase := range testCases {
		t.Run(tcase.Name, func(t *testing.T) {
			var node yaml.Node
			require.NoError(t, yaml.Unmarshal([]byte(tcase.InputYaml), &node))

			// hydrate must work
			require.NoError(t, hydrateScalarNode(node.Content[0], tcase.InputVars))

			assert.Equal(t, tcase.ExpectedResult, node.Content[0].Value)
		})
	}
}