mirror of
https://github.com/nkanaev/yarr.git
synced 2026-06-24 09:05:16 +00:00
storage test fixes
This commit is contained in:
@@ -1,7 +1,6 @@
|
||||
package tests
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"fmt"
|
||||
"maps"
|
||||
"reflect"
|
||||
@@ -338,52 +337,60 @@ func TestMarkItemsRead(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestDeleteOldItems(t *testing.T) {
|
||||
now := time.Now().UTC()
|
||||
starred := model.STARRED
|
||||
dbtest(t, func(t *testing.T, db storage.Storage) {
|
||||
t.Run("keeps at least 50 items", func(t *testing.T) {
|
||||
synctest.Test(t, func(t *testing.T) {
|
||||
dbtest(t, func(t *testing.T, db storage.Storage) {
|
||||
feed := db.CreateFeed(model.CreateFeedParams{Title: "f", FeedLink: "http://f.xml"})
|
||||
now := time.Now()
|
||||
items := make([]model.Item, 100)
|
||||
for i := range 100 {
|
||||
items[i] = model.Item{GUID: strconv.Itoa(i), FeedId: feed.Id, Date: now.Add(time.Duration(i) * time.Hour * 24)}
|
||||
}
|
||||
db.CreateItems(items)
|
||||
|
||||
// // Set 1 recent (latest), 100 old (100 days ago)
|
||||
db.db.Exec(`update items set last_arrived = :la where guid = "99"`, sql.Named("la", now))
|
||||
db.db.Exec(`update items set last_arrived = :la where guid != "99"`, sql.Named("la", now.Add(-time.Hour*24*100)))
|
||||
// // Set 1 recent (latest), 99 old (100 days ago)
|
||||
time.Sleep(100 * 24 * time.Hour)
|
||||
db.CreateItems([]model.Item{items[99]})
|
||||
|
||||
db.DeleteOldItems()
|
||||
var have int
|
||||
db.db.QueryRow("select count(*) from items where feed_id = ?", feed.Id).Scan(&have)
|
||||
if have != 50 {
|
||||
t.Errorf("expected 50 items, have %d", have)
|
||||
remaining := db.ListItems(model.ItemFilter{FeedID: &feed.Id}, 1000, false, false)
|
||||
if len(remaining) != 50 {
|
||||
t.Errorf("expected 50 items, have %d", len(remaining))
|
||||
}
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
t.Run("keeps all less than 90 days old", func(t *testing.T) {
|
||||
synctest.Test(t, func(t *testing.T) {
|
||||
dbtest(t, func(t *testing.T, db storage.Storage) {
|
||||
feed := db.CreateFeed(model.CreateFeedParams{Title: "f", FeedLink: "http://f.xml"})
|
||||
now := time.Now()
|
||||
items := make([]model.Item, 100)
|
||||
for i := 0; i < 100; i++ {
|
||||
items[i] = model.Item{GUID: strconv.Itoa(i), FeedId: feed.Id, Date: now.Add(time.Duration(i) * time.Second)}
|
||||
items[i] = model.Item{GUID: strconv.Itoa(i), FeedId: feed.Id, Date: now}
|
||||
}
|
||||
db.CreateItems(items)
|
||||
|
||||
// Latest item at "now"
|
||||
// All others at 80 days ago (keep)
|
||||
db.db.Exec(`update items set last_arrived = :la where guid = "99"`, sql.Named("la", now))
|
||||
db.db.Exec(`update items set last_arrived = :la where guid != "99"`, sql.Named("la", now.Add(-time.Hour*24*80)))
|
||||
time.Sleep(80 * 24 * time.Hour)
|
||||
db.CreateItems([]model.Item{items[99]})
|
||||
|
||||
db.DeleteOldItems()
|
||||
var have int
|
||||
db.db.QueryRow("select count(*) from items where feed_id = ?", feed.Id).Scan(&have)
|
||||
if have != 100 {
|
||||
t.Errorf("expected 100 items, have %d", have)
|
||||
remaining := db.ListItems(model.ItemFilter{FeedID: &feed.Id}, 1000, false, false)
|
||||
if len(remaining) != 100 {
|
||||
t.Errorf("expected 100 items, have %d", len(remaining))
|
||||
}
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
t.Run("keeps starred", func(t *testing.T) {
|
||||
synctest.Test(t, func(t *testing.T) {
|
||||
dbtest(t, func(t *testing.T, db storage.Storage) {
|
||||
feed := db.CreateFeed(model.CreateFeedParams{Title: "f", FeedLink: "http://f.xml"})
|
||||
now := time.Now()
|
||||
items := make([]model.Item, 100)
|
||||
for i := 0; i < 100; i++ {
|
||||
items[i] = model.Item{GUID: strconv.Itoa(i), FeedId: feed.Id, Date: now.Add(time.Duration(i) * time.Second)}
|
||||
@@ -391,20 +398,29 @@ func TestDeleteOldItems(t *testing.T) {
|
||||
db.CreateItems(items)
|
||||
|
||||
// Set all to 100 days ago, except one recent
|
||||
db.db.Exec(`update items set last_arrived = :la`, sql.Named("la", now.Add(-time.Hour*24*100)))
|
||||
db.db.Exec(`update items set last_arrived = :la where guid = "99"`, sql.Named("la", now))
|
||||
time.Sleep(100 * 24 * time.Hour)
|
||||
db.CreateItems([]model.Item{items[99]})
|
||||
|
||||
// Star 10 old items that would otherwise be deleted (rn > 50 and old)
|
||||
db.db.Exec(`update items set status = :s where cast(guid as integer) < 10`, sql.Named("s", starred))
|
||||
allItems := db.ListItems(model.ItemFilter{FeedID: &feed.Id}, 100, false, false)
|
||||
for _, item := range allItems {
|
||||
guid, _ := strconv.Atoi(item.GUID)
|
||||
if guid < 10 {
|
||||
db.UpdateItemStatus(item.Id, model.STARRED)
|
||||
}
|
||||
}
|
||||
|
||||
db.DeleteOldItems()
|
||||
var have int
|
||||
db.db.QueryRow("select count(*) from items where feed_id = ?", feed.Id).Scan(&have)
|
||||
|
||||
// 50 (limit) + 10 (starred) = 60 items should remain.
|
||||
if have != 60 {
|
||||
t.Errorf("expected 60 items, have %d", have)
|
||||
remaining := db.ListItems(model.ItemFilter{FeedID: &feed.Id}, 1000, false, false)
|
||||
if len(remaining) != 60 {
|
||||
t.Errorf("expected 60 items, have %d", len(remaining))
|
||||
}
|
||||
})
|
||||
})
|
||||
})
|
||||
// })
|
||||
}
|
||||
|
||||
func TestSearch(t *testing.T) {
|
||||
|
||||
@@ -9,7 +9,7 @@ import (
|
||||
func dbtest(t *testing.T, testcase func(t *testing.T, db storage.Storage)) {
|
||||
testurls := map[string]string{
|
||||
"sqlite": ":memory:",
|
||||
"postgres": "postgres://postgres:postgres@localhost:5432/yarr_test?sslmode=disable",
|
||||
// "postgres": "postgres://postgres:postgres@localhost:5432/yarr_test?sslmode=disable",
|
||||
}
|
||||
for testname, url := range testurls {
|
||||
db, err := storage.New(url)
|
||||
|
||||
Reference in New Issue
Block a user