1package agent
2
3import (
4 "testing"
5
6 "github.com/bnema/zut/packages/agent/tools"
7)
8
9func TestBuildToolRegistryWebCapabilityBundle(t *testing.T) {
10 cwd := t.TempDir()
11 for _, tc := range []struct {
12 name string
13 args Args
14 want bool
15 }{
16 {name: "default", want: true},
17 {name: "explicit selector", args: Args{ToolsSet: true, Tools: []string{"web_search"}}, want: true},
18 {name: "excluded explicit list", args: Args{ToolsSet: true, Tools: []string{"read"}}, want: false},
19 {name: "no tools", args: Args{NoTools: true}, want: false},
20 } {
21 t.Run(tc.name, func(t *testing.T) {
22 registry := buildToolRegistry(tc.args, cwd, nil, false, false, false)
23 for _, name := range tools.WebCapabilityNames {
24 _, got := registry[name]
25 if got != tc.want {
26 t.Fatalf("tool %s present = %v, want %v", name, got, tc.want)
27 }
28 }
29 })
30 }
31}
32
33func TestBuildToolRegistryGrepSelectionAndDefaults(t *testing.T) {
34 cwd := t.TempDir()
35
36 defaultRegistry := buildToolRegistry(Args{}, cwd, nil, false, false, false)
37 if _, ok := defaultRegistry["grep"]; !ok {
38 t.Fatal("default registry does not contain grep")
39 }
40 defaultSummaries := toolSummaries(defaultRegistry, Args{})
41 grepIndex := -1
42 for i, summary := range defaultSummaries {
43 if summary.Name == "grep" {
44 grepIndex = i
45 break
46 }
47 }
48 if grepIndex < 0 {
49 t.Fatal("default tool summaries do not contain grep")
50 }
51 if grepIndex == 0 || defaultSummaries[grepIndex-1].Name != "edit" {
52 t.Fatalf("grep summary order has predecessor %q, want edit", defaultSummaries[grepIndex-1].Name)
53 }
54
55 selected := buildToolRegistry(Args{Tools: []string{"grep"}}, cwd, nil, false, false, false)
56 if len(selected) != 1 {
57 t.Fatalf("selected registry has %d tools, want one", len(selected))
58 }
59 if _, ok := selected["grep"].(*tools.GrepTool); !ok {
60 t.Fatalf("selected grep has type %T", selected["grep"])
61 }
62 if summaries := toolSummaries(selected, Args{Tools: []string{"grep"}}); len(summaries) != 1 || summaries[0].Name != "grep" {
63 t.Fatalf("selected summaries = %#v, want only grep", summaries)
64 }
65
66 noTools := buildToolRegistry(Args{NoTools: true}, cwd, nil, false, false, false)
67 if len(noTools) != 0 {
68 t.Fatalf("no-tools registry has %d tools", len(noTools))
69 }
70 if summaries := toolSummaries(noTools, Args{NoTools: true}); len(summaries) != 0 {
71 t.Fatalf("no-tools summaries = %#v", summaries)
72 }
73}