返回 DeepSeek-Reasonix
usecapability_arguments_test.go
根目录 / internal / agent / usecapability_arguments_test.go
1 package agent
2
3 import (
4 "context"
5 "encoding/json"
6 "testing"
7 )
8
9 func TestNormalizeMCPToolArguments(t *testing.T) {
10 tests := []struct {
11 name string
12 raw json.RawMessage
13 want string
14 wantErr bool
15 }{
16 {name: "object", raw: json.RawMessage(`{"filesToRebuild":["a.go"]}`), want: `{"filesToRebuild":["a.go"]}`},
17 {name: "string object", raw: json.RawMessage(`"{\"filesToRebuild\":[\"a.go\"]}"`), wantErr: true},
18 {name: "missing", want: `{}`},
19 {name: "null", raw: json.RawMessage(`null`), want: `{}`},
20 {name: "array", raw: json.RawMessage(`[]`), wantErr: true},
21 {name: "number", raw: json.RawMessage(`1`), wantErr: true},
22 {name: "boolean", raw: json.RawMessage(`true`), wantErr: true},
23 {name: "bad string", raw: json.RawMessage(`"{"`), wantErr: true},
24 {name: "nested string", raw: json.RawMessage(`"\"{}\""`), wantErr: true},
25 }
26 for _, test := range tests {
27 t.Run(test.name, func(t *testing.T) {
28 got, err := normalizeMCPToolArguments(test.raw)
29 if test.wantErr {
30 if err == nil {
31 t.Fatalf("normalize(%s) succeeded with %s", test.raw, got)
32 }
33 return
34 }
35 if err != nil {
36 t.Fatalf("normalize(%s): %v", test.raw, err)
37 }
38 if string(got) != test.want {
39 t.Fatalf("normalize(%s) = %s, want %s", test.raw, got, test.want)
40 }
41 })
42 }
43 }
44
45 func TestUseCapabilityRejectsStringWrappedMCPArgumentsBeforeResolution(t *testing.T) {
46 proxy := NewUseCapabilityTool(context.Background(), nil, nil, nil, nil, nil, nil)
47 _, err := proxy.ResolveCall(t.Context(), json.RawMessage(`{
48 "action":"call",
49 "capability_id":"mcp-tool:missing/tool",
50 "arguments":"{\"value\":1}"
51 }`))
52 if err == nil {
53 t.Fatal("ResolveCall accepted a JSON-string-wrapped object")
54 }
55 }
56
56 lines GO