gui/pkg/menu/service_test.go
Snider 3afa0c84d3 feat(menu): add IPC layer — Service, Register factory, message types
Menu package is now a full core.Service with typed IPC messages.
TaskSetAppMenu carries MenuItems with OnClick closures (in-process IPC).

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-13 13:26:50 +00:00

64 lines
1.5 KiB
Go

package menu
import (
"context"
"testing"
"forge.lthn.ai/core/go/pkg/core"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func newTestMenuService(t *testing.T) (*Service, *core.Core) {
t.Helper()
c, err := core.New(
core.WithService(Register(newMockPlatform())),
core.WithServiceLock(),
)
require.NoError(t, err)
require.NoError(t, c.ServiceStartup(context.Background(), nil))
svc := core.MustServiceFor[*Service](c, "menu")
return svc, c
}
func TestRegister_Good(t *testing.T) {
svc, _ := newTestMenuService(t)
assert.NotNil(t, svc)
assert.NotNil(t, svc.manager)
}
func TestTaskSetAppMenu_Good(t *testing.T) {
_, c := newTestMenuService(t)
items := []MenuItem{
{Label: "File", Children: []MenuItem{
{Label: "New"},
{Type: "separator"},
{Label: "Quit"},
}},
}
_, handled, err := c.PERFORM(TaskSetAppMenu{Items: items})
require.NoError(t, err)
assert.True(t, handled)
}
func TestQueryGetAppMenu_Good(t *testing.T) {
_, c := newTestMenuService(t)
items := []MenuItem{{Label: "File"}, {Label: "Edit"}}
_, _, _ = c.PERFORM(TaskSetAppMenu{Items: items})
result, handled, err := c.QUERY(QueryGetAppMenu{})
require.NoError(t, err)
assert.True(t, handled)
menuItems := result.([]MenuItem)
assert.Len(t, menuItems, 2)
assert.Equal(t, "File", menuItems[0].Label)
}
func TestTaskSetAppMenu_Bad(t *testing.T) {
c, err := core.New(core.WithServiceLock())
require.NoError(t, err)
_, handled, _ := c.PERFORM(TaskSetAppMenu{})
assert.False(t, handled)
}