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)
 | 
					  def perform(target_account_id)
 | 
				
			||||||
    target_account = Account.find(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
 | 
					      # Locally unfollow remote account
 | 
				
			||||||
 | 
					      follower = follow.account
 | 
				
			||||||
      follower.unfollow!(target_account)
 | 
					      follower.unfollow!(target_account)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      # Schedule re-follow
 | 
					      # Schedule re-follow
 | 
				
			||||||
      begin
 | 
					      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
 | 
					      rescue Mastodon::NotPermittedError, ActiveRecord::RecordNotFound, Mastodon::UnexpectedResponseError, HTTP::Error, OpenSSL::SSL::SSLError
 | 
				
			||||||
        next
 | 
					        next
 | 
				
			||||||
      end
 | 
					      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