diff --git a/internal/processing/account/follow.go b/internal/processing/account/follow.go index 8006f8d791..7f28bb2c0f 100644 --- a/internal/processing/account/follow.go +++ b/internal/processing/account/follow.go @@ -114,7 +114,7 @@ func (p *Processor) FollowCreate(ctx context.Context, requestingAccount *gtsmode 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 ed6b623045..c269dc7109 100644 --- a/internal/processing/account/follow_test.go +++ b/internal/processing/account/follow_test.go @@ -20,9 +20,12 @@ package account_test 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)) }