package commands

import (
	"testing"

	"github.com/stretchr/testify/assert"
)

func TestAuthListCommand(t *testing.T) {
	t.Run("All", func(t *testing.T) {
		// Run command with test context.
		output, err := RunWithTestContext(AuthListCommand, []string{"ls"})

		// Check command output for plausibility.
		// t.Logf(output)
		assert.NoError(t, err)
		assert.Contains(t, output, "alice ")
		assert.Contains(t, output, "bob ")
		assert.Contains(t, output, "visitor ")
	})
	t.Run("Alice", func(t *testing.T) {
		// Run command with test context.
		output, err := RunWithTestContext(AuthListCommand, []string{"ls", "alice"})

		// Check command output for plausibility.
		// t.Logf(output)
		assert.NoError(t, err)
		assert.Contains(t, output, "Session ID")
		assert.Contains(t, output, "alice ")
		assert.NotContains(t, output, "bob ")
		assert.NotContains(t, output, "visitor ")
		assert.NotContains(t, output, "│ Preview Token │")
	})
	t.Run("CSV", func(t *testing.T) {
		// Run command with test context.
		output, err := RunWithTestContext(AuthListCommand, []string{"ls", "--csv", "alice"})

		// Check command output for plausibility.
		// t.Logf(output)
		assert.NoError(t, err)
		assert.Contains(t, output, "Session ID;")
		assert.Contains(t, output, "alice;")
		assert.NotContains(t, output, "bob;")
		assert.NotContains(t, output, "visitor")
	})
	t.Run("Tokens", func(t *testing.T) {
		// Run command with test context.
		output, err := RunWithTestContext(AuthListCommand, []string{"ls", "--tokens", "alice"})

		// Check command output for plausibility.
		// t.Logf(output)
		assert.NoError(t, err)
		assert.Contains(t, output, "│  Session ID  │")
		assert.Contains(t, output, "│ Preview Token │")
		assert.Contains(t, output, "alice ")
		assert.NotContains(t, output, "bob ")
		assert.NotContains(t, output, "visitor")
	})
	t.Run("NoResult", func(t *testing.T) {
		// Run command with test context.
		output, err := RunWithTestContext(AuthListCommand, []string{"ls", "--tokens", "notexisting"})

		// Check command output for plausibility.
		// t.Logf(output)
		assert.NoError(t, err)
		assert.Empty(t, output)
	})
	t.Run("Error", func(t *testing.T) {
		// Run command with test context.
		output, err := RunWithTestContext(AuthListCommand, []string{"ls", "--xyz", "alice"})

		// Check command output for plausibility.
		// t.Logf(output)
		assert.Empty(t, output)
		assert.Error(t, err)
	})
}
