package healthcheck_test

import (
	"context"
	"testing"

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

	"gh.tarampamp.am/error-pages/internal/cli/healthcheck"
	"gh.tarampamp.am/error-pages/internal/logger"
)

func TestNewCommand(t *testing.T) {
	t.Parallel()

	var cmd = healthcheck.NewCommand(logger.NewNop(), nil)

	assert.Equal(t, "healthcheck", cmd.Name)
	assert.Equal(t, []string{"chk", "health", "check"}, cmd.Aliases)
}

type fakeHealthChecker struct {
	t           *testing.T
	wantAddress string
	giveErr     error
}

func (m *fakeHealthChecker) Check(_ context.Context, addr string) error {
	assert.Equal(m.t, m.wantAddress, addr)

	return m.giveErr
}

func TestCommand_RunSuccess(t *testing.T) {
	var cmd = healthcheck.NewCommand(logger.NewNop(), &fakeHealthChecker{
		t:           t,
		wantAddress: "http://127.0.0.1:1234",
	})

	require.NoError(t, cmd.Run(context.Background(), []string{"", "--port", "1234"}))
}

func TestCommand_RunFail(t *testing.T) {
	cmd := healthcheck.NewCommand(logger.NewNop(), &fakeHealthChecker{
		t:           t,
		wantAddress: "http://127.0.0.1:4321",
		giveErr:     assert.AnError,
	})

	assert.ErrorIs(t,
		cmd.Run(context.Background(), []string{"", "--port", "4321"}),
		assert.AnError,
	)
}
