diff --git a/app/workers/move_worker.rb b/app/workers/move_worker.rb index c3167f9ca5f..3b429928eaa 100644 --- a/app/workers/move_worker.rb +++ b/app/workers/move_worker.rb @@ -8,7 +8,9 @@ class MoveWorker @target_account = Account.find(target_account_id) if @target_account.local? && @source_account.local? - rewrite_follows! + nb_moved = rewrite_follows! + @source_account.update_count!(:followers_count, -nb_moved) + @target_account.update_count!(:followers_count, nb_moved) else queue_follow_unfollows! end diff --git a/spec/workers/move_worker_spec.rb b/spec/workers/move_worker_spec.rb index be02d31924d..3ca6aaf4de4 100644 --- a/spec/workers/move_worker_spec.rb +++ b/spec/workers/move_worker_spec.rb @@ -74,6 +74,18 @@ describe MoveWorker do end end + shared_examples 'followers count handling' do + it 'updates the source account followers count' do + subject.perform(source_account.id, target_account.id) + expect(source_account.reload.followers_count).to eq(source_account.passive_relationships.count) + end + + it 'updates the target account followers count' do + subject.perform(source_account.id, target_account.id) + expect(target_account.reload.followers_count).to eq(target_account.passive_relationships.count) + end + end + context 'both accounts are distant' do describe 'perform' do it 'calls UnfollowFollowWorker' do @@ -83,6 +95,7 @@ describe MoveWorker do include_examples 'user note handling' include_examples 'block and mute handling' + include_examples 'followers count handling' end end @@ -97,6 +110,7 @@ describe MoveWorker do include_examples 'user note handling' include_examples 'block and mute handling' + include_examples 'followers count handling' end end @@ -112,6 +126,7 @@ describe MoveWorker do include_examples 'user note handling' include_examples 'block and mute handling' + include_examples 'followers count handling' it 'does not fail when a local user is already following both accounts' do double_follower = Fabricate(:account)