mirror of
https://github.com/Dvorinka/Devour.git
synced 2026-06-03 20:13:03 +00:00
46 lines
1.0 KiB
Go
46 lines
1.0 KiB
Go
package scraper
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"testing"
|
|
)
|
|
|
|
type flakyStubScraper struct {
|
|
failFirst bool
|
|
calls int
|
|
}
|
|
|
|
func (f *flakyStubScraper) Scrape(ctx context.Context, source *Source) ([]*Document, error) {
|
|
f.calls++
|
|
if f.failFirst && f.calls == 1 {
|
|
return nil, fmt.Errorf("HTTP 503")
|
|
}
|
|
return []*Document{
|
|
{
|
|
Title: "Example ¶ deprecated",
|
|
Content: "ok",
|
|
URL: source.URL,
|
|
Type: "test",
|
|
},
|
|
}, nil
|
|
}
|
|
|
|
func (f *flakyStubScraper) DetectChanges(ctx context.Context, source *Source, lastHash string) (bool, string, error) {
|
|
return true, "hash", nil
|
|
}
|
|
|
|
func TestWrappedScraper_RetriesAndNormalizes(t *testing.T) {
|
|
w := wrapScraper(&flakyStubScraper{failFirst: true})
|
|
docs, err := w.Scrape(context.Background(), &Source{URL: "https://example.com"})
|
|
if err != nil {
|
|
t.Fatalf("expected retry to succeed, got error: %v", err)
|
|
}
|
|
if len(docs) != 1 {
|
|
t.Fatalf("expected 1 document, got %d", len(docs))
|
|
}
|
|
if docs[0].Title != "Example" {
|
|
t.Fatalf("expected normalized title, got %q", docs[0].Title)
|
|
}
|
|
}
|