package overlay

import (
	warewulfconf "github.com/warewulf/warewulf/internal/pkg/config"
	"testing"
)

var overlayImageTests = []struct {
	description string
	node        string
	context     string
	overlays    []string
	image       string
}{
	{"all empty", "", "", nil, ""},
	{"empty with named context", "", "system", nil, "p/overlays/__SYSTEM__.img"},
	{"empty with named overlay", "", "", []string{"o1"}, "p/overlays/o1.img"},
	{"empty with two named overlays", "", "", []string{"o1", "o2"}, "p/overlays/o1-o2.img"},
	{"empty node", "node1", "", nil, ""},
	{"node system overlay", "node1", "system", nil, "p/overlays/node1/__SYSTEM__.img"},
	{"node runtime overlay", "node1", "runtime", nil, "p/overlays/node1/__RUNTIME__.img"},
	{"node single overlay", "node1", "", []string{"o1"}, "p/overlays/node1/o1.img"},
	{"node two overlays", "node1", "", []string{"o1", "o2"}, "p/overlays/node1/o1-o2.img"},
	{"node with context and overlays", "node1", "system", []string{"o1", "o2"}, "p/overlays/node1/__SYSTEM__.img"},
}

func Test_OverlayImage(t *testing.T) {
	conf := warewulfconf.Get()
	conf.Paths.WWProvisiondir = "p"
	for _, tt := range overlayImageTests {
		t.Run(tt.description, func(t *testing.T) {
			out := OverlayImage(tt.node, tt.context, tt.overlays)
			if tt.image != out {
				t.Errorf("got %q, want %q", out, tt.image)
			}
		})
	}
}
