Improve tests involving push_bulk (#17508)

sidekiq-bulk's push_bulk can either accept arguments directly or run them
through a block.

Setting expectations on the result of evaluating the blocks allows testing
more code (the block itself) and the test is moved closer to the *interface*
of the tested code than its precise implementation.
signup-info-prompt
Claire 2022-02-10 19:42:45 +01:00 committed by GitHub
parent 3dc1e3cfc3
commit 2af03164cb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 26 additions and 31 deletions

View File

@ -34,9 +34,8 @@ RSpec.describe ActivityPub::FetchRepliesService, type: :service do
context 'when the payload is a Collection with inlined replies' do context 'when the payload is a Collection with inlined replies' do
context 'when passing the collection itself' do context 'when passing the collection itself' do
it 'spawns workers for up to 5 replies on the same server' do it 'spawns workers for up to 5 replies on the same server' do
allow(FetchReplyWorker).to receive(:push_bulk) expect(FetchReplyWorker).to receive(:push_bulk).with(['http://example.com/self-reply-1', 'http://example.com/self-reply-2', 'http://example.com/self-reply-3', 'http://example.com/self-reply-4', 'http://example.com/self-reply-5'])
subject.call(status, payload) subject.call(status, payload)
expect(FetchReplyWorker).to have_received(:push_bulk).with(['http://example.com/self-reply-1', 'http://example.com/self-reply-2', 'http://example.com/self-reply-3', 'http://example.com/self-reply-4', 'http://example.com/self-reply-5'])
end end
end end
@ -46,9 +45,8 @@ RSpec.describe ActivityPub::FetchRepliesService, type: :service do
end end
it 'spawns workers for up to 5 replies on the same server' do it 'spawns workers for up to 5 replies on the same server' do
allow(FetchReplyWorker).to receive(:push_bulk) expect(FetchReplyWorker).to receive(:push_bulk).with(['http://example.com/self-reply-1', 'http://example.com/self-reply-2', 'http://example.com/self-reply-3', 'http://example.com/self-reply-4', 'http://example.com/self-reply-5'])
subject.call(status, collection_uri) subject.call(status, collection_uri)
expect(FetchReplyWorker).to have_received(:push_bulk).with(['http://example.com/self-reply-1', 'http://example.com/self-reply-2', 'http://example.com/self-reply-3', 'http://example.com/self-reply-4', 'http://example.com/self-reply-5'])
end end
end end
end end
@ -65,9 +63,8 @@ RSpec.describe ActivityPub::FetchRepliesService, type: :service do
context 'when passing the collection itself' do context 'when passing the collection itself' do
it 'spawns workers for up to 5 replies on the same server' do it 'spawns workers for up to 5 replies on the same server' do
allow(FetchReplyWorker).to receive(:push_bulk) expect(FetchReplyWorker).to receive(:push_bulk).with(['http://example.com/self-reply-1', 'http://example.com/self-reply-2', 'http://example.com/self-reply-3', 'http://example.com/self-reply-4', 'http://example.com/self-reply-5'])
subject.call(status, payload) subject.call(status, payload)
expect(FetchReplyWorker).to have_received(:push_bulk).with(['http://example.com/self-reply-1', 'http://example.com/self-reply-2', 'http://example.com/self-reply-3', 'http://example.com/self-reply-4', 'http://example.com/self-reply-5'])
end end
end end
@ -77,9 +74,8 @@ RSpec.describe ActivityPub::FetchRepliesService, type: :service do
end end
it 'spawns workers for up to 5 replies on the same server' do it 'spawns workers for up to 5 replies on the same server' do
allow(FetchReplyWorker).to receive(:push_bulk) expect(FetchReplyWorker).to receive(:push_bulk).with(['http://example.com/self-reply-1', 'http://example.com/self-reply-2', 'http://example.com/self-reply-3', 'http://example.com/self-reply-4', 'http://example.com/self-reply-5'])
subject.call(status, collection_uri) subject.call(status, collection_uri)
expect(FetchReplyWorker).to have_received(:push_bulk).with(['http://example.com/self-reply-1', 'http://example.com/self-reply-2', 'http://example.com/self-reply-3', 'http://example.com/self-reply-4', 'http://example.com/self-reply-5'])
end end
end end
end end
@ -100,9 +96,8 @@ RSpec.describe ActivityPub::FetchRepliesService, type: :service do
context 'when passing the collection itself' do context 'when passing the collection itself' do
it 'spawns workers for up to 5 replies on the same server' do it 'spawns workers for up to 5 replies on the same server' do
allow(FetchReplyWorker).to receive(:push_bulk) expect(FetchReplyWorker).to receive(:push_bulk).with(['http://example.com/self-reply-1', 'http://example.com/self-reply-2', 'http://example.com/self-reply-3', 'http://example.com/self-reply-4', 'http://example.com/self-reply-5'])
subject.call(status, payload) subject.call(status, payload)
expect(FetchReplyWorker).to have_received(:push_bulk).with(['http://example.com/self-reply-1', 'http://example.com/self-reply-2', 'http://example.com/self-reply-3', 'http://example.com/self-reply-4', 'http://example.com/self-reply-5'])
end end
end end
@ -112,9 +107,8 @@ RSpec.describe ActivityPub::FetchRepliesService, type: :service do
end end
it 'spawns workers for up to 5 replies on the same server' do it 'spawns workers for up to 5 replies on the same server' do
allow(FetchReplyWorker).to receive(:push_bulk) expect(FetchReplyWorker).to receive(:push_bulk).with(['http://example.com/self-reply-1', 'http://example.com/self-reply-2', 'http://example.com/self-reply-3', 'http://example.com/self-reply-4', 'http://example.com/self-reply-5'])
subject.call(status, collection_uri) subject.call(status, collection_uri)
expect(FetchReplyWorker).to have_received(:push_bulk).with(['http://example.com/self-reply-1', 'http://example.com/self-reply-2', 'http://example.com/self-reply-3', 'http://example.com/self-reply-4', 'http://example.com/self-reply-5'])
end end
end end
end end

View File

@ -57,3 +57,10 @@ end
def json_str_to_hash(str) def json_str_to_hash(str)
JSON.parse(str, symbolize_names: true) JSON.parse(str, symbolize_names: true)
end end
def expect_push_bulk_to_match(klass, matcher)
expect(Sidekiq::Client).to receive(:push_bulk).with(hash_including({
"class" => klass,
"args" => matcher
}))
end

View File

@ -10,13 +10,12 @@ describe ActivityPub::DistributePollUpdateWorker do
describe '#perform' do describe '#perform' do
before do before do
allow(ActivityPub::DeliveryWorker).to receive(:push_bulk)
follower.follow!(account) follower.follow!(account)
end end
it 'delivers to followers' do it 'delivers to followers' do
expect_push_bulk_to_match(ActivityPub::DeliveryWorker, [[kind_of(String), account.id, 'http://example.com']])
subject.perform(status.id) subject.perform(status.id)
expect(ActivityPub::DeliveryWorker).to have_received(:push_bulk).with(['http://example.com'])
end end
end end
end end

View File

@ -8,7 +8,6 @@ describe ActivityPub::DistributionWorker do
describe '#perform' do describe '#perform' do
before do before do
allow(ActivityPub::DeliveryWorker).to receive(:push_bulk)
follower.follow!(status.account) follower.follow!(status.account)
end end
@ -18,8 +17,8 @@ describe ActivityPub::DistributionWorker do
end end
it 'delivers to followers' do it 'delivers to followers' do
expect_push_bulk_to_match(ActivityPub::DeliveryWorker, [[kind_of(String), status.account.id, 'http://example.com', anything]])
subject.perform(status.id) subject.perform(status.id)
expect(ActivityPub::DeliveryWorker).to have_received(:push_bulk).with(['http://example.com'])
end end
end end
@ -29,8 +28,8 @@ describe ActivityPub::DistributionWorker do
end end
it 'delivers to followers' do it 'delivers to followers' do
expect_push_bulk_to_match(ActivityPub::DeliveryWorker, [[kind_of(String), status.account.id, 'http://example.com', anything]])
subject.perform(status.id) subject.perform(status.id)
expect(ActivityPub::DeliveryWorker).to have_received(:push_bulk).with(['http://example.com'])
end end
end end
@ -43,8 +42,8 @@ describe ActivityPub::DistributionWorker do
end end
it 'delivers to mentioned accounts' do it 'delivers to mentioned accounts' do
expect_push_bulk_to_match(ActivityPub::DeliveryWorker, [[kind_of(String), status.account.id, 'https://foo.bar/inbox', anything]])
subject.perform(status.id) subject.perform(status.id)
expect(ActivityPub::DeliveryWorker).to have_received(:push_bulk).with(['https://foo.bar/inbox'])
end end
end end
end end

View File

@ -9,14 +9,16 @@ describe ActivityPub::MoveDistributionWorker do
describe '#perform' do describe '#perform' do
before do before do
allow(ActivityPub::DeliveryWorker).to receive(:push_bulk)
follower.follow!(migration.account) follower.follow!(migration.account)
blocker.block!(migration.account) blocker.block!(migration.account)
end end
it 'delivers to followers and known blockers' do it 'delivers to followers and known blockers' do
expect_push_bulk_to_match(ActivityPub::DeliveryWorker, [
[kind_of(String), migration.account.id, 'http://example.com'],
[kind_of(String), migration.account.id, 'http://example2.com']
])
subject.perform(migration.id) subject.perform(migration.id)
expect(ActivityPub::DeliveryWorker).to have_received(:push_bulk).with(['http://example.com', 'http://example2.com'])
end end
end end
end end

View File

@ -23,9 +23,7 @@ describe ActivityPub::StatusUpdateDistributionWorker do
end end
it 'delivers to followers' do it 'delivers to followers' do
expect(ActivityPub::DeliveryWorker).to receive(:push_bulk) do |items, &block| expect_push_bulk_to_match(ActivityPub::DeliveryWorker, [[kind_of(String), status.account.id, 'http://example.com', anything]])
expect(items.map(&block)).to match([[kind_of(String), status.account.id, 'http://example.com', anything]])
end
subject.perform(status.id) subject.perform(status.id)
end end
@ -37,9 +35,7 @@ describe ActivityPub::StatusUpdateDistributionWorker do
end end
it 'delivers to followers' do it 'delivers to followers' do
expect(ActivityPub::DeliveryWorker).to receive(:push_bulk) do |items, &block| expect_push_bulk_to_match(ActivityPub::DeliveryWorker, [[kind_of(String), status.account.id, 'http://example.com', anything]])
expect(items.map(&block)).to match([[kind_of(String), status.account.id, 'http://example.com', anything]])
end
subject.perform(status.id) subject.perform(status.id)
end end

View File

@ -8,13 +8,12 @@ describe ActivityPub::UpdateDistributionWorker do
describe '#perform' do describe '#perform' do
before do before do
allow(ActivityPub::DeliveryWorker).to receive(:push_bulk)
follower.follow!(account) follower.follow!(account)
end end
it 'delivers to followers' do it 'delivers to followers' do
expect_push_bulk_to_match(ActivityPub::DeliveryWorker, [[kind_of(String), account.id, 'http://example.com', anything]])
subject.perform(account.id) subject.perform(account.id)
expect(ActivityPub::DeliveryWorker).to have_received(:push_bulk).with(['http://example.com'])
end end
end end
end end

View File

@ -21,7 +21,6 @@ describe MoveWorker do
blocking_account.block!(source_account) blocking_account.block!(source_account)
muting_account.mute!(source_account) muting_account.mute!(source_account)
allow(UnfollowFollowWorker).to receive(:push_bulk)
allow(BlockService).to receive(:new).and_return(block_service) allow(BlockService).to receive(:new).and_return(block_service)
allow(block_service).to receive(:call) allow(block_service).to receive(:call)
end end
@ -78,8 +77,8 @@ describe MoveWorker do
context 'both accounts are distant' do context 'both accounts are distant' do
describe 'perform' do describe 'perform' do
it 'calls UnfollowFollowWorker' do it 'calls UnfollowFollowWorker' do
expect_push_bulk_to_match(UnfollowFollowWorker, [[local_follower.id, source_account.id, target_account.id, false]])
subject.perform(source_account.id, target_account.id) subject.perform(source_account.id, target_account.id)
expect(UnfollowFollowWorker).to have_received(:push_bulk).with([local_follower.id])
end end
include_examples 'user note handling' include_examples 'user note handling'
@ -92,8 +91,8 @@ describe MoveWorker do
describe 'perform' do describe 'perform' do
it 'calls UnfollowFollowWorker' do it 'calls UnfollowFollowWorker' do
expect_push_bulk_to_match(UnfollowFollowWorker, [[local_follower.id, source_account.id, target_account.id, true]])
subject.perform(source_account.id, target_account.id) subject.perform(source_account.id, target_account.id)
expect(UnfollowFollowWorker).to have_received(:push_bulk).with([local_follower.id])
end end
include_examples 'user note handling' include_examples 'user note handling'