aboutsummaryrefslogtreecommitdiffstats
path: root/internal/crawler/integration_test.go
diff options
context:
space:
mode:
authorAdam Mathes <adam@adammathes.com>2026-02-14 08:58:38 -0800
committerAdam Mathes <adam@adammathes.com>2026-02-14 08:58:38 -0800
commite3c379d069ffa9661561d25cdbf2f5894a2f8ee8 (patch)
tree24d0e9f5610dd9c8f873c5b78e6bc1c88d32840a /internal/crawler/integration_test.go
parent4b06155fbde91a1bef6361ef36efb28789861928 (diff)
downloadneko-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.go67
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)
+ }
+}