package cmd import ( "net/http" "net/http/httptest" "os" "path/filepath" "strings" "testing" appconfig "github.com/yourorg/devour/internal/config" ) func TestScrapeFromConfig(t *testing.T) { srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "text/html") _, _ = w.Write([]byte("Docs
" + strings.Repeat("docs content ", 30) + "
")) })) defer srv.Close() tmp := t.TempDir() cfg := appconfig.Default() cfg.Storage.DocsDir = filepath.Join(tmp, "docs") cfg.Storage.IndexDir = filepath.Join(tmp, "index") cfg.Storage.MetadataDir = filepath.Join(tmp, "metadata") cfg.Storage.CacheDir = filepath.Join(tmp, "cache") if err := cfg.EnsureStorageDirs(); err != nil { t.Fatal(err) } sourcesPath := filepath.Join(tmp, "sources.yaml") yaml := "- name: demo\n type: url\n url: " + srv.URL + "\n" if err := os.WriteFile(sourcesPath, []byte(yaml), 0o644); err != nil { t.Fatal(err) } oldFormat, oldOutput, oldAllow := scrapeFormat, scrapeOutput, scrapeAllowEmpty scrapeFormat = "json" scrapeOutput = cfg.Storage.DocsDir scrapeAllowEmpty = false defer func() { scrapeFormat, scrapeOutput, scrapeAllowEmpty = oldFormat, oldOutput, oldAllow }() if err := scrapeFromConfig(nil, cfg, sourcesPath); err != nil { t.Fatalf("scrapeFromConfig failed: %v", err) } entries, err := os.ReadDir(cfg.Storage.DocsDir) if err != nil { t.Fatal(err) } if len(entries) == 0 { t.Fatal("expected scraped files") } }