summaryrefslogtreecommitdiff
path: root/internal/processing/timeline/public_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/processing/timeline/public_test.go')
-rw-r--r--internal/processing/timeline/public_test.go91
1 files changed, 91 insertions, 0 deletions
diff --git a/internal/processing/timeline/public_test.go b/internal/processing/timeline/public_test.go
index f14fee1b9..6b01c9849 100644
--- a/internal/processing/timeline/public_test.go
+++ b/internal/processing/timeline/public_test.go
@@ -22,6 +22,10 @@ import (
"testing"
"github.com/stretchr/testify/suite"
+ apimodel "github.com/superseriousbusiness/gotosocial/internal/api/model"
+ "github.com/superseriousbusiness/gotosocial/internal/gtsmodel"
+ "github.com/superseriousbusiness/gotosocial/internal/id"
+ "github.com/superseriousbusiness/gotosocial/internal/util"
)
type PublicTestSuite struct {
@@ -91,6 +95,93 @@ func (suite *PublicTestSuite) TestPublicTimelineGetNotEmpty() {
suite.Equal(`http://localhost:8080/api/v1/timelines/public?limit=1&min_id=01HE7XJ1CG84TBKH5V9XKBVGF5&local=false`, resp.PrevLink)
}
+// A timeline containing a status hidden due to filtering should return other statuses with no error.
+func (suite *PublicTestSuite) TestPublicTimelineGetHideFiltered() {
+ var (
+ ctx = context.Background()
+ requester = suite.testAccounts["local_account_1"]
+ maxID = ""
+ sinceID = ""
+ minID = "01F8MHAAY43M6RJ473VQFCVH36" // 1 before filteredStatus
+ limit = 10
+ local = false
+ filteredStatus = suite.testStatuses["admin_account_status_2"]
+ filteredStatusFound = false
+ filterID = id.NewULID()
+ filter = &gtsmodel.Filter{
+ ID: filterID,
+ AccountID: requester.ID,
+ Title: "timeline filtering test",
+ Action: gtsmodel.FilterActionHide,
+ Statuses: []*gtsmodel.FilterStatus{
+ {
+ ID: id.NewULID(),
+ AccountID: requester.ID,
+ FilterID: filterID,
+ StatusID: filteredStatus.ID,
+ },
+ },
+ ContextHome: util.Ptr(false),
+ ContextNotifications: util.Ptr(false),
+ ContextPublic: util.Ptr(true),
+ ContextThread: util.Ptr(false),
+ ContextAccount: util.Ptr(false),
+ }
+ )
+
+ // Fetch the timeline to make sure the status we're going to filter is in that section of it.
+ resp, errWithCode := suite.timeline.PublicTimelineGet(
+ ctx,
+ requester,
+ maxID,
+ sinceID,
+ minID,
+ limit,
+ local,
+ )
+ suite.NoError(errWithCode)
+ for _, item := range resp.Items {
+ if item.(*apimodel.Status).ID == filteredStatus.ID {
+ filteredStatusFound = true
+ break
+ }
+ }
+ if !filteredStatusFound {
+ suite.FailNow("precondition failed: status we would filter isn't present in unfiltered timeline")
+ }
+ // The public timeline has no prepared status cache and doesn't need to be pruned,
+ // as in the home timeline version of this test.
+
+ // Create a filter to hide one status on the timeline.
+ if err := suite.db.PutFilter(ctx, filter); err != nil {
+ suite.FailNow(err.Error())
+ }
+
+ // Fetch the timeline again with the filter in place.
+ resp, errWithCode = suite.timeline.PublicTimelineGet(
+ ctx,
+ requester,
+ maxID,
+ sinceID,
+ minID,
+ limit,
+ local,
+ )
+
+ // We should have some statuses even though one status was filtered out.
+ suite.NoError(errWithCode)
+ suite.NotEmpty(resp.Items)
+ // The filtered status should not be there.
+ filteredStatusFound = false
+ for _, item := range resp.Items {
+ if item.(*apimodel.Status).ID == filteredStatus.ID {
+ filteredStatusFound = true
+ break
+ }
+ }
+ suite.False(filteredStatusFound)
+}
+
func TestPublicTestSuite(t *testing.T) {
suite.Run(t, new(PublicTestSuite))
}