diff options
| author | Adam Mathes <adam@adammathes.com> | 2026-02-14 08:58:38 -0800 |
|---|---|---|
| committer | Adam Mathes <adam@adammathes.com> | 2026-02-14 08:58:38 -0800 |
| commit | e3c379d069ffa9661561d25cdbf2f5894a2f8ee8 (patch) | |
| tree | 24d0e9f5610dd9c8f873c5b78e6bc1c88d32840a /internal/crawler/integration_test.go | |
| parent | 4b06155fbde91a1bef6361ef36efb28789861928 (diff) | |
| download | neko-e3c379d069ffa9661561d25cdbf2f5894a2f8ee8.tar.gz neko-e3c379d069ffa9661561d25cdbf2f5894a2f8ee8.tar.bz2 neko-e3c379d069ffa9661561d25cdbf2f5894a2f8ee8.zip | |
Refactor: project structure, implement dependency injection, and align v2 UI with v1
Diffstat (limited to 'internal/crawler/integration_test.go')
| -rw-r--r-- | internal/crawler/integration_test.go | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/internal/crawler/integration_test.go b/internal/crawler/integration_test.go new file mode 100644 index 0000000..633b60f --- /dev/null +++ b/internal/crawler/integration_test.go @@ -0,0 +1,67 @@ +package crawler + +import ( + "fmt" + "net/http" + "net/http/httptest" + "os" + "testing" + + "adammathes.com/neko/models/feed" + "adammathes.com/neko/models/item" +) + +func TestCrawlIntegration(t *testing.T) { + setupTestDB(t) + + // Mock RSS feed server + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Content-Type", "application/rss+xml") + os.Stdout.Write([]byte("serving mock rss\n")) + fmt.Fprint(w, `<?xml version="1.0" encoding="UTF-8" ?> +<rss version="2.0"> +<channel> + <title>Test Feed</title> + <link>http://example.com/</link> + <description>Test Description</description> + <item> + <title>Test Item 1</title> + <link>http://example.com/item1</link> + <description>Item 1 Description</description> + <pubDate>Mon, 01 Jan 2024 00:00:00 +0000</pubDate> + </item> +</channel> +</rss>`) + })) + defer ts.Close() + + // Add the feed + f := &feed.Feed{Url: ts.URL} + err := f.Create() + if err != nil { + t.Fatalf("Failed to create feed: %v", err) + } + + // Crawl + ch := make(chan string, 1) + CrawlFeed(f, ch) + + res := <-ch + if res == "" { + t.Fatal("CrawlFeed returned empty result") + } + + // Verify items were stored + items, err := item.Filter(0, f.Id, "", false, false, 0, "") + if err != nil { + t.Fatalf("Failed to filter items: %v", err) + } + + if len(items) != 1 { + t.Fatalf("Expected 1 item, got %d", len(items)) + } + + if items[0].Title != "Test Item 1" { + t.Errorf("Expected 'Test Item 1', got %q", items[0].Title) + } +} |
