Fix RefollowWorker not keeping show_reblogs setting (#12707)
* Fix RefollowWorker not keeping show_reblogs setting * Fix RefollowWorker
This commit is contained in:
		| @@ -7,15 +7,18 @@ class RefollowWorker | ||||
|  | ||||
|   def perform(target_account_id) | ||||
|     target_account = Account.find(target_account_id) | ||||
|     return unless target_account.protocol == :activitypub | ||||
|     return unless target_account.activitypub? | ||||
|  | ||||
|     target_account.passive_relationships.where(account: Account.where(domain: nil)).includes(:account).reorder(nil).find_each do |follow| | ||||
|       reblogs = follow.show_reblogs? | ||||
|  | ||||
|     target_account.followers.where(domain: nil).reorder(nil).find_each do |follower| | ||||
|       # Locally unfollow remote account | ||||
|       follower = follow.account | ||||
|       follower.unfollow!(target_account) | ||||
|  | ||||
|       # Schedule re-follow | ||||
|       begin | ||||
|         FollowService.new.call(follower, target_account) | ||||
|         FollowService.new.call(follower, target_account, reblogs: reblogs) | ||||
|       rescue Mastodon::NotPermittedError, ActiveRecord::RecordNotFound, Mastodon::UnexpectedResponseError, HTTP::Error, OpenSSL::SSL::SSLError | ||||
|         next | ||||
|       end | ||||
|   | ||||
							
								
								
									
										30
									
								
								spec/workers/refollow_worker_spec.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								spec/workers/refollow_worker_spec.rb
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,30 @@ | ||||
| # frozen_string_literal: true | ||||
|  | ||||
| require 'rails_helper' | ||||
|  | ||||
| describe RefollowWorker do | ||||
|   subject { described_class.new } | ||||
|   let(:account) { Fabricate(:account, domain: 'example.org', protocol: :activitypub) } | ||||
|   let(:alice)   { Fabricate(:account, domain: nil, username: 'alice') } | ||||
|   let(:bob)     { Fabricate(:account, domain: nil, username: 'bob') } | ||||
|  | ||||
|   describe 'perform' do | ||||
|     let(:service) { double } | ||||
|  | ||||
|     before do | ||||
|       allow(FollowService).to receive(:new).and_return(service) | ||||
|       allow(service).to receive(:call) | ||||
|  | ||||
|       alice.follow!(account, reblogs: true) | ||||
|       bob.follow!(account, reblogs: false) | ||||
|     end | ||||
|  | ||||
|     it 'calls FollowService for local followers' do | ||||
|       result = subject.perform(account.id) | ||||
|  | ||||
|       expect(result).to be_nil | ||||
|       expect(service).to have_received(:call).with(alice, account, reblogs: true) | ||||
|       expect(service).to have_received(:call).with(bob, account, reblogs: false) | ||||
|     end | ||||
|   end | ||||
| end | ||||
		Reference in New Issue
	
	Block a user