49 lines
1.5 KiB
Ruby
49 lines
1.5 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'spec_helper'
|
|
|
|
RSpec.describe Gitlab::SidekiqMiddleware::DuplicateJobs::Strategies::UntilExecuted do
|
|
it_behaves_like 'deduplicating jobs when scheduling', :until_executed do
|
|
describe '#perform' do
|
|
let(:proc) { -> {} }
|
|
|
|
before do
|
|
allow(fake_duplicate_job).to receive(:latest_wal_locations).and_return( {} )
|
|
allow(fake_duplicate_job).to receive(:scheduled?) { false }
|
|
allow(fake_duplicate_job).to receive(:options) { {} }
|
|
allow(fake_duplicate_job).to receive(:should_reschedule?) { false }
|
|
end
|
|
|
|
it 'deletes the lock after executing' do
|
|
expect(proc).to receive(:call).ordered
|
|
expect(fake_duplicate_job).to receive(:delete!).ordered
|
|
|
|
strategy.perform({}) do
|
|
proc.call
|
|
end
|
|
end
|
|
|
|
it 'does not reschedule the job even if deduplication happened' do
|
|
expect(fake_duplicate_job).to receive(:delete!)
|
|
expect(fake_duplicate_job).not_to receive(:reschedule)
|
|
|
|
strategy.perform({}) do
|
|
proc.call
|
|
end
|
|
end
|
|
|
|
context 'when job is reschedulable' do
|
|
it 'reschedules the job if deduplication happened' do
|
|
allow(fake_duplicate_job).to receive(:should_reschedule?) { true }
|
|
|
|
expect(fake_duplicate_job).to receive(:delete!)
|
|
expect(fake_duplicate_job).to receive(:reschedule).once
|
|
|
|
strategy.perform({}) do
|
|
proc.call
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|