Skip to content

Commit

Permalink
[bugfix] Ensure side effects for local -> local follows get processed (
Browse files Browse the repository at this point in the history
  • Loading branch information
tsmethurst committed Apr 8, 2024
1 parent 85bc140 commit 6db7d01
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 1 deletion.
2 changes: 1 addition & 1 deletion internal/processing/account/follow.go
Expand Up @@ -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{
Expand Down
36 changes: 36 additions & 0 deletions internal/processing/account/follow_test.go
Expand Up @@ -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"
)

Expand Down Expand Up @@ -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))
}

0 comments on commit 6db7d01

Please sign in to comment.