package webfetch import ( "context" "net/http" "net/http/httptest" "strings" "testing" ) func TestFetchStripsHTML(t *testing.T) { srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { w.Write([]byte(`

标题

正文内容

`)) })) defer srv.Close() p := New() out, err := p.Execute(context.Background(), "web_fetch", map[string]any{"url": srv.URL}) if err != nil { t.Fatalf("Execute: %v", err) } if !strings.Contains(out, "标题") || !strings.Contains(out, "正文内容") { t.Errorf("missing text: %q", out) } if strings.Contains(out, "color:red") || strings.Contains(out, "var x=1") || strings.Contains(out, "

") { t.Errorf("HTML/script/style leaked: %q", out) } } func TestFetchRejectsBadURL(t *testing.T) { p := New() for _, u := range []string{"", "ftp://x", "example.com"} { if _, err := p.Execute(context.Background(), "web_fetch", map[string]any{"url": u}); err == nil { t.Errorf("url %q should be rejected", u) } } } func TestFetchHTTPError(t *testing.T) { srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { w.WriteHeader(404) })) defer srv.Close() p := New() if _, err := p.Execute(context.Background(), "web_fetch", map[string]any{"url": srv.URL}); err == nil { t.Error("expected error for 404") } }