forked from cybrespace/mastodon
		
	Fix RefollowWorker not keeping show_reblogs setting (#12707)
* Fix RefollowWorker not keeping show_reblogs setting * Fix RefollowWorker
This commit is contained in:
		
							parent
							
								
									09d54d1f62
								
							
						
					
					
						commit
						aa138ea350
					
				
					 2 changed files with 36 additions and 3 deletions
				
			
		| 
						 | 
				
			
			@ -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
 | 
			
		||||
		Loading…
	
	Add table
		
		Reference in a new issue