chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,87 @@
|
||||
package github
|
||||
|
||||
import (
|
||||
"context"
|
||||
"testing"
|
||||
|
||||
ghcontext "github.com/github/github-mcp-server/pkg/context"
|
||||
"github.com/modelcontextprotocol/go-sdk/mcp"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func createMCPRequestWithCapabilities(t *testing.T, caps *mcp.ClientCapabilities) mcp.CallToolRequest {
|
||||
t.Helper()
|
||||
srv := mcp.NewServer(&mcp.Implementation{Name: "test"}, nil)
|
||||
st, _ := mcp.NewInMemoryTransports()
|
||||
session, err := srv.Connect(context.Background(), st, &mcp.ServerSessionOptions{
|
||||
State: &mcp.ServerSessionState{
|
||||
InitializeParams: &mcp.InitializeParams{
|
||||
ClientInfo: &mcp.Implementation{Name: "test-client"},
|
||||
Capabilities: caps,
|
||||
},
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
t.Cleanup(func() { _ = session.Close() })
|
||||
return mcp.CallToolRequest{Session: session}
|
||||
}
|
||||
|
||||
func Test_clientSupportsUI(t *testing.T) {
|
||||
t.Parallel()
|
||||
ctx := context.Background()
|
||||
|
||||
t.Run("client with UI extension", func(t *testing.T) {
|
||||
caps := &mcp.ClientCapabilities{}
|
||||
caps.AddExtension("io.modelcontextprotocol/ui", map[string]any{
|
||||
"mimeTypes": []string{"text/html;profile=mcp-app"},
|
||||
})
|
||||
req := createMCPRequestWithCapabilities(t, caps)
|
||||
assert.True(t, clientSupportsUI(ctx, &req))
|
||||
})
|
||||
|
||||
t.Run("client without UI extension", func(t *testing.T) {
|
||||
req := createMCPRequestWithCapabilities(t, &mcp.ClientCapabilities{})
|
||||
assert.False(t, clientSupportsUI(ctx, &req))
|
||||
})
|
||||
|
||||
t.Run("client with nil capabilities", func(t *testing.T) {
|
||||
req := createMCPRequestWithCapabilities(t, nil)
|
||||
assert.False(t, clientSupportsUI(ctx, &req))
|
||||
})
|
||||
|
||||
t.Run("nil request", func(t *testing.T) {
|
||||
assert.False(t, clientSupportsUI(ctx, nil))
|
||||
})
|
||||
|
||||
t.Run("nil session", func(t *testing.T) {
|
||||
req := createMCPRequest(nil)
|
||||
assert.False(t, clientSupportsUI(ctx, &req))
|
||||
})
|
||||
}
|
||||
|
||||
func Test_clientSupportsUI_fromContext(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
t.Run("UI supported in context", func(t *testing.T) {
|
||||
ctx := ghcontext.WithUISupport(context.Background(), true)
|
||||
assert.True(t, clientSupportsUI(ctx, nil))
|
||||
})
|
||||
|
||||
t.Run("UI not supported in context", func(t *testing.T) {
|
||||
ctx := ghcontext.WithUISupport(context.Background(), false)
|
||||
assert.False(t, clientSupportsUI(ctx, nil))
|
||||
})
|
||||
|
||||
t.Run("context takes precedence over session", func(t *testing.T) {
|
||||
ctx := ghcontext.WithUISupport(context.Background(), false)
|
||||
caps := &mcp.ClientCapabilities{}
|
||||
caps.AddExtension("io.modelcontextprotocol/ui", map[string]any{})
|
||||
req := createMCPRequestWithCapabilities(t, caps)
|
||||
assert.False(t, clientSupportsUI(ctx, &req))
|
||||
})
|
||||
|
||||
t.Run("no context or session", func(t *testing.T) {
|
||||
assert.False(t, clientSupportsUI(context.Background(), nil))
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user