offline-twitter/pkg/persistence/compound_queries_test.go

104 lines
3.0 KiB
Go

package persistence_test
import (
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"gitlab.com/offline-twitter/twitter_offline_engine/pkg/persistence"
. "gitlab.com/offline-twitter/twitter_offline_engine/pkg/scraper"
)
// A feed should load
func TestBuildUserFeed(t *testing.T) {
require := require.New(t)
assert := assert.New(t)
profile, err := persistence.LoadProfile("../../sample_data/profile")
require.NoError(err)
feed, err := profile.GetUserFeed(358545917, 2, TimestampFromUnix(0))
require.NoError(err)
assert.Len(feed.Retweets, 2)
_, is_ok := feed.Retweets[1490135787144237058]
assert.True(is_ok)
_, is_ok = feed.Retweets[1490119308692766723]
assert.True(is_ok)
assert.Len(feed.Tweets, 2)
_, is_ok = feed.Tweets[1490120332484972549]
assert.True(is_ok)
_, is_ok = feed.Tweets[1490116725395927042]
assert.True(is_ok)
assert.Len(feed.Users, 2)
_, is_ok = feed.Users[358545917]
assert.True(is_ok)
_, is_ok = feed.Users[18812728]
assert.True(is_ok)
require.Len(feed.Items, 2)
assert.Equal(feed.Items[0].TweetID, TweetID(1490120332484972549))
assert.Equal(feed.Items[0].RetweetID, TweetID(1490135787144237058))
assert.Equal(feed.Items[1].TweetID, TweetID(1490116725395927042))
assert.Equal(feed.Items[1].RetweetID, TweetID(1490119308692766723))
assert.Equal(feed.BottomTimestamp(), TimestampFromUnix(1644107102))
}
// Should load a feed in the middle (i.e., after some timestamp)
func TestBuildUserFeedPage2(t *testing.T) {
require := require.New(t)
assert := assert.New(t)
profile, err := persistence.LoadProfile("../../sample_data/profile")
require.NoError(err)
feed, err := profile.GetUserFeed(358545917, 2, TimestampFromUnix(1644107102))
require.NoError(err)
assert.Len(feed.Retweets, 1)
_, is_ok := feed.Retweets[1490100255987171332]
assert.True(is_ok)
assert.Len(feed.Tweets, 2)
_, is_ok = feed.Tweets[1489944024278523906]
assert.True(is_ok)
_, is_ok = feed.Tweets[1453461248142495744]
assert.True(is_ok)
assert.Len(feed.Users, 2)
_, is_ok = feed.Users[358545917]
assert.True(is_ok)
_, is_ok = feed.Users[96906231]
assert.True(is_ok)
require.Len(feed.Items, 2)
assert.Equal(feed.Items[0].TweetID, TweetID(1489944024278523906))
assert.Equal(feed.Items[0].RetweetID, TweetID(1490100255987171332))
assert.Equal(feed.Items[1].TweetID, TweetID(1453461248142495744))
assert.Equal(feed.Items[1].RetweetID, TweetID(0))
assert.Equal(feed.BottomTimestamp(), TimestampFromUnix(1635367140))
}
// When the end of the feed is reached, an "End of feed" error should be raised
func TestBuildUserFeedEnd(t *testing.T) {
require := require.New(t)
assert := assert.New(t)
profile, err := persistence.LoadProfile("../../sample_data/profile")
require.NoError(err)
feed, err := profile.GetUserFeed(358545917, 2, TimestampFromUnix(1)) // Won't be anything after "1"
require.Error(err)
require.ErrorIs(err, persistence.ErrEndOfFeed)
assert.Len(feed.Retweets, 0)
assert.Len(feed.Tweets, 0)
assert.Len(feed.Users, 0)
require.Len(feed.Items, 0)
}