fix: harden exploration data flow
This commit is contained in:
@@ -189,6 +189,50 @@ func TestSyncSourcesCollectsMultipleSourcesForOneOwner(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestStoreFeedItemsDeduplicatesAndRefreshesMetadata(t *testing.T) {
|
||||
database := newDatasetTestDatabase(t)
|
||||
user := createDatasetTestUser(t, database, "refresh-feed-owner@example.com")
|
||||
source := models.SaDatasetSource{
|
||||
OwnerID: user.ID, Name: "Refresh feed", Kind: "rss",
|
||||
URL: "https://example.com/feeds/main.xml", Enabled: true,
|
||||
}
|
||||
require.NoError(t, database.Create(&source).Error)
|
||||
|
||||
inserted, err := storeFeedItems(database, source, []FeedItem{{
|
||||
ExternalID: "stable-item", Title: "Old title", Summary: "Old summary",
|
||||
URL: "/articles/1",
|
||||
}})
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, 1, inserted)
|
||||
|
||||
var stored models.SaDatasetItem
|
||||
require.NoError(t, database.Where("source_id = ?", source.ID).First(&stored).Error)
|
||||
require.NoError(t, database.Model(&stored).Updates(map[string]any{
|
||||
"status": "read", "starred": true,
|
||||
}).Error)
|
||||
|
||||
inserted, err = storeFeedItems(database, source, []FeedItem{{
|
||||
ExternalID: "stable-item", Title: "Updated title", Content: "Updated content",
|
||||
URL: "/articles/1", ImageURL: "../images/cover.jpg",
|
||||
}})
|
||||
require.NoError(t, err)
|
||||
require.Zero(t, inserted)
|
||||
|
||||
require.NoError(t, database.First(&stored, stored.ID).Error)
|
||||
require.Equal(t, "Updated title", stored.Title)
|
||||
require.Equal(t, "Old summary", stored.Summary)
|
||||
require.Equal(t, "Updated content", stored.Content)
|
||||
require.Equal(t, "https://example.com/articles/1", stored.URL)
|
||||
require.Equal(t, "https://example.com/images/cover.jpg", stored.ImageURL)
|
||||
require.Equal(t, "read", stored.Status)
|
||||
require.True(t, stored.Starred)
|
||||
var count int64
|
||||
require.NoError(t, database.Model(&models.SaDatasetItem{}).
|
||||
Where("source_id = ?", source.ID).
|
||||
Count(&count).Error)
|
||||
require.Equal(t, int64(1), count)
|
||||
}
|
||||
|
||||
func TestSyncSourcesRejectsOverlap(t *testing.T) {
|
||||
database := newDatasetTestDatabase(t)
|
||||
user := createDatasetTestUser(t, database, "queued-feed-owner@example.com")
|
||||
|
||||
Reference in New Issue
Block a user