package engines import ( "context" "net/http" "strings" "testing" "github.com/metamorphosis-dev/kafka/internal/contracts" ) func TestArxivEngine_Search(t *testing.T) { transport := roundTripperFunc(func(r *http.Request) (*http.Response, error) { if r.Method != http.MethodGet { return httpResponse(http.StatusMethodNotAllowed, "", ""), nil } if r.URL.Host != "export.arxiv.org" || r.URL.Path != "/api/query" { return httpResponse(http.StatusNotFound, "", ""), nil } q := r.URL.Query().Get("search_query") if q != "all:quantum" { return httpResponse(http.StatusBadRequest, "", ""), nil } atom := ` Quantum Test http://arxiv.org/abs/1234.5678 Abstract here 2024-06-03T00:00:00Z ` return httpResponse(http.StatusOK, atom, "application/atom+xml"), nil }) client := &http.Client{Transport: transport} engine := &ArxivEngine{client: client} resp, err := engine.Search(context.Background(), contracts.SearchRequest{ Query: "quantum", Pageno: 1, }) if err != nil { t.Fatalf("unexpected error: %v", err) } if len(resp.Results) != 1 { t.Fatalf("expected 1 result, got %d", len(resp.Results)) } r := resp.Results[0] if r.Title != "Quantum Test" { t.Fatalf("unexpected title: %q", r.Title) } if r.Content != "Abstract here" { t.Fatalf("unexpected content: %q", r.Content) } if r.URL == nil || !strings.Contains(*r.URL, "1234.5678") { t.Fatalf("unexpected url: %v", r.URL) } if r.Pubdate == nil || !strings.Contains(*r.Pubdate, "2024-06-03") { t.Fatalf("expected pubdate around 2024-06-03, got %v", r.Pubdate) } }