package tooldiscovery
import (
"testing"
"github.com/google/jsonschema-go/jsonschema"
"github.com/modelcontextprotocol/go-sdk/mcp"
"github.com/stretchr/testify/require"
)
func TestSearchTools_EmptyQueryReturnsNil(t *testing.T) {
results, err := SearchTools([]mcp.Tool{{Name: "issue_list"}}, " ")
require.NoError(t, err)
require.Nil(t, results)
}
func TestSearchTools_FindsByName(t *testing.T) {
tools := []mcp.Tool{
{Name: "issue_list", Description: "List issues"},
{Name: "repo_get", Description: "Get repository"},
}
results, err := SearchTools(tools, "issue", SearchOptions{MaxResults: 10})
require.NoError(t, err)
require.NotEmpty(t, results)
require.Equal(t, "issue_list", results[0].Tool.Name)
}
func TestSearchTools_FindsByParameterName_JSONSchema(t *testing.T) {
tools := []mcp.Tool{
{
Name: "unrelated_tool",
Description: "does something else",
InputSchema: &jsonschema.Schema{Properties: map[string]*jsonschema.Schema{"owner": {}}},
},
}
results, err := SearchTools(tools, "owner", SearchOptions{MaxResults: 10})
require.NoError(t, err)
require.NotEmpty(t, results)
require.Equal(t, "unrelated_tool", results[0].Tool.Name)
}
func TestSearchTools_FindsByParameterName_MapSchema(t *testing.T) {
tools := []mcp.Tool{
{
Name: "unrelated_tool",
Description: "does something else",
InputSchema: map[string]any{"properties": map[string]any{"repo": map[string]any{}}},
},
}
results, err := SearchTools(tools, "repo", SearchOptions{MaxResults: 10})
require.NoError(t, err)
require.NotEmpty(t, results)
require.Equal(t, "unrelated_tool", results[0].Tool.Name)
}