3
3
RSpec . describe Sentry ::Cron ::MonitorCheckIns do
4
4
before { perform_basic_setup }
5
5
6
+ shared_examples 'original_job' do
7
+ it 'does the work' do
8
+ expect ( job ) . to receive ( :work ) . with ( 1 , 42 , 99 ) . and_call_original
9
+ expect ( job . perform ( 1 ) ) . to eq ( 142 )
10
+ end
11
+
12
+ it 'does the work with args' do
13
+ expect ( job ) . to receive ( :work ) . with ( 1 , 43 , 100 ) . and_call_original
14
+ expect ( job . perform ( 1 , 43 , c : 100 ) ) . to eq ( 144 )
15
+ end
16
+ end
17
+
6
18
context 'without including mixin' do
7
19
before do
8
20
job_class = Class . new do
9
- def work ( a , b , c ) ; end
21
+ def work ( a , b , c ) ; a + b + c end
10
22
11
23
def perform ( a , b = 42 , c : 99 )
12
24
work ( a , b , c )
@@ -18,10 +30,7 @@ def perform(a, b = 42, c: 99)
18
30
19
31
let ( :job ) { Job . new }
20
32
21
- it 'does the work' do
22
- expect ( job ) . to receive ( :work ) . with ( 1 , 42 , 99 )
23
- job . perform ( 1 )
24
- end
33
+ it_behaves_like 'original_job'
25
34
26
35
it 'does not call capture_check_in' do
27
36
expect ( Sentry ) . not_to receive ( :capture_check_in )
@@ -37,7 +46,7 @@ def perform(a, b = 42, c: 99)
37
46
job_class = Class . new do
38
47
include mod
39
48
40
- def work ( a , b , c ) ; end
49
+ def work ( a , b , c ) ; a + b + c end
41
50
42
51
def perform ( a , b = 42 , c : 99 )
43
52
work ( a , b , c )
@@ -49,10 +58,7 @@ def perform(a, b = 42, c: 99)
49
58
50
59
let ( :job ) { Job . new }
51
60
52
- it 'does the work' do
53
- expect ( job ) . to receive ( :work ) . with ( 1 , 42 , 99 )
54
- job . perform ( 1 )
55
- end
61
+ it_behaves_like 'original_job'
56
62
57
63
it 'does not prepend the patch' do
58
64
expect ( Job . ancestors . first ) . not_to eq ( described_class ::Patch )
@@ -81,7 +87,7 @@ def perform(a, b = 42, c: 99)
81
87
82
88
sentry_monitor_check_ins
83
89
84
- def work ( a , b , c ) ; end
90
+ def work ( a , b , c ) ; a + b + c end
85
91
86
92
def perform ( a , b = 42 , c : 99 )
87
93
work ( a , b , c )
@@ -93,15 +99,55 @@ def perform(a, b = 42, c: 99)
93
99
94
100
let ( :job ) { Job . new }
95
101
96
- it 'does the work' do
97
- expect ( job ) . to receive ( :work ) . with ( 1 , 42 , 99 )
102
+ it_behaves_like 'original_job'
103
+
104
+ it 'prepends the patch' do
105
+ expect ( Job . ancestors . first ) . to eq ( described_class ::Patch )
106
+ end
107
+
108
+ it 'calls capture_check_in twice' do
109
+ expect ( Sentry ) . to receive ( :capture_check_in ) . with (
110
+ 'job' ,
111
+ :in_progress ,
112
+ hash_including ( monitor_config : nil )
113
+ ) . ordered . and_call_original
114
+
115
+ expect ( Sentry ) . to receive ( :capture_check_in ) . with (
116
+ 'job' ,
117
+ :ok ,
118
+ hash_including ( :check_in_id , monitor_config : nil , duration : 0 )
119
+ ) . ordered . and_call_original
120
+
98
121
job . perform ( 1 )
99
122
end
123
+ end
124
+
125
+ context 'patched perform with arity 0 with default options' do
126
+ before do
127
+ mod = described_class
128
+
129
+ job_class = Class . new do
130
+ include mod
131
+ sentry_monitor_check_ins
132
+
133
+ def work ; 42 end
134
+ def perform ; work end
135
+ end
136
+
137
+ stub_const ( 'Job' , job_class )
138
+ end
139
+
140
+ let ( :job ) { Job . new }
100
141
101
142
it 'prepends the patch' do
102
143
expect ( Job . ancestors . first ) . to eq ( described_class ::Patch )
103
144
end
104
145
146
+ it 'does the work' do
147
+ expect ( job ) . to receive ( :work ) . and_call_original
148
+ expect ( job . perform ) . to eq ( 42 )
149
+ end
150
+
105
151
it 'calls capture_check_in twice' do
106
152
expect ( Sentry ) . to receive ( :capture_check_in ) . with (
107
153
'job' ,
@@ -128,7 +174,7 @@ def perform(a, b = 42, c: 99)
128
174
129
175
sentry_monitor_check_ins
130
176
131
- def work ( a , b , c ) ; end
177
+ def work ( a , b , c ) ; a + b + c end
132
178
133
179
def perform ( a , b = 42 , c : 99 )
134
180
work ( a , b , c )
@@ -156,7 +202,7 @@ def perform(a, b = 42, c: 99)
156
202
157
203
sentry_monitor_check_ins slug : 'custom_slug' , monitor_config : conf
158
204
159
- def work ( a , b , c ) ; end
205
+ def work ( a , b , c ) ; a + b + c end
160
206
161
207
def perform ( a , b = 42 , c : 99 )
162
208
work ( a , b , c )
@@ -168,10 +214,7 @@ def perform(a, b = 42, c: 99)
168
214
169
215
let ( :job ) { Job . new }
170
216
171
- it 'does the work' do
172
- expect ( job ) . to receive ( :work ) . with ( 1 , 42 , 99 )
173
- job . perform ( 1 )
174
- end
217
+ it_behaves_like 'original_job'
175
218
176
219
it 'prepends the patch' do
177
220
expect ( Job . ancestors . first ) . to eq ( described_class ::Patch )
@@ -226,8 +269,13 @@ def perform(a, b = 42, c: 99)
226
269
let ( :job ) { Job . new }
227
270
228
271
it 'does the work' do
229
- expect ( job ) . to receive ( :work ) . with ( 1 , 42 , 99 )
230
- job . perform ( 1 )
272
+ expect ( job ) . to receive ( :work ) . with ( 1 , 42 , 99 ) . and_call_original
273
+ expect { job . perform ( 1 ) } . to raise_error ( ZeroDivisionError )
274
+ end
275
+
276
+ it 'does the work with args' do
277
+ expect ( job ) . to receive ( :work ) . with ( 1 , 43 , 100 ) . and_call_original
278
+ expect { job . perform ( 1 , 43 , c : 100 ) } . to raise_error ( ZeroDivisionError )
231
279
end
232
280
233
281
it 'prepends the patch' do
0 commit comments