Module path now matches the GitHub mirror location. All internal imports updated across 35+ files.
71 lines
1.7 KiB
Go
71 lines
1.7 KiB
Go
package engines
|
|
|
|
import (
|
|
"context"
|
|
"net/http"
|
|
"testing"
|
|
|
|
"github.com/metamorphosis-dev/kafka/internal/contracts"
|
|
)
|
|
|
|
func TestCrossrefEngine_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 != "api.crossref.org" || r.URL.Path != "/works" {
|
|
return httpResponse(http.StatusNotFound, "", ""), nil
|
|
}
|
|
q := r.URL.Query().Get("query")
|
|
if q != "hugo" {
|
|
return httpResponse(http.StatusBadRequest, "", ""), nil
|
|
}
|
|
|
|
body := `{
|
|
"message": {
|
|
"items": [
|
|
{
|
|
"type": "journal-article",
|
|
"title": ["Paper B"],
|
|
"URL": "https://example.com/paperb",
|
|
"abstract": "Abstract B",
|
|
"DOI": "10.1234/b",
|
|
"published": {
|
|
"date-parts": [[2020, 5, 1]]
|
|
}
|
|
}
|
|
]
|
|
}
|
|
}`
|
|
return httpResponse(http.StatusOK, body, "application/json"), nil
|
|
})
|
|
|
|
client := &http.Client{Transport: transport}
|
|
engine := &CrossrefEngine{client: client}
|
|
|
|
resp, err := engine.Search(context.Background(), contracts.SearchRequest{
|
|
Query: "hugo",
|
|
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 != "Paper B" {
|
|
t.Fatalf("expected title Paper B, got %q", r.Title)
|
|
}
|
|
if r.Content != "Abstract B" {
|
|
t.Fatalf("expected content, got %q", r.Content)
|
|
}
|
|
if r.Pubdate == nil || *r.Pubdate == "" {
|
|
t.Fatalf("expected pubdate, got nil/empty")
|
|
}
|
|
if r.Engine != "crossref" {
|
|
t.Fatalf("expected engine crossref, got %q", r.Engine)
|
|
}
|
|
}
|
|
|