about summary refs log blame commit diff
path: root/templater/templater_test.go
blob: 4aeee254d1c2553a81cbfec39283211b4fb87d00 (plain) (tree)
1
2
3
4
5
6




                                               
                 




































































































































                                                                          















                                                                                    
package templater

import (
	"github.com/tazjin/kontemplate/context"
	"reflect"
	"strings"
	"testing"
)

func TestApplyNoLimits(t *testing.T) {
	resources := []context.ResourceSet{
		{
			Name: "testResourceSet1",
		},
		{
			Name: "testResourceSet2",
		},
	}

	result := applyLimits(&resources, &[]string{}, &[]string{})

	if !reflect.DeepEqual(resources, *result) {
		t.Error("Resource set slice changed, but shouldn't have.")
		t.Errorf("Expected: %v\nResult: %v\n", resources, *result)
		t.Fail()
	}
}

func TestApplyIncludeLimits(t *testing.T) {
	resources := []context.ResourceSet{
		{
			Name: "testResourceSet1",
		},
		{
			Name: "testResourceSet2",
		},
		{
			Name:   "testResourceSet3",
			Parent: "included",
		},
	}

	includes := []string{"testResourceSet1", "included"}

	result := applyLimits(&resources, &includes, &[]string{})

	expected := []context.ResourceSet{
		{
			Name: "testResourceSet1",
		},
		{
			Name:   "testResourceSet3",
			Parent: "included",
		},
	}

	if !reflect.DeepEqual(expected, *result) {
		t.Error("Result does not contain expected resource sets.")
		t.Errorf("Expected: %v\nResult: %v\n", expected, *result)
		t.Fail()
	}
}

func TestApplyExcludeLimits(t *testing.T) {
	resources := []context.ResourceSet{
		{
			Name: "testResourceSet1",
		},
		{
			Name: "testResourceSet2",
		},
		{
			Name:   "testResourceSet3",
			Parent: "included",
		},
	}

	exclude := []string{"testResourceSet2"}

	result := applyLimits(&resources, &[]string{}, &exclude)

	expected := []context.ResourceSet{
		{
			Name: "testResourceSet1",
		},
		{
			Name:   "testResourceSet3",
			Parent: "included",
		},
	}

	if !reflect.DeepEqual(expected, *result) {
		t.Error("Result does not contain expected resource sets.")
		t.Errorf("Expected: %v\nResult: %v\n", expected, *result)
		t.Fail()
	}
}

func TestApplyLimitsExcludeIncludePrecedence(t *testing.T) {
	resources := []context.ResourceSet{
		{
			Name:   "collection/nested1",
			Parent: "collection",
		},
		{
			Name:   "collection/nested2",
			Parent: "collection",
		},
		{
			Name:   "collection/nested3",
			Parent: "collection",
		},
		{
			Name: "something-else",
		},
	}

	include := []string{"collection"}
	exclude := []string{"collection/nested2"}

	result := applyLimits(&resources, &include, &exclude)

	expected := []context.ResourceSet{
		{
			Name:   "collection/nested1",
			Parent: "collection",
		},
		{
			Name:   "collection/nested3",
			Parent: "collection",
		},
	}

	if !reflect.DeepEqual(expected, *result) {
		t.Error("Result does not contain expected resource sets.")
		t.Errorf("Expected: %v\nResult: %v\n", expected, *result)
		t.Fail()
	}
}

func TestFailOnMissingKeys(t *testing.T) {
	ctx := context.Context{}
	resourceSet := context.ResourceSet{}

	_, err := templateFile(&ctx, &resourceSet, "testdata/test-template.txt")

	if err == nil {
		t.Errorf("Template with missing keys should have failed.\n")
		t.Fail()
	}

	if !strings.Contains(err.Error(), "map has no entry for key \"testName\"") {
		t.Errorf("Templating failed with unexpected error: %v\n", err)
	}
}