package yamlsaver

import (
	"testing"

	"github.com/databricks/cli/libs/dyn"
	assert "github.com/databricks/cli/libs/dyn/dynassert"
)

func TestConvertToMapValueWithOrder(t *testing.T) {
	type test struct {
		Name            string            `json:"name"`
		Map             map[string]string `json:"map"`
		List            []string          `json:"list"`
		LongNameField   string            `json:"long_name_field"`
		ForceSendFields []string          `json:"-"`
		Format          string            `json:"format"`
	}

	v := &test{
		Name: "test",
		Map: map[string]string{
			"key1": "value1",
			"key2": "value2",
		},
		List: []string{"a", "b", "c"},
		ForceSendFields: []string{
			"Name",
		},
		LongNameField: "long name goes here",
	}
	result, err := ConvertToMapValue(v, NewOrder([]string{"list", "name", "map"}), []string{"format"}, map[string]dyn.Value{})
	assert.NoError(t, err)

	assert.Equal(t, dyn.V(map[string]dyn.Value{
		"list": dyn.NewValue(
			[]dyn.Value{
				dyn.V("a"),
				dyn.V("b"),
				dyn.V("c"),
			},
			[]dyn.Location{{Line: -3}},
		),
		"name": dyn.NewValue(
			"test",
			[]dyn.Location{{Line: -2}},
		),
		"map": dyn.NewValue(
			map[string]dyn.Value{
				"key1": dyn.V("value1"),
				"key2": dyn.V("value2"),
			},
			[]dyn.Location{{Line: -1}},
		),
		"long_name_field": dyn.NewValue("long name goes here", []dyn.Location{{Line: 1}}),
	}), result)
}
