Worker specs coverage increase (#32541)

pull/2889/head
Matt Jankowski 2024-10-23 03:50:20 -04:00 committed by GitHub
parent bd0c826a3d
commit d1b20ea8f7
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
8 changed files with 186 additions and 15 deletions

View File

@ -0,0 +1,7 @@
# frozen_string_literal: true
Fabricator(:account_conversation) do
account
conversation
status_ids { [Fabricate(:status).id] }
end

View File

@ -7,9 +7,7 @@ RSpec.describe AccountRefreshWorker do
let(:service) { instance_double(ResolveAccountService, call: true) }
describe '#perform' do
before do
allow(ResolveAccountService).to receive(:new).and_return(service)
end
before { stub_service }
context 'when account does not exist' do
it 'returns immediately without processing' do
@ -48,5 +46,11 @@ RSpec.describe AccountRefreshWorker do
(Account::BACKGROUND_REFRESH_INTERVAL + 3.days).ago
end
end
def stub_service
allow(ResolveAccountService)
.to receive(:new)
.and_return(service)
end
end
end

View File

@ -0,0 +1,33 @@
# frozen_string_literal: true
require 'rails_helper'
RSpec.describe ActivityPub::FollowersSynchronizationWorker do
let(:worker) { described_class.new }
let(:service) { instance_double(ActivityPub::SynchronizeFollowersService, call: true) }
describe '#perform' do
before { stub_service }
let(:account) { Fabricate(:account, domain: 'host.example') }
let(:url) { 'https://sync.url' }
it 'sends the status to the service' do
worker.perform(account.id, url)
expect(service).to have_received(:call).with(account, url)
end
it 'returns nil for non-existent record' do
result = worker.perform(123_123_123, url)
expect(result).to be(true)
end
end
def stub_service
allow(ActivityPub::SynchronizeFollowersService)
.to receive(:new)
.and_return(service)
end
end

View File

@ -6,8 +6,30 @@ RSpec.describe PushConversationWorker do
let(:worker) { described_class.new }
describe 'perform' do
it 'runs without error for missing record' do
expect { worker.perform(nil) }.to_not raise_error
context 'with missing values' do
it 'runs without error' do
expect { worker.perform(nil) }
.to_not raise_error
end
end
context 'with valid records' do
let(:account_conversation) { Fabricate :account_conversation }
before { allow(redis).to receive(:publish) }
it 'pushes message to timeline' do
expect { worker.perform(account_conversation.id) }
.to_not raise_error
expect(redis)
.to have_received(:publish)
.with(redis_key, anything)
end
def redis_key
"timeline:direct:#{account_conversation.account_id}"
end
end
end
end

View File

@ -6,11 +6,31 @@ RSpec.describe PushUpdateWorker do
let(:worker) { described_class.new }
describe 'perform' do
it 'runs without error for missing record' do
account_id = nil
status_id = nil
context 'with missing values' do
it 'runs without error' do
expect { worker.perform(nil, nil) }
.to_not raise_error
end
end
expect { worker.perform(account_id, status_id) }.to_not raise_error
context 'with valid records' do
let(:account) { Fabricate :account }
let(:status) { Fabricate :status }
before { allow(redis).to receive(:publish) }
it 'pushes message to timeline' do
expect { worker.perform(account.id, status.id) }
.to_not raise_error
expect(redis)
.to have_received(:publish)
.with(redis_key, anything)
end
def redis_key
"timeline:#{account.id}"
end
end
end
end

View File

@ -0,0 +1,38 @@
# frozen_string_literal: true
require 'rails_helper'
RSpec.describe RemoteAccountRefreshWorker do
let(:worker) { described_class.new }
let(:service) { instance_double(ActivityPub::FetchRemoteAccountService, call: true) }
describe '#perform' do
before { stub_service }
let(:account) { Fabricate(:account, domain: 'host.example') }
it 'sends the status to the service' do
worker.perform(account.id)
expect(service).to have_received(:call).with(account.uri)
end
it 'returns nil for non-existent record' do
result = worker.perform(123_123_123)
expect(result).to be_nil
end
it 'returns nil for a local record' do
account = Fabricate :account, domain: nil
result = worker.perform(account)
expect(result).to be_nil
end
def stub_service
allow(ActivityPub::FetchRemoteAccountService)
.to receive(:new)
.and_return(service)
end
end
end

View File

@ -4,12 +4,35 @@ require 'rails_helper'
RSpec.describe RemoveFeaturedTagWorker do
let(:worker) { described_class.new }
let(:service) { instance_double(RemoveFeaturedTagService, call: true) }
describe 'perform' do
it 'runs without error for missing record' do
account_id = nil
featured_tag_id = nil
expect { worker.perform(account_id, featured_tag_id) }.to_not raise_error
context 'with missing values' do
it 'runs without error' do
expect { worker.perform(nil, nil) }
.to_not raise_error
end
end
context 'with real records' do
before { stub_service }
let(:account) { Fabricate :account }
let(:featured_tag) { Fabricate :featured_tag }
it 'calls the service for processing' do
worker.perform(account.id, featured_tag.id)
expect(service)
.to have_received(:call)
.with(be_an(Account), be_an(FeaturedTag))
end
def stub_service
allow(RemoveFeaturedTagService)
.to receive(:new)
.and_return(service)
end
end
end
end

View File

@ -4,10 +4,34 @@ require 'rails_helper'
RSpec.describe ResolveAccountWorker do
let(:worker) { described_class.new }
let(:service) { instance_double(ResolveAccountService, call: true) }
describe 'perform' do
it 'runs without error for missing record' do
expect { worker.perform(nil) }.to_not raise_error
context 'with missing values' do
it 'runs without error' do
expect { worker.perform(nil) }
.to_not raise_error
end
end
context 'with a URI' do
before { stub_service }
let(:uri) { 'https://host/path/value' }
it 'initiates account resolution' do
worker.perform(uri)
expect(service)
.to have_received(:call)
.with(uri)
end
def stub_service
allow(ResolveAccountService)
.to receive(:new)
.and_return(service)
end
end
end
end