46 lines
1.3 KiB
Go
46 lines
1.3 KiB
Go
package provider
|
|
|
|
import (
|
|
"errors"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestAnnotateToolSchemaErrorNamesMCPSource(t *testing.T) {
|
|
err := &APIError{
|
|
Provider: "mimo",
|
|
Status: 400,
|
|
Body: `{"error":{"message":"Tool 1 function has invalid 'parameters' schema"}}`,
|
|
}
|
|
tools := []ToolSchema{
|
|
{Name: "read_file"},
|
|
{Name: "mcp__filesystem__search"},
|
|
}
|
|
|
|
got := AnnotateToolSchemaError(err, tools)
|
|
var apiErr *APIError
|
|
if !errors.As(got, &apiErr) {
|
|
t.Fatalf("AnnotateToolSchemaError() = %T, want *APIError", got)
|
|
}
|
|
for _, want := range []string{`Reasonix tool "mcp__filesystem__search"`, `MCP server "filesystem"`, `tool "search"`} {
|
|
if !strings.Contains(apiErr.ToolContext, want) {
|
|
t.Errorf("ToolContext = %q, want %q", apiErr.ToolContext, want)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestAnnotateToolSchemaErrorLeavesUnrelatedErrorsUnchanged(t *testing.T) {
|
|
tests := []error{
|
|
errors.New("network down"),
|
|
&APIError{Provider: "mimo", Status: 429, Body: "Tool 0 function failed"},
|
|
&APIError{Provider: "mimo", Status: 400, Body: "other bad request"},
|
|
&APIError{Provider: "mimo", Status: 400, Body: "Tool 9 function has invalid schema"},
|
|
}
|
|
tools := []ToolSchema{{Name: "read_file"}}
|
|
for _, err := range tests {
|
|
if got := AnnotateToolSchemaError(err, tools); got != err {
|
|
t.Errorf("AnnotateToolSchemaError(%v) changed unrelated error to %v", err, got)
|
|
}
|
|
}
|
|
}
|