Files
2026-07-13 13:00:08 +08:00

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)
}
}
}