diff options
| author | Adam Mathes <adam@adammathes.com> | 2026-02-13 18:43:03 -0800 |
|---|---|---|
| committer | Adam Mathes <adam@adammathes.com> | 2026-02-13 18:43:03 -0800 |
| commit | 21b4eec6c1e096573bcd5f2079bc21e23a960621 (patch) | |
| tree | 58c8fe2e86aef9859debd05344084e9060dc38c9 /crawler/integration_test.go | |
| parent | 01d4bbe4b2842cb8c2e4319b6cf03d3050f38d06 (diff) | |
| download | neko-21b4eec6c1e096573bcd5f2079bc21e23a960621.tar.gz neko-21b4eec6c1e096573bcd5f2079bc21e23a960621.tar.bz2 neko-21b4eec6c1e096573bcd5f2079bc21e23a960621.zip | |
refactor(backend): improve testability and add tests (NK-6q9nyg)
Diffstat (limited to 'crawler/integration_test.go')
| -rw-r--r-- | crawler/integration_test.go | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/crawler/integration_test.go b/crawler/integration_test.go new file mode 100644 index 0000000..633b60f --- /dev/null +++ b/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) + } +} |
