storage test fixes

This commit is contained in:
nkanaev
2026-06-18 11:41:59 +01:00
parent 3e2b90f143
commit 7de4879a96

View File

@@ -2,8 +2,11 @@ package tests
import ( import (
"database/sql" "database/sql"
"fmt"
"log" "log"
"maps"
"reflect" "reflect"
"slices"
"strconv" "strconv"
"testing" "testing"
"testing/synctest" "testing/synctest"
@@ -36,6 +39,15 @@ type testItemScope struct {
feed11, feed12 *model.Feed feed11, feed12 *model.Feed
feed21, feed01 *model.Feed feed21, feed01 *model.Feed
folder1, folder2 *model.Folder folder1, folder2 *model.Folder
items map[string]model.Item
}
func MustGet[K comparable, V any](m map[K]V, key K) V {
value, ok := m[key]
if !ok {
panic(fmt.Sprintf("key %v not found in map", key))
}
return value
} }
func testItemsSetup(db storage.Storage) testItemScope { func testItemsSetup(db storage.Storage) testItemScope {
@@ -48,22 +60,22 @@ func testItemsSetup(db storage.Storage) testItemScope {
feed01 := db.CreateFeed(model.CreateFeedParams{Title: "feed01", FeedLink: "http://test.com/feed01.xml"}) feed01 := db.CreateFeed(model.CreateFeedParams{Title: "feed01", FeedLink: "http://test.com/feed01.xml"})
now := time.Now() now := time.Now()
db.CreateItems([]model.Item{ items := map[string]model.Item{
// feed11 // feed11
{ "item111": {
GUID: "item111", GUID: "item111",
FeedId: feed11.Id, FeedId: feed11.Id,
Title: "title111", Title: "title111",
Date: now.Add(time.Hour * 24 * 1), Date: now.Add(time.Hour * 24 * 1),
}, },
{ "item112": {
GUID: "item112", GUID: "item112",
FeedId: feed11.Id, FeedId: feed11.Id,
Title: "title112", Title: "title112",
Date: now.Add(time.Hour * 24 * 2), Date: now.Add(time.Hour * 24 * 2),
Status: model.READ, Status: model.READ,
}, // read }, // read
{ "item113": {
GUID: "item113", GUID: "item113",
FeedId: feed11.Id, FeedId: feed11.Id,
Title: "title113", Title: "title113",
@@ -71,13 +83,13 @@ func testItemsSetup(db storage.Storage) testItemScope {
Status: model.STARRED, Status: model.STARRED,
}, // starred }, // starred
// feed12 // feed12
{ "item121": {
GUID: "item121", GUID: "item121",
FeedId: feed12.Id, FeedId: feed12.Id,
Title: "title121", Title: "title121",
Date: now.Add(time.Hour * 24 * 4), Date: now.Add(time.Hour * 24 * 4),
}, },
{ "item122": {
GUID: "item122", GUID: "item122",
FeedId: feed12.Id, FeedId: feed12.Id,
Title: "title122", Title: "title122",
@@ -85,14 +97,14 @@ func testItemsSetup(db storage.Storage) testItemScope {
Status: model.READ, Status: model.READ,
}, // read }, // read
// feed21 // feed21
{ "item211": {
GUID: "item211", GUID: "item211",
FeedId: feed21.Id, FeedId: feed21.Id,
Title: "title211", Title: "title211",
Date: now.Add(time.Hour * 24 * 6), Date: now.Add(time.Hour * 24 * 6),
Status: model.READ, Status: model.READ,
}, // read }, // read
{ "item212": {
GUID: "item212", GUID: "item212",
FeedId: feed21.Id, FeedId: feed21.Id,
Title: "title212", Title: "title212",
@@ -100,27 +112,29 @@ func testItemsSetup(db storage.Storage) testItemScope {
Status: model.STARRED, Status: model.STARRED,
}, // starred }, // starred
// feed01 // feed01
{ "item011": {
GUID: "item011", GUID: "item011",
FeedId: feed01.Id, FeedId: feed01.Id,
Title: "title011", Title: "title011",
Date: now.Add(time.Hour * 24 * 8), Date: now.Add(time.Hour * 24 * 8),
}, },
{ "item012": {
GUID: "item012", GUID: "item012",
FeedId: feed01.Id, FeedId: feed01.Id,
Title: "title012", Title: "title012",
Date: now.Add(time.Hour * 24 * 9), Date: now.Add(time.Hour * 24 * 9),
Status: model.READ, Status: model.READ,
}, // read }, // read
{ "item013": {
GUID: "item013", GUID: "item013",
FeedId: feed01.Id, FeedId: feed01.Id,
Title: "title013", Title: "title013",
Date: now.Add(time.Hour * 24 * 10), Date: now.Add(time.Hour * 24 * 10),
Status: model.STARRED, Status: model.STARRED,
}, // starred }, // starred
}) }
db.CreateItems(slices.Collect(maps.Values(items)))
return testItemScope{ return testItemScope{
feed11: feed11, feed11: feed11,
@@ -129,6 +143,7 @@ func testItemsSetup(db storage.Storage) testItemScope {
feed01: feed01, feed01: feed01,
folder1: folder1, folder1: folder1,
folder2: folder2, folder2: folder2,
items: items,
} }
} }
@@ -142,7 +157,7 @@ func getItem(db storage.Storage, guid string) *model.Item {
where i.guid = :guid where i.guid = :guid
`, sql.Named("guid", guid)).Scan( `, sql.Named("guid", guid)).Scan(
&i.Id, &i.GUID, &i.FeedId, &i.Title, &i.Link, &i.Content, &i.Id, &i.GUID, &i.FeedId, &i.Title, &i.Link, &i.Content,
&i.Date, &i.Status, (*MediaLinks)(&i.MediaLinks), &i.Date, &i.Status, (*model.MediaLinks)(&i.MediaLinks),
) )
if err != nil { if err != nil {
log.Fatal(err) log.Fatal(err)
@@ -251,10 +266,10 @@ func TestListItems(t *testing.T) {
func TestListItemsPaginated(t *testing.T) { func TestListItemsPaginated(t *testing.T) {
dbtest(t, func(t *testing.T, db storage.Storage) { dbtest(t, func(t *testing.T, db storage.Storage) {
testItemsSetup(db) scope := testItemsSetup(db)
item012 := getItem(db, "item012") item012 := MustGet(scope.items, "item012")
item121 := getItem(db, "item121") item121 := MustGet(scope.items, "item121")
// all, newest first // all, newest first
have := getItemGuids(db.ListItems(model.ItemFilter{After: &item012.Id}, 3, true, false)) have := getItemGuids(db.ListItems(model.ItemFilter{After: &item012.Id}, 3, true, false))
@@ -328,8 +343,8 @@ func TestMarkItemsRead(t *testing.T) {
dbtest(t, func(t *testing.T, db3 storage.Storage) { dbtest(t, func(t *testing.T, db3 storage.Storage) {
scope3 := testItemsSetup(db3) scope3 := testItemsSetup(db3)
db3.MarkItemsRead(model.MarkFilter{FeedID: &scope3.feed11.Id}) db3.MarkItemsRead(model.MarkFilter{FeedID: &scope3.feed11.Id})
have = getItemGuids(db3.ListItems(model.ItemFilter{Status: &read}, 10, false, false)) have := getItemGuids(db3.ListItems(model.ItemFilter{Status: &read}, 10, false, false))
want = []string{ want := []string{
"item111", "item112", "item122", "item111", "item112", "item122",
"item211", "item012", "item211", "item012",
} }
@@ -414,8 +429,6 @@ func TestDeleteOldItems(t *testing.T) {
func TestCreateItemsLastArrived(t *testing.T) { func TestCreateItemsLastArrived(t *testing.T) {
dbtest(t, func(t *testing.T, db storage.Storage) { dbtest(t, func(t *testing.T, db storage.Storage) {
synctest.Test(t, func(t *testing.T) { synctest.Test(t, func(t *testing.T) {
db := testDB()
defer db.db.Close()
feed := db.CreateFeed(model.CreateFeedParams{Title: "test feed", FeedLink: "http://example.com/feed"}) feed := db.CreateFeed(model.CreateFeedParams{Title: "test feed", FeedLink: "http://example.com/feed"})
item := model.Item{ item := model.Item{