package terminal

import (
	"testing"

	"git.netflux.io/rob/octoplex/internal/domain"
	"github.com/stretchr/testify/assert"
)

func TestContainerStateToStartState(t *testing.T) {
	testCases := []struct {
		containerState string
		want           startState
	}{
		{
			containerState: domain.ContainerStatusPulling,
			want:           startStateStarting,
		},
		{
			containerState: domain.ContainerStatusCreated,
			want:           startStateStarting,
		},
		{
			containerState: domain.ContainerStatusRunning,
			want:           startStateStarted,
		},
		{
			containerState: domain.ContainerStatusRestarting,
			want:           startStateStarted,
		},
		{
			containerState: domain.ContainerStatusPaused,
			want:           startStateStarted,
		},
		{
			containerState: domain.ContainerStatusRemoving,
			want:           startStateStarted,
		},
		{
			containerState: domain.ContainerStatusExited,
			want:           startStateNotStarted,
		},
		{
			containerState: domain.ContainerStatusDead,
			want:           startStateNotStarted,
		},
	}

	for _, tc := range testCases {
		t.Run(tc.containerState, func(t *testing.T) {
			assert.Equal(t, tc.want, containerStateToStartState(tc.containerState))
		})
	}
}

func TestRightPad(t *testing.T) {
	testCases := []struct {
		name  string
		input string
		want  string
	}{
		{
			name:  "empty string",
			input: "",
			want:  "",
		},
		{
			name:  "short string",
			input: "foo",
			want:  "foo   ",
		},
		{
			name:  "string with equal lenth to required width",
			input: "foobar",
			want:  "foobar",
		},
		{
			name:  "long string",
			input: "foobarbaz",
			want:  "foobar",
		},
	}

	for _, tc := range testCases {
		t.Run(tc.name, func(t *testing.T) {
			assert.Equal(t, tc.want, rightPad(tc.input, 6))
		})
	}
}