diff options
| author | Claude <noreply@anthropic.com> | 2026-02-16 23:31:54 +0000 |
|---|---|---|
| committer | Claude <noreply@anthropic.com> | 2026-02-16 23:31:54 +0000 |
| commit | 5f5f8be8c6ca78f5d61372544bb24d692d9597f0 (patch) | |
| tree | 7c864522e7c5aff3552d493136a692f6c167c528 /api/api_test.go | |
| parent | ed1b953e1336aeda282b46acd1c5e21529fa0950 (diff) | |
| download | neko-5f5f8be8c6ca78f5d61372544bb24d692d9597f0.tar.gz neko-5f5f8be8c6ca78f5d61372544bb24d692d9597f0.tar.bz2 neko-5f5f8be8c6ca78f5d61372544bb24d692d9597f0.zip | |
Add tests for CSRF exclusions, Filter includeContent, multi-feed, and routing
- CSRF: test excluded paths (/api/login, /api/logout), PUT/DELETE methods
- Item model: test Filter includeContent flag, ItemById returns content,
multiple feed_ids filtering
- API: test read_filter=all param, feed_ids comma-separated filter,
full_content exclusion from stream
- Routing: add v3 frontend route test
https://claude.ai/code/session_019Z4VJxzY7tcAuNkPAkvry9
Diffstat (limited to 'api/api_test.go')
| -rw-r--r-- | api/api_test.go | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/api/api_test.go b/api/api_test.go index ada824b..a2c3415 100644 --- a/api/api_test.go +++ b/api/api_test.go @@ -474,6 +474,65 @@ func TestStreamExcludesFullContent(t *testing.T) { } } +func TestStreamReadFilterAll(t *testing.T) { + setupTestDB(t) + server := newTestServer() + + f := &feed.Feed{Url: "http://example.com/rf", Title: "RF Feed"} + f.Create() + i := &item.Item{Title: "Read Item", Url: "http://example.com/rf/1", FeedId: f.Id} + _ = i.Create() + i.ReadState = true + i.Save() + + // Default (unread only) should return 0 since item is read + req := httptest.NewRequest("GET", "/stream", nil) + rr := httptest.NewRecorder() + server.HandleStream(rr, req) + var items []item.Item + json.NewDecoder(rr.Body).Decode(&items) + if len(items) != 0 { + t.Errorf("Default stream should return 0 read items, got %d", len(items)) + } + + // read_filter=all should return the read item + req = httptest.NewRequest("GET", "/stream?read_filter=all", nil) + rr = httptest.NewRecorder() + server.HandleStream(rr, req) + json.NewDecoder(rr.Body).Decode(&items) + if len(items) != 1 { + t.Errorf("read_filter=all should return 1 item, got %d", len(items)) + } +} + +func TestStreamMultipleFeedIds(t *testing.T) { + setupTestDB(t) + server := newTestServer() + + f1 := &feed.Feed{Url: "http://example.com/mf1", Title: "Feed 1"} + f1.Create() + f2 := &feed.Feed{Url: "http://example.com/mf2", Title: "Feed 2"} + f2.Create() + f3 := &feed.Feed{Url: "http://example.com/mf3", Title: "Feed 3"} + f3.Create() + + (&item.Item{Title: "F1", Url: "http://example.com/mf1/1", FeedId: f1.Id}).Create() + (&item.Item{Title: "F2", Url: "http://example.com/mf2/1", FeedId: f2.Id}).Create() + (&item.Item{Title: "F3", Url: "http://example.com/mf3/1", FeedId: f3.Id}).Create() + + // Filter by feed_ids=1,2 + url := "/stream?feed_ids=" + strconv.FormatInt(f1.Id, 10) + "," + strconv.FormatInt(f2.Id, 10) + req := httptest.NewRequest("GET", url, nil) + rr := httptest.NewRecorder() + server.HandleStream(rr, req) + + var items []item.Item + json.NewDecoder(rr.Body).Decode(&items) + if len(items) != 2 { + t.Errorf("feed_ids filter should return 2 items, got %d", len(items)) + } +} + func TestHandleCategorySuccess(t *testing.T) { setupTestDB(t) server := newTestServer() |
