Files
Devour/internal/scraper/openapi_test.go
T
Tomas Dvorak 898a3c303f update
2026-02-24 10:33:59 +01:00

78 lines
1.9 KiB
Go

package scraper
import (
"context"
"net/http"
"net/http/httptest"
"strings"
"testing"
"time"
)
func TestOpenAPIScraperScrape(t *testing.T) {
spec := `{
"openapi": "3.0.0",
"info": {"title": "Pet API", "version": "1.0.0"},
"paths": {
"/pets": {
"get": {
"summary": "List pets",
"operationId": "listPets",
"responses": {"200": {"description": "ok"}}
}
}
}
}`
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
_, _ = w.Write([]byte(spec))
}))
defer srv.Close()
s := NewOpenAPIScraper(&Config{Timeout: 2 * time.Second, UserAgent: "DevourTest"})
docs, err := s.Scrape(context.Background(), &Source{Name: "pet", Type: SourceTypeOpenAPI, URL: srv.URL})
if err != nil {
t.Fatalf("unexpected scrape error: %v", err)
}
if len(docs) < 2 {
t.Fatalf("expected at least 2 docs, got %d", len(docs))
}
foundOp := false
for _, d := range docs {
if strings.Contains(d.Title, "List pets") {
foundOp = true
break
}
}
if !foundOp {
t.Fatal("expected operation document")
}
}
func TestOpenAPIScraperDetectChanges(t *testing.T) {
spec := `{"openapi":"3.0.0","info":{"title":"API"},"paths":{}}`
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
_, _ = w.Write([]byte(spec))
}))
defer srv.Close()
s := NewOpenAPIScraper(&Config{Timeout: 2 * time.Second, UserAgent: "DevourTest"})
src := &Source{Name: "api", Type: SourceTypeOpenAPI, URL: srv.URL}
changed, hash1, err := s.DetectChanges(context.Background(), src, "")
if err != nil {
t.Fatal(err)
}
if !changed || hash1 == "" {
t.Fatalf("expected changed=true and non-empty hash, changed=%v hash=%q", changed, hash1)
}
changed, _, err = s.DetectChanges(context.Background(), src, hash1)
if err != nil {
t.Fatal(err)
}
if changed {
t.Fatal("expected no changes when hash matches")
}
}