mirror of
https://github.com/nkanaev/yarr.git
synced 2026-06-24 00:55:16 +00:00
more storage tests
This commit is contained in:
@@ -80,6 +80,61 @@ func TestUpdateFeed(t *testing.T) {
|
||||
})
|
||||
}
|
||||
|
||||
func TestFeedStats(t *testing.T) {
|
||||
dbtest(t, func(t *testing.T, db storage.Storage) {
|
||||
// empty
|
||||
stats := db.FeedStats()
|
||||
if len(stats) != 0 {
|
||||
t.Errorf("expected 0 stats, got %d", len(stats))
|
||||
}
|
||||
|
||||
scope := testItemsSetup(db)
|
||||
|
||||
stats = db.FeedStats()
|
||||
statByFeed := make(map[int64]model.FeedStat)
|
||||
for _, s := range stats {
|
||||
statByFeed[s.FeedId] = s
|
||||
}
|
||||
|
||||
for _, tc := range []struct {
|
||||
feedID int64
|
||||
unread int64
|
||||
starred int64
|
||||
}{
|
||||
{scope.feed11.Id, 1, 1},
|
||||
{scope.feed12.Id, 1, 0},
|
||||
{scope.feed21.Id, 0, 1},
|
||||
{scope.feed01.Id, 1, 1},
|
||||
} {
|
||||
s, ok := statByFeed[tc.feedID]
|
||||
if !ok {
|
||||
t.Errorf("feed %d missing from stats", tc.feedID)
|
||||
continue
|
||||
}
|
||||
if s.UnreadCount != tc.unread {
|
||||
t.Errorf("feed %d unread: expected %d, got %d", tc.feedID, tc.unread, s.UnreadCount)
|
||||
}
|
||||
if s.StarredCount != tc.starred {
|
||||
t.Errorf("feed %d starred: expected %d, got %d", tc.feedID, tc.starred, s.StarredCount)
|
||||
}
|
||||
}
|
||||
|
||||
// mark feed11 read, verify stats update
|
||||
db.MarkItemsRead(model.MarkFilter{FeedID: &scope.feed11.Id})
|
||||
stats = db.FeedStats()
|
||||
statByFeed = make(map[int64]model.FeedStat)
|
||||
for _, s := range stats {
|
||||
statByFeed[s.FeedId] = s
|
||||
}
|
||||
if s := statByFeed[scope.feed11.Id]; s.UnreadCount != 0 {
|
||||
t.Errorf("feed11 unread after mark-read: expected 0, got %d", s.UnreadCount)
|
||||
}
|
||||
if s := statByFeed[scope.feed11.Id]; s.StarredCount != 1 {
|
||||
t.Errorf("feed11 starred after mark-read: expected 1, got %d", s.StarredCount)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
func TestDeleteFeed(t *testing.T) {
|
||||
dbtest(t, func(t *testing.T, db storage.Storage) {
|
||||
feed1 := db.CreateFeed(model.CreateFeedParams{Title: "title", Link: "http://example.com", FeedLink: "http://example.com/feed.xml"})
|
||||
|
||||
@@ -7,6 +7,56 @@ import (
|
||||
"github.com/nkanaev/yarr/src/storage/model"
|
||||
)
|
||||
|
||||
func TestCreateFolder(t *testing.T) {
|
||||
dbtest(t, func(t *testing.T, db storage.Storage) {
|
||||
folder := db.CreateFolder("test-folder")
|
||||
if folder == nil || folder.Id == 0 {
|
||||
t.Fatal("expected folder with id")
|
||||
}
|
||||
if folder.Title != "test-folder" {
|
||||
t.Errorf("expected title 'test-folder', got %s", folder.Title)
|
||||
}
|
||||
if !folder.IsExpanded {
|
||||
t.Error("expected folder to be expanded by default")
|
||||
}
|
||||
|
||||
// upsert: same title returns existing folder
|
||||
folder2 := db.CreateFolder("test-folder")
|
||||
if folder2 == nil || folder2.Id != folder.Id {
|
||||
t.Errorf("expected same folder id on upsert, got %d != %d", folder2.Id, folder.Id)
|
||||
}
|
||||
|
||||
folders := db.ListFolders()
|
||||
if len(folders) != 1 || folders[0].Id != folder.Id {
|
||||
t.Errorf("expected folder in ListFolders")
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
func TestDeleteFolder(t *testing.T) {
|
||||
dbtest(t, func(t *testing.T, db storage.Storage) {
|
||||
// delete non-existent returns true (err == nil)
|
||||
if !db.DeleteFolder(99999) {
|
||||
t.Error("expected true when deleting non-existent folder")
|
||||
}
|
||||
|
||||
folder := db.CreateFolder("test")
|
||||
if !db.DeleteFolder(folder.Id) {
|
||||
t.Fatal("delete failed")
|
||||
}
|
||||
|
||||
folders := db.ListFolders()
|
||||
if len(folders) != 0 {
|
||||
t.Errorf("expected 0 folders, got %d", len(folders))
|
||||
}
|
||||
|
||||
// deleting again returns true
|
||||
if !db.DeleteFolder(folder.Id) {
|
||||
t.Error("expected true when deleting already-deleted folder")
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
func TestUpdateFolder(t *testing.T) {
|
||||
dbtest(t, func(t *testing.T, db storage.Storage) {
|
||||
folder := db.CreateFolder("old title")
|
||||
|
||||
@@ -428,6 +428,59 @@ func TestDeleteOldItems(t *testing.T) {
|
||||
// })
|
||||
}
|
||||
|
||||
func TestDeleteItem(t *testing.T) {
|
||||
dbtest(t, func(t *testing.T, db storage.Storage) {
|
||||
feed := db.CreateFeed(model.CreateFeedParams{FeedLink: "http://test.com/feed.xml"})
|
||||
db.CreateItems([]model.Item{{GUID: "i1", FeedId: feed.Id, Title: "item"}})
|
||||
|
||||
items := db.ListItems(model.ItemFilter{}, 10, false, false)
|
||||
if len(items) != 1 {
|
||||
t.Fatal("expected 1 item")
|
||||
}
|
||||
|
||||
// delete non-existent returns true (err == nil)
|
||||
if !db.DeleteItem(99999) {
|
||||
t.Error("expected true when deleting non-existent item")
|
||||
}
|
||||
|
||||
// delete existing
|
||||
if !db.DeleteItem(items[0].Id) {
|
||||
t.Fatal("delete failed")
|
||||
}
|
||||
|
||||
items = db.ListItems(model.ItemFilter{}, 10, false, false)
|
||||
if len(items) != 0 {
|
||||
t.Errorf("expected 0 items, got %d", len(items))
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
func TestCountItems(t *testing.T) {
|
||||
dbtest(t, func(t *testing.T, db storage.Storage) {
|
||||
if count := db.CountItems(); count != 0 {
|
||||
t.Errorf("expected 0, got %d", count)
|
||||
}
|
||||
|
||||
feed := db.CreateFeed(model.CreateFeedParams{FeedLink: "http://test.com/feed.xml"})
|
||||
db.CreateItems([]model.Item{
|
||||
{GUID: "i1", FeedId: feed.Id},
|
||||
{GUID: "i2", FeedId: feed.Id},
|
||||
{GUID: "i3", FeedId: feed.Id},
|
||||
})
|
||||
|
||||
if count := db.CountItems(); count != 3 {
|
||||
t.Errorf("expected 3, got %d", count)
|
||||
}
|
||||
|
||||
items := db.ListItems(model.ItemFilter{}, 10, false, false)
|
||||
db.DeleteItem(items[0].Id)
|
||||
|
||||
if count := db.CountItems(); count != 2 {
|
||||
t.Errorf("expected 2, got %d", count)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
func TestSearch(t *testing.T) {
|
||||
dbtest(t, func(t *testing.T, db storage.Storage) {
|
||||
feed := db.CreateFeed(model.CreateFeedParams{Title: "f", FeedLink: "http://f.xml"})
|
||||
|
||||
Reference in New Issue
Block a user