spec/adapter_spec.rb in sidekiq-bus-0.8.0 vs spec/adapter_spec.rb in sidekiq-bus-0.8.1

- old
+ new

@@ -13,21 +13,36 @@ it 'should be defaulting to Data from spec_helper' do expect(QueueBus.adapter.is_a?(adapter_under_test_class)).to eq(true) end describe '.setup_heartbeat!' do - context 'when already setup' do - before { QueueBus.heartbeat! } + let(:config) { spy('Sidekiq') } - it 'does not change schedule' do - expect { QueueBus.heartbeat! } - .not_to(change { Sidekiq.get_schedule('sidekiqbus_heartbeat') }) + around do |example| + begin + old = Sidekiq.options[:lifecycle_events][:startup] + Sidekiq.options[:lifecycle_events][:startup] = [] + example.run + ensure + Sidekiq.options[:lifecycle_events][:startup] = old end + end + before do + # This configuration must think it's running on the server. + allow(Sidekiq).to receive(:server?).and_return(true) + + # Turn on heartbeats + QueueBus.heartbeat! + + # Need to have the schedule loaded before we load anything new + Sidekiq::Scheduler.instance.load_schedule! + end + + shared_examples 'a scheduled heartbeat' do it 'has the schedule for every minute' do - expect(Sidekiq.get_schedule('sidekiqbus_heartbeat')['every']) - .to eq '1min' + expect(Sidekiq.get_schedule('sidekiqbus_heartbeat')['every']).to eq '1min' end it 'has scheduled the queue bus worker' do expect(Sidekiq.get_schedule('sidekiqbus_heartbeat')['class']) .to eq ::QueueBus::Worker.name @@ -42,13 +57,28 @@ expect(Sidekiq.get_schedule('sidekiqbus_heartbeat')['queue']) .to eq 'bus_incoming' end end - context 'when it does not exist' do - it 'sets the schedule' do - expect { QueueBus.heartbeat! } - .to(change { Sidekiq.get_schedule('sidekiqbus_heartbeat') }) + context 'when dynamic' do + before do + allow(Sidekiq::Scheduler.instance).to receive(:dynamic).and_return(true) + + # Simulate running startup events + Sidekiq.options[:lifecycle_events][:startup].each(&:call) end + + it_behaves_like 'a scheduled heartbeat' + end + + context 'when non-dynamic' do + before do + allow(Sidekiq::Scheduler.instance).to receive(:dynamic).and_return(false) + + # Simulate running startup events + Sidekiq.options[:lifecycle_events][:startup].each(&:call) + end + + it_behaves_like 'a scheduled heartbeat' end end end