fix: harden exploration data flow

This commit is contained in:
2026-07-23 23:29:14 +08:00
parent 400d768ecf
commit bfcfd8d32e
7 changed files with 163 additions and 24 deletions

View File

@@ -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")