From 6db7d014dca9a2954ea7b5cd110a48e3d84673bf Mon Sep 17 00:00:00 2001 From: tobi <31960611+tsmethurst@users.noreply.github.com> Date: Mon, 8 Apr 2024 11:51:51 +0200 Subject: [PATCH] [bugfix] Ensure side effects for local -> local follows get processed (#2820) --- internal/processing/account/follow.go | 2 +- internal/processing/account/follow_test.go | 36 ++++++++++++++++++++++ 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/internal/processing/account/follow.go b/internal/processing/account/follow.go index 8006f8d79..7f28bb2c0 100644 --- a/internal/processing/account/follow.go +++ b/internal/processing/account/follow.go @@ -114,7 +114,7 @@ func(columns ...string) error { return p.state.DB.UpdateFollowRequest(ctx, follo err = gtserror.Newf("error accepting follow request for local unlocked account: %w", err) return nil, gtserror.NewErrorInternalError(err) } - } else if targetAccount.IsRemote() { + } else { // Otherwise we leave the follow request as it is, // and we handle the rest of the process async. p.state.Workers.EnqueueClientAPI(ctx, messages.FromClientAPI{ diff --git a/internal/processing/account/follow_test.go b/internal/processing/account/follow_test.go index ed6b62304..c269dc710 100644 --- a/internal/processing/account/follow_test.go +++ b/internal/processing/account/follow_test.go @@ -20,9 +20,12 @@ import ( "context" "testing" + "time" "github.com/stretchr/testify/suite" + "github.com/superseriousbusiness/gotosocial/internal/ap" apimodel "github.com/superseriousbusiness/gotosocial/internal/api/model" + "github.com/superseriousbusiness/gotosocial/internal/messages" "github.com/superseriousbusiness/gotosocial/internal/util" ) @@ -130,6 +133,39 @@ func (suite *FollowTestSuite) TestUpdateExistingFollowSetNothing() { suite.False(relationship.Notifying) } +func (suite *FollowTestSuite) TestFollowRequestLocal() { + ctx := context.Background() + requestingAccount := suite.testAccounts["admin_account"] + targetAccount := suite.testAccounts["local_account_2"] + + // Have admin follow request turtle. + _, err := suite.accountProcessor.FollowCreate( + ctx, + requestingAccount, + &apimodel.AccountFollowRequest{ + ID: targetAccount.ID, + Reblogs: util.Ptr(true), + Notify: util.Ptr(false), + }) + if err != nil { + suite.FailNow(err.Error()) + } + + // There should be a message going to the worker. + var cMsg messages.FromClientAPI + select { + case cMsg = <-suite.fromClientAPIChan: + // No problem. + case <-time.After(5 * time.Second): + suite.FailNow("timed out waiting for message") + } + + suite.Equal(ap.ActivityCreate, cMsg.APActivityType) + suite.Equal(ap.ActivityFollow, cMsg.APObjectType) + suite.Equal(requestingAccount.ID, cMsg.OriginAccount.ID) + suite.Equal(targetAccount.ID, cMsg.TargetAccount.ID) +} + func TestFollowTestS(t *testing.T) { suite.Run(t, new(FollowTestSuite)) }