[bugfix] Fix single author threads not appearing in home timeline (#1679)

This commit is contained in:
tobi 2023-04-08 12:56:55 +02:00 committed by GitHub
parent fb41d2d48f
commit f28ed21343
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 50 additions and 2 deletions

View file

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

View file

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