// Copyright 2019 The Kubernetes Authors.
// SPDX-License-Identifier: Apache-2.0

package merge3_test

import (
	"strings"
	"testing"

	"github.com/stretchr/testify/assert"
	. "sigs.k8s.io/kustomize/kyaml/yaml/merge3"
)

var testCases = [][]testCase{scalarTestCases, listTestCases, mapTestCases, elementTestCases, kustomizationTestCases}

func TestMerge(t *testing.T) {
	for i := range testCases {
		for j := range testCases[i] {
			tc := testCases[i][j]
			t.Run(tc.description, func(t *testing.T) {
				actual, err := MergeStrings(tc.local, tc.origin, tc.update, tc.infer)
				if tc.err == nil {
					if !assert.NoError(t, err, tc.description) {
						t.FailNow()
					}
					if !assert.Equal(t,
						strings.TrimSpace(tc.expected), strings.TrimSpace(actual), tc.description) {
						t.FailNow()
					}
				} else {
					if !assert.Errorf(t, err, tc.description) {
						t.FailNow()
					}
					if !assert.Contains(t, tc.err.Error(), err.Error()) {
						t.FailNow()
					}
				}
			})
		}
	}
}

type testCase struct {
	description string
	origin      string
	update      string
	local       string
	expected    string
	err         error
	infer       bool
}
