aboutsummaryrefslogtreecommitdiffstats
path: root/api
diff options
context:
space:
mode:
authorAdam Mathes <adam@adammathes.com>2026-02-16 15:36:49 -0800
committerGitHub <noreply@github.com>2026-02-16 15:36:49 -0800
commitc538ccd5cd1d6960c894a2969ee49317009dc9ed (patch)
tree1d1b1295f3d63df85fffadaa1159414c74399c6c /api
parentfeea1a814a212efd9b14b8f05e84104ace3c473a (diff)
parent80d132b1714aaa281a6532ff66892bfdb7d2c5c2 (diff)
downloadneko-c538ccd5cd1d6960c894a2969ee49317009dc9ed.tar.gz
neko-c538ccd5cd1d6960c894a2969ee49317009dc9ed.tar.bz2
neko-c538ccd5cd1d6960c894a2969ee49317009dc9ed.zip
Merge pull request #7 from adammathes/claude/thicket-ready-crank-RmQuI
More crank pulls from claude
Diffstat (limited to 'api')
-rw-r--r--api/api_test.go88
1 files changed, 88 insertions, 0 deletions
diff --git a/api/api_test.go b/api/api_test.go
index 010908a..a2c3415 100644
--- a/api/api_test.go
+++ b/api/api_test.go
@@ -445,6 +445,94 @@ func TestHandleStreamComplexFilters(t *testing.T) {
}
}
+func TestStreamExcludesFullContent(t *testing.T) {
+ setupTestDB(t)
+ server := newTestServer()
+
+ f := &feed.Feed{Url: "http://example.com/content", Title: "Content Feed"}
+ f.Create()
+ i := &item.Item{
+ Title: "Content Item",
+ Url: "http://example.com/content/1",
+ FeedId: f.Id,
+ }
+ _ = i.Create()
+ // Simulate having full_content stored in DB
+ models.DB.Exec("UPDATE item SET full_content=? WHERE id=?", "<p>Full article text</p>", i.Id)
+
+ // Stream response should NOT include full_content
+ req := httptest.NewRequest("GET", "/stream?read_filter=all", nil)
+ rr := httptest.NewRecorder()
+ server.HandleStream(rr, req)
+
+ body := rr.Body.String()
+ if strings.Contains(body, "Full article text") {
+ t.Error("stream response should not contain full_content")
+ }
+ if strings.Contains(body, `"full_content"`) {
+ t.Error("stream response should not contain full_content key")
+ }
+}
+
+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()