45 lines
1.3 KiB
Ruby
45 lines
1.3 KiB
Ruby
|
|
# frozen_string_literal: true
|
||
|
|
|
||
|
|
require 'rspec/expectations'
|
||
|
|
|
||
|
|
# A matcher for checking whether a given item has been added to a particular
|
||
|
|
# indexing queue.
|
||
|
|
RSpec::Matchers.define :add_to_reindex_queue do |item, queue|
|
||
|
|
match do |given_proc|
|
||
|
|
return false unless given_proc.is_a?(Proc)
|
||
|
|
|
||
|
|
queue_key = IndexQueue.get_key(item.class, queue)
|
||
|
|
|
||
|
|
# Stub sadd so that we can track whether it was ever called with the right
|
||
|
|
# arguments:
|
||
|
|
allow(IndexQueue::REDIS).to receive(:sadd).and_call_original
|
||
|
|
given_proc.call
|
||
|
|
expect(IndexQueue::REDIS).to have_received(:sadd).with(
|
||
|
|
queue_key, eq(item.id).or(include(item.id))
|
||
|
|
).at_least(:once)
|
||
|
|
end
|
||
|
|
|
||
|
|
failure_message do |given_proc|
|
||
|
|
if given_proc.is_a?(Proc)
|
||
|
|
"expected #{queue} reindexing queue to include #{item.inspect}"
|
||
|
|
else
|
||
|
|
"expected #{given_proc} to be a block"
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
failure_message_when_negated do |given_proc|
|
||
|
|
if given_proc.is_a?(Proc)
|
||
|
|
"expected #{queue} reindexing queue not to include #{item.inspect}"
|
||
|
|
else
|
||
|
|
"expected #{given_proc} to be a block"
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
supports_block_expectations do
|
||
|
|
true
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
# Define a negated matcher to allow for composition.
|
||
|
|
RSpec::Matchers.define_negated_matcher :not_add_to_reindex_queue, :add_to_reindex_queue
|