package downstream

import (
	"context"
	"testing"

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

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

	want := &stubClient{}
	router := NewStaticRouter(map[string]Client{
		"fleet.move": want,
	})

	got, err := router.Route("fleet.move")
	require.NoError(t, err)
	assert.Same(t, want, got)
}

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

	router := NewStaticRouter(map[string]Client{
		"fleet.move": &stubClient{},
	})

	_, err := router.Route("fleet.rename")
	require.ErrorIs(t, err, ErrRouteNotFound)
}

type stubClient struct{}

func (*stubClient) ExecuteCommand(context.Context, AuthenticatedCommand) (UnaryResult, error) {
	return UnaryResult{}, nil
}
