package app

import (
	"testing"

	"coopcloud.tech/abra/cli/internal"
)

func TestGetSpecificVersion(t *testing.T) {
	tests := []struct {
		input          []string
		expectedOutput string
	}{
		// No specified version when command has one or less args
		{[]string{}, ""},
		{[]string{"arg0"}, ""},
		// Second in arg (index-1) is the specified result when command has more than 1 args
		{[]string{"arg0", "arg1"}, "arg1"},
		{[]string{"arg0", "arg1", "arg2"}, "arg1"},
	}

	for _, test := range tests {
		if test.expectedOutput != getSpecifiedVersion(test.input) {
			t.Fatalf("result for %s should be %s", test.input, test.expectedOutput)
		}
	}
}

func TestValidateChaosXORVersion(t *testing.T) {
	tests := []struct {
		input          []string
		isChaos        bool
		expectedResult bool
	}{
		// Chaos = true, Specified Version absent
		{[]string{}, true, true},
		// Chaos = false, Specified Version absent
		{[]string{}, false, true},
		// Chaos = true, Specified Version present
		{[]string{"arg0", "arg1"}, true, false},
		// Chaos = false, Specified Version present
		{[]string{"arg0", "arg1", "arg2"}, false, true},
	}

	for _, test := range tests {
		internal.Chaos = test.isChaos
		res, _ := validateChaosXORVersion(test.input)
		if res != test.expectedResult {
			t.Fatalf(
				"When args are %s and Chaos mode is %t result needs to be %t",
				test.input,
				test.isChaos,
				test.expectedResult,
			)
		}
	}
}
