diff options
Diffstat (limited to 'internal/timeline/prune_test.go')
-rw-r--r-- | internal/timeline/prune_test.go | 123 |
1 files changed, 54 insertions, 69 deletions
diff --git a/internal/timeline/prune_test.go b/internal/timeline/prune_test.go index d70e1eb91..f9f3ccc51 100644 --- a/internal/timeline/prune_test.go +++ b/internal/timeline/prune_test.go @@ -19,98 +19,83 @@ package timeline_test import ( "context" - "sort" "testing" "github.com/stretchr/testify/suite" - "github.com/superseriousbusiness/gotosocial/internal/gtsmodel" - tlprocessor "github.com/superseriousbusiness/gotosocial/internal/processing/timeline" - "github.com/superseriousbusiness/gotosocial/internal/timeline" - "github.com/superseriousbusiness/gotosocial/internal/visibility" - "github.com/superseriousbusiness/gotosocial/testrig" ) type PruneTestSuite struct { TimelineStandardTestSuite } -func (suite *PruneTestSuite) SetupSuite() { - suite.testAccounts = testrig.NewTestAccounts() - suite.testStatuses = testrig.NewTestStatuses() -} - -func (suite *PruneTestSuite) SetupTest() { - suite.state.Caches.Init() - - testrig.InitTestLog() - testrig.InitTestConfig() - - suite.db = testrig.NewTestDB(&suite.state) - suite.tc = testrig.NewTestTypeConverter(suite.db) - suite.filter = visibility.NewFilter(&suite.state) - - testrig.StandardDBSetup(suite.db, nil) - - // let's take local_account_1 as the timeline owner - tl := timeline.NewTimeline( - context.Background(), - suite.testAccounts["local_account_1"].ID, - tlprocessor.HomeTimelineGrab(&suite.state), - tlprocessor.HomeTimelineFilter(&suite.state, suite.filter), - tlprocessor.HomeTimelineStatusPrepare(&suite.state, suite.tc), - tlprocessor.SkipInsert(), +func (suite *PruneTestSuite) TestPrune() { + var ( + ctx = context.Background() + testAccountID = suite.testAccounts["local_account_1"].ID + desiredPreparedItemsLength = 5 + desiredIndexedItemsLength = 5 ) - // put the status IDs in a determinate order since we can't trust a map to keep its order - statuses := []*gtsmodel.Status{} - for _, s := range suite.testStatuses { - statuses = append(statuses, s) - } - sort.Slice(statuses, func(i, j int) bool { - return statuses[i].ID > statuses[j].ID - }) - - // prepare the timeline by just shoving all test statuses in it -- let's not be fussy about who sees what - for _, s := range statuses { - _, err := tl.IndexAndPrepareOne(context.Background(), s.GetID(), s.BoostOfID, s.AccountID, s.BoostOfAccountID) - if err != nil { - suite.FailNow(err.Error()) - } - } - - suite.timeline = tl -} - -func (suite *PruneTestSuite) TearDownTest() { - testrig.StandardDBTeardown(suite.db) -} + suite.fillTimeline(testAccountID) -func (suite *PruneTestSuite) TestPrune() { - // prune down to 5 prepared + 5 indexed - suite.Equal(12, suite.timeline.Prune(5, 5)) - suite.Equal(5, suite.timeline.Len()) + pruned, err := suite.state.Timelines.Home.Prune(ctx, testAccountID, desiredPreparedItemsLength, desiredIndexedItemsLength) + suite.NoError(err) + suite.Equal(12, pruned) + suite.Equal(5, suite.state.Timelines.Home.GetIndexedLength(ctx, testAccountID)) } func (suite *PruneTestSuite) TestPruneTwice() { - // prune down to 5 prepared + 10 indexed - suite.Equal(12, suite.timeline.Prune(5, 10)) - suite.Equal(10, suite.timeline.Len()) + var ( + ctx = context.Background() + testAccountID = suite.testAccounts["local_account_1"].ID + desiredPreparedItemsLength = 5 + desiredIndexedItemsLength = 5 + ) + + suite.fillTimeline(testAccountID) + + pruned, err := suite.state.Timelines.Home.Prune(ctx, testAccountID, desiredPreparedItemsLength, desiredIndexedItemsLength) + suite.NoError(err) + suite.Equal(12, pruned) + suite.Equal(5, suite.state.Timelines.Home.GetIndexedLength(ctx, testAccountID)) // Prune same again, nothing should be pruned this time. - suite.Zero(suite.timeline.Prune(5, 10)) - suite.Equal(10, suite.timeline.Len()) + pruned, err = suite.state.Timelines.Home.Prune(ctx, testAccountID, desiredPreparedItemsLength, desiredIndexedItemsLength) + suite.NoError(err) + suite.Equal(0, pruned) + suite.Equal(5, suite.state.Timelines.Home.GetIndexedLength(ctx, testAccountID)) } func (suite *PruneTestSuite) TestPruneTo0() { - // prune down to 0 prepared + 0 indexed - suite.Equal(17, suite.timeline.Prune(0, 0)) - suite.Equal(0, suite.timeline.Len()) + var ( + ctx = context.Background() + testAccountID = suite.testAccounts["local_account_1"].ID + desiredPreparedItemsLength = 0 + desiredIndexedItemsLength = 0 + ) + + suite.fillTimeline(testAccountID) + + pruned, err := suite.state.Timelines.Home.Prune(ctx, testAccountID, desiredPreparedItemsLength, desiredIndexedItemsLength) + suite.NoError(err) + suite.Equal(17, pruned) + suite.Equal(0, suite.state.Timelines.Home.GetIndexedLength(ctx, testAccountID)) } func (suite *PruneTestSuite) TestPruneToInfinityAndBeyond() { - // prune to 99999, this should result in no entries being pruned - suite.Equal(0, suite.timeline.Prune(99999, 99999)) - suite.Equal(17, suite.timeline.Len()) + var ( + ctx = context.Background() + testAccountID = suite.testAccounts["local_account_1"].ID + desiredPreparedItemsLength = 9999999 + desiredIndexedItemsLength = 9999999 + ) + + suite.fillTimeline(testAccountID) + + pruned, err := suite.state.Timelines.Home.Prune(ctx, testAccountID, desiredPreparedItemsLength, desiredIndexedItemsLength) + suite.NoError(err) + suite.Equal(0, pruned) + suite.Equal(17, suite.state.Timelines.Home.GetIndexedLength(ctx, testAccountID)) } func TestPruneTestSuite(t *testing.T) { |