Skip to content

Commit

Permalink
[bugfix] Fix single author threads not appearing in home timeline (#1679
Browse files Browse the repository at this point in the history
)
  • Loading branch information
tsmethurst authored Apr 8, 2023
1 parent fb41d2d commit f28ed21
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 2 deletions.
4 changes: 2 additions & 2 deletions internal/visibility/home_timeline.go
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ func (f *Filter) isStatusHomeTimelineable(ctx context.Context, owner *gtsmodel.A

var (
next *gtsmodel.Status
oneAuthor bool
oneAuthor = true // Assume one author until proven otherwise.
included bool
converstn bool
)
Expand Down Expand Up @@ -149,7 +149,7 @@ func (f *Filter) isStatusHomeTimelineable(ctx context.Context, owner *gtsmodel.A
}

if oneAuthor {
// Check if this is a single-author status thread.
// Check if this continues to be a single-author thread.
oneAuthor = (next.AccountID == status.AccountID)
}
}
Expand Down
48 changes: 48 additions & 0 deletions internal/visibility/home_timeline_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,54 @@ func (suite *StatusStatusHomeTimelineableTestSuite) TestStatusNotTooNewTimelinea
suite.True(timelineable)
}

func (suite *StatusStatusHomeTimelineableTestSuite) TestThread() {
ctx := context.Background()

threadParentAccount := suite.testAccounts["local_account_1"]
timelineOwnerAccount := suite.testAccounts["local_account_2"]
originalStatus := suite.testStatuses["local_account_1_status_1"]

// this status should be hometimelineable for local_account_2
originalStatusTimelineable, err := suite.filter.StatusHomeTimelineable(ctx, timelineOwnerAccount, originalStatus)
suite.NoError(err)
suite.True(originalStatusTimelineable)

// now a reply from the original status author to their own status
firstReplyStatus := &gtsmodel.Status{
ID: "01G395ESAYPK9161QSQEZKATJN",
URI: "http://localhost:8080/users/the_mighty_zork/statuses/01G395ESAYPK9161QSQEZKATJN",
URL: "http://localhost:8080/@the_mighty_zork/statuses/01G395ESAYPK9161QSQEZKATJN",
Content: "nbnbdy expects dog",
CreatedAt: testrig.TimeMustParse("2021-09-20T12:41:37+02:00"),
UpdatedAt: testrig.TimeMustParse("2021-09-20T12:41:37+02:00"),
Local: testrig.FalseBool(),
AccountURI: "http://localhost:8080/users/the_mighty_zork",
AccountID: threadParentAccount.ID,
InReplyToID: originalStatus.ID,
InReplyToAccountID: threadParentAccount.ID,
InReplyToURI: originalStatus.URI,
BoostOfID: "",
ContentWarning: "",
Visibility: gtsmodel.VisibilityFollowersOnly,
Sensitive: testrig.FalseBool(),
Language: "en",
CreatedWithApplicationID: "",
Federated: testrig.TrueBool(),
Boostable: testrig.TrueBool(),
Replyable: testrig.TrueBool(),
Likeable: testrig.TrueBool(),
ActivityStreamsType: ap.ObjectNote,
}
if err := suite.db.PutStatus(ctx, firstReplyStatus); err != nil {
suite.FailNow(err.Error())
}

// this status should also be hometimelineable for local_account_2
firstReplyStatusTimelineable, err := suite.filter.StatusHomeTimelineable(ctx, timelineOwnerAccount, firstReplyStatus)
suite.NoError(err)
suite.True(firstReplyStatusTimelineable)
}

func (suite *StatusStatusHomeTimelineableTestSuite) TestChainReplyFollowersOnly() {
ctx := context.Background()

Expand Down

0 comments on commit f28ed21

Please sign in to comment.