After remote follow worker specs (#3098)
* Add specs for the after remote follow workers * Refactor the after remote follow workers
This commit is contained in:
		
							parent
							
								
									4cc8ddabe5
								
							
						
					
					
						commit
						8ec8410651
					
				| 
						 | 
				
			
			@ -5,15 +5,27 @@ class AfterRemoteFollowRequestWorker
 | 
			
		|||
 | 
			
		||||
  sidekiq_options queue: 'pull', retry: 5
 | 
			
		||||
 | 
			
		||||
  attr_reader :follow_request
 | 
			
		||||
 | 
			
		||||
  def perform(follow_request_id)
 | 
			
		||||
    follow_request  = FollowRequest.find(follow_request_id)
 | 
			
		||||
    updated_account = FetchRemoteAccountService.new.call(follow_request.target_account.remote_url)
 | 
			
		||||
 | 
			
		||||
    return if updated_account.nil? || updated_account.locked?
 | 
			
		||||
 | 
			
		||||
    follow_request.destroy
 | 
			
		||||
    FollowService.new.call(follow_request.account, updated_account.acct)
 | 
			
		||||
    @follow_request = FollowRequest.find(follow_request_id)
 | 
			
		||||
    process_follow_service if processing_required?
 | 
			
		||||
  rescue ActiveRecord::RecordNotFound
 | 
			
		||||
    true
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  private
 | 
			
		||||
 | 
			
		||||
  def process_follow_service
 | 
			
		||||
    follow_request.destroy
 | 
			
		||||
    FollowService.new.call(follow_request.account, updated_account.acct)
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def processing_required?
 | 
			
		||||
    !updated_account.nil? && !updated_account.locked?
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def updated_account
 | 
			
		||||
    @_updated_account ||= FetchRemoteAccountService.new.call(follow_request.target_account.remote_url)
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,15 +5,27 @@ class AfterRemoteFollowWorker
 | 
			
		|||
 | 
			
		||||
  sidekiq_options queue: 'pull', retry: 5
 | 
			
		||||
 | 
			
		||||
  attr_reader :follow
 | 
			
		||||
 | 
			
		||||
  def perform(follow_id)
 | 
			
		||||
    follow          = Follow.find(follow_id)
 | 
			
		||||
    updated_account = FetchRemoteAccountService.new.call(follow.target_account.remote_url)
 | 
			
		||||
 | 
			
		||||
    return if updated_account.nil? || !updated_account.locked?
 | 
			
		||||
 | 
			
		||||
    follow.destroy
 | 
			
		||||
    FollowService.new.call(follow.account, updated_account.acct)
 | 
			
		||||
    @follow = Follow.find(follow_id)
 | 
			
		||||
    process_follow_service if processing_required?
 | 
			
		||||
  rescue ActiveRecord::RecordNotFound
 | 
			
		||||
    true
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  private
 | 
			
		||||
 | 
			
		||||
  def process_follow_service
 | 
			
		||||
    follow.destroy
 | 
			
		||||
    FollowService.new.call(follow.account, updated_account.acct)
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def updated_account
 | 
			
		||||
    @_updated_account ||= FetchRemoteAccountService.new.call(follow.target_account.remote_url)
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def processing_required?
 | 
			
		||||
    !updated_account.nil? && updated_account.locked?
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,59 @@
 | 
			
		|||
# frozen_string_literal: true
 | 
			
		||||
 | 
			
		||||
require 'rails_helper'
 | 
			
		||||
 | 
			
		||||
describe AfterRemoteFollowRequestWorker do
 | 
			
		||||
  subject { described_class.new }
 | 
			
		||||
  let(:follow_request) { Fabricate(:follow_request) }
 | 
			
		||||
  describe 'perform' do
 | 
			
		||||
    context 'when the follow_request does not exist' do
 | 
			
		||||
      it 'catches a raise and returns true' do
 | 
			
		||||
        allow(FollowService).to receive(:new)
 | 
			
		||||
        result = subject.perform('aaa')
 | 
			
		||||
 | 
			
		||||
        expect(result).to eq(true)
 | 
			
		||||
        expect(FollowService).not_to have_received(:new)
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    context 'when the account cannot be updated' do
 | 
			
		||||
      it 'returns nil and does not call service when account is nil' do
 | 
			
		||||
        allow(FollowService).to receive(:new)
 | 
			
		||||
        service = double(call: nil)
 | 
			
		||||
        allow(FetchRemoteAccountService).to receive(:new).and_return(service)
 | 
			
		||||
 | 
			
		||||
        result = subject.perform(follow_request.id)
 | 
			
		||||
 | 
			
		||||
        expect(result).to be_nil
 | 
			
		||||
        expect(FollowService).not_to have_received(:new)
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      it 'returns nil and does not call service when account is locked' do
 | 
			
		||||
        allow(FollowService).to receive(:new)
 | 
			
		||||
        service = double(call: double(locked?: true))
 | 
			
		||||
        allow(FetchRemoteAccountService).to receive(:new).and_return(service)
 | 
			
		||||
 | 
			
		||||
        result = subject.perform(follow_request.id)
 | 
			
		||||
 | 
			
		||||
        expect(result).to be_nil
 | 
			
		||||
        expect(FollowService).not_to have_received(:new)
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    context 'when the account is updated' do
 | 
			
		||||
      it 'calls the follow service and destroys the follow' do
 | 
			
		||||
        follow_service = double(call: nil)
 | 
			
		||||
        allow(FollowService).to receive(:new).and_return(follow_service)
 | 
			
		||||
        account = Fabricate(:account, locked: false)
 | 
			
		||||
        service = double(call: account)
 | 
			
		||||
        allow(FetchRemoteAccountService).to receive(:new).and_return(service)
 | 
			
		||||
 | 
			
		||||
        result = subject.perform(follow_request.id)
 | 
			
		||||
 | 
			
		||||
        expect(result).to be_nil
 | 
			
		||||
        expect(follow_service).to have_received(:call).with(follow_request.account, account.acct)
 | 
			
		||||
        expect { follow_request.reload }.to raise_error(ActiveRecord::RecordNotFound)
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,59 @@
 | 
			
		|||
# frozen_string_literal: true
 | 
			
		||||
 | 
			
		||||
require 'rails_helper'
 | 
			
		||||
 | 
			
		||||
describe AfterRemoteFollowWorker do
 | 
			
		||||
  subject { described_class.new }
 | 
			
		||||
  let(:follow) { Fabricate(:follow) }
 | 
			
		||||
  describe 'perform' do
 | 
			
		||||
    context 'when the follow does not exist' do
 | 
			
		||||
      it 'catches a raise and returns true' do
 | 
			
		||||
        allow(FollowService).to receive(:new)
 | 
			
		||||
        result = subject.perform('aaa')
 | 
			
		||||
 | 
			
		||||
        expect(result).to eq(true)
 | 
			
		||||
        expect(FollowService).not_to have_received(:new)
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    context 'when the account cannot be updated' do
 | 
			
		||||
      it 'returns nil and does not call service when account is nil' do
 | 
			
		||||
        allow(FollowService).to receive(:new)
 | 
			
		||||
        service = double(call: nil)
 | 
			
		||||
        allow(FetchRemoteAccountService).to receive(:new).and_return(service)
 | 
			
		||||
 | 
			
		||||
        result = subject.perform(follow.id)
 | 
			
		||||
 | 
			
		||||
        expect(result).to be_nil
 | 
			
		||||
        expect(FollowService).not_to have_received(:new)
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      it 'returns nil and does not call service when account is not locked' do
 | 
			
		||||
        allow(FollowService).to receive(:new)
 | 
			
		||||
        service = double(call: double(locked?: false))
 | 
			
		||||
        allow(FetchRemoteAccountService).to receive(:new).and_return(service)
 | 
			
		||||
 | 
			
		||||
        result = subject.perform(follow.id)
 | 
			
		||||
 | 
			
		||||
        expect(result).to be_nil
 | 
			
		||||
        expect(FollowService).not_to have_received(:new)
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    context 'when the account is updated' do
 | 
			
		||||
      it 'calls the follow service and destroys the follow' do
 | 
			
		||||
        follow_service = double(call: nil)
 | 
			
		||||
        allow(FollowService).to receive(:new).and_return(follow_service)
 | 
			
		||||
        account = Fabricate(:account, locked: true)
 | 
			
		||||
        service = double(call: account)
 | 
			
		||||
        allow(FetchRemoteAccountService).to receive(:new).and_return(service)
 | 
			
		||||
 | 
			
		||||
        result = subject.perform(follow.id)
 | 
			
		||||
 | 
			
		||||
        expect(result).to be_nil
 | 
			
		||||
        expect(follow_service).to have_received(:call).with(follow.account, account.acct)
 | 
			
		||||
        expect { follow.reload }.to raise_error(ActiveRecord::RecordNotFound)
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
		Loading…
	
		Reference in New Issue