blob: ab9d14ad7293a78305bae8bf9f1951308035a754 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
# 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 'deletes the lock even if an error occurs' do
expect(fake_duplicate_job).not_to receive(:scheduled?)
expect(fake_duplicate_job).to receive(:delete!).once
perform_strategy_with_error
end
it 'does not reschedule the job even if deduplication happened' do
expect(fake_duplicate_job).to receive(:delete!).once
expect(fake_duplicate_job).not_to receive(:reschedule)
strategy.perform({}) do
proc.call
end
end
context 'when job is reschedulable' do
before do
allow(fake_duplicate_job).to receive(:should_reschedule?) { true }
end
it 'reschedules the job if deduplication happened' do
expect(fake_duplicate_job).to receive(:delete!).once
expect(fake_duplicate_job).to receive(:reschedule).once
strategy.perform({}) do
proc.call
end
end
it 'does not reschedule the job if an error occurs' do
expect(fake_duplicate_job).to receive(:delete!).once
expect(fake_duplicate_job).not_to receive(:reschedule)
perform_strategy_with_error
end
end
def perform_strategy_with_error
expect do
strategy.perform({}) do
raise 'expected error'
end
end.to raise_error(RuntimeError, 'expected error')
end
end
end
end
|