1package handlers
2
3import (
4 "context"
5 "encoding/json"
6 "testing"
7
8 "github.com/bnema/dumber/internal/application/port"
9 "github.com/bnema/dumber/internal/application/port/mocks"
10 "github.com/stretchr/testify/assert"
11 "github.com/stretchr/testify/mock"
12 "github.com/stretchr/testify/require"
13)
14
15func TestRegisterAccentHandlers_NilRouter(t *testing.T) {
16 handler := mocks.NewMockAccentKeyHandler(t)
17 err := RegisterAccentHandlers(context.Background(), nil, handler)
18 require.Error(t, err)
19 assert.Contains(t, err.Error(), "router")
20}
21
22func TestRegisterAccentHandlers_NilHandler(t *testing.T) {
23 router := mocks.NewMockWebUIHandlerRouter(t)
24 err := RegisterAccentHandlers(context.Background(), router, nil)
25 require.Error(t, err)
26 assert.Contains(t, err.Error(), "handler")
27}
28
29func TestRegisterAccentHandlers_Success(t *testing.T) {
30 router := mocks.NewMockWebUIHandlerRouter(t)
31 handler := mocks.NewMockAccentKeyHandler(t)
32
33 router.EXPECT().RegisterHandler("accent_key_press", mock.AnythingOfType("port.WebUIMessageHandlerFunc")).Return(nil)
34 router.EXPECT().RegisterHandler("accent_key_release", mock.AnythingOfType("port.WebUIMessageHandlerFunc")).Return(nil)
35
36 err := RegisterAccentHandlers(context.Background(), router, handler)
37 require.NoError(t, err)
38}
39
40func TestRegisterAccentHandlers_KeyPress(t *testing.T) {
41 ctx := context.Background()
42
43 // Use a real router to capture the handler and invoke it.
44 var captured port.WebUIMessageHandler
45 router := mocks.NewMockWebUIHandlerRouter(t)
46 router.EXPECT().RegisterHandler("accent_key_press", mock.AnythingOfType("port.WebUIMessageHandlerFunc")).
47 Run(func(_ string, h port.WebUIMessageHandler) { captured = h }).
48 Return(nil)
49 router.EXPECT().RegisterHandler("accent_key_release", mock.AnythingOfType("port.WebUIMessageHandlerFunc")).Return(nil)
50
51 handler := mocks.NewMockAccentKeyHandler(t)
52 handler.EXPECT().OnKeyPressed(ctx, 'e', true).Return(false)
53
54 err := RegisterAccentHandlers(ctx, router, handler)
55 require.NoError(t, err)
56 require.NotNil(t, captured)
57
58 payload := json.RawMessage(`{"char":"e","shift":true}`)
59 _, err = captured.Handle(ctx, 0, payload)
60 require.NoError(t, err)
61}