package engines import ( "context" "net/http" "testing" "github.com/ashie/gosearch/internal/contracts" ) func TestBraveEngine_GatingAndHeader(t *testing.T) { wantToken := "letmein" wantAPIKey := "api-key" transport := roundTripperFunc(func(r *http.Request) (*http.Response, error) { if r.Header.Get("X-Subscription-Token") != wantAPIKey { t.Fatalf("missing/incorrect X-Subscription-Token header: got %q", r.Header.Get("X-Subscription-Token")) } if r.URL.Host != "api.search.brave.com" { t.Fatalf("unexpected host: %s", r.URL.Host) } if r.URL.Path != "/res/v1/web/search" { t.Fatalf("unexpected path: %s", r.URL.Path) } // basic query assertions q := r.URL.Query().Get("q") if q != "hugo" { t.Fatalf("unexpected q: %q", q) } body := `{ "web": { "results": [ {"url":"https://example.com/a","title":"A","description":"B","age":"2024-06-03T00:00:00Z","thumbnail":{"src":"x"}} ] } }` return httpResponse(http.StatusOK, body, "application/json"), nil }) client := &http.Client{Transport: transport} engine := &BraveEngine{ client: client, apiKey: wantAPIKey, accessGateToken: wantToken, resultsPerPage: 20, } // Wrong token => no upstream call / unresponsive engine. { resp, err := engine.Search(context.Background(), contracts.SearchRequest{ Query: "hugo", Pageno: 1, Safesearch: 0, Language: "en", AccessToken: "wrong", }) if err != nil { t.Fatalf("unexpected error: %v", err) } if len(resp.Results) != 0 { t.Fatalf("expected no results on unauthorized, got %d", len(resp.Results)) } if len(resp.UnresponsiveEngines) != 1 { t.Fatalf("expected 1 unresponsive engine entry, got %v", resp.UnresponsiveEngines) } } // Correct token => upstream call. { resp, err := engine.Search(context.Background(), contracts.SearchRequest{ Query: "hugo", Pageno: 1, Safesearch: 0, Language: "en", AccessToken: wantToken, }) if err != nil { t.Fatalf("unexpected error: %v", err) } if len(resp.Results) != 1 { t.Fatalf("expected 1 result, got %d", len(resp.Results)) } if resp.Results[0].Title != "A" { t.Fatalf("unexpected title: %q", resp.Results[0].Title) } if resp.Results[0].URL == nil || *resp.Results[0].URL != "https://example.com/a" { t.Fatalf("unexpected url: %v", resp.Results[0].URL) } } }