gui/pkg/mcp/tools_display_test.go
Snider e83d2559bb
Some checks are pending
Security Scan / security (push) Waiting to run
Test / test (push) Waiting to run
Add missing GUI unit coverage
2026-04-15 23:17:52 +01:00

70 lines
2.2 KiB
Go

package mcp
import (
"context"
"errors"
"testing"
core "dappco.re/go/core"
"github.com/modelcontextprotocol/go-sdk/mcp"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func newDisplayToolTestSubsystem(t *testing.T, handler func(core.Options) core.Result) *Subsystem {
t.Helper()
c := core.New(core.WithServiceLock())
if handler != nil {
c.Action("display.resolveScheme", func(_ context.Context, opts core.Options) core.Result {
return handler(opts)
})
}
return New(c)
}
func TestToolsDisplay_schemeResolve_Good(t *testing.T) {
sub := newDisplayToolTestSubsystem(t, func(opts core.Options) core.Result {
return core.Result{
Value: map[string]any{
"url": opts.String("url"),
"route": "store",
"content_type": "text/html",
"body": "<html>core://store</html>",
},
OK: true,
}
})
server := mcp.NewServer(&mcp.Implementation{Name: "test", Version: "0.1.0"}, nil)
sub.registerDisplayTools(server)
result, err := sub.CallTool(context.Background(), "scheme_resolve", map[string]any{"url": "core://store?q=alpha"})
require.NoError(t, err)
assert.Contains(t, result, "core://store?q=alpha")
assert.Contains(t, result, "\"route\":\"store\"")
assert.Contains(t, result, "\"content_type\":\"text/html\"")
}
func TestToolsDisplay_schemeResolve_Bad(t *testing.T) {
sub := newDisplayToolTestSubsystem(t, func(core.Options) core.Result {
return core.Result{Value: errors.New("display offline"), OK: false}
})
_, _, err := sub.schemeResolve(context.Background(), nil, SchemeResolveInput{URL: "core://store"})
require.Error(t, err)
assert.Equal(t, "display offline", err.Error())
}
func TestToolsDisplay_schemeResolve_Ugly(t *testing.T) {
sub := newDisplayToolTestSubsystem(t, func(core.Options) core.Result {
return core.Result{Value: map[string]any{
"route": "store",
"content_type": "text/html",
"body": "<html>fallback</html>",
}, OK: true}
})
_, out, err := sub.schemeResolve(context.Background(), nil, SchemeResolveInput{URL: "core://store?q=beta"})
require.NoError(t, err)
assert.Equal(t, "core://store?q=beta", out.URL)
assert.Equal(t, "store", out.Route)
}