39 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			39 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Ruby
		
	
	
	
# frozen_string_literal: true
 | 
						|
 | 
						|
require 'rails_helper'
 | 
						|
 | 
						|
RSpec.describe MentionResolveWorker do
 | 
						|
  let(:status_id) { -42 }
 | 
						|
  let(:uri) { 'https://example.com/users/unknown' }
 | 
						|
 | 
						|
  describe '#perform' do
 | 
						|
    subject { described_class.new.perform(status_id, uri, {}) }
 | 
						|
 | 
						|
    context 'with a non-existent status' do
 | 
						|
      it 'returns nil' do
 | 
						|
        expect(subject).to be_nil
 | 
						|
      end
 | 
						|
    end
 | 
						|
 | 
						|
    context 'with a valid user' do
 | 
						|
      let(:status) { Fabricate(:status) }
 | 
						|
      let(:status_id) { status.id }
 | 
						|
 | 
						|
      let(:service_double) { instance_double(ActivityPub::FetchRemoteAccountService) }
 | 
						|
 | 
						|
      before do
 | 
						|
        allow(ActivityPub::FetchRemoteAccountService).to receive(:new).and_return(service_double)
 | 
						|
 | 
						|
        allow(service_double).to receive(:call).with(uri, anything) { Fabricate(:account, domain: 'example.com', uri: uri) }
 | 
						|
      end
 | 
						|
 | 
						|
      it 'resolves the account and adds a new mention', :aggregate_failures do
 | 
						|
        expect { subject }
 | 
						|
          .to change { status.reload.mentions }.from([]).to(a_collection_including(having_attributes(account: having_attributes(uri: uri), silent: false)))
 | 
						|
 | 
						|
        expect(service_double).to have_received(:call).once
 | 
						|
      end
 | 
						|
    end
 | 
						|
  end
 | 
						|
end
 |