@@ -184,6 +184,172 @@ def self.perform(foo, bar)
184184 subject . _perform ( 42 , true )
185185 end
186186 end
187+
188+ context "with callbacks defined" do
189+ subject do
190+ Class . new ( QueueClassicPlus ::Base ) do
191+ @queue = :test
192+
193+ before_enqueue :before_enqueue_method
194+ after_enqueue :after_enqueue_method
195+
196+ before_perform :before_perform_method
197+ after_perform :after_perform_method
198+
199+ def self . before_enqueue_method ( *_args ) ; end ;
200+ def self . after_enqueue_method ( *_args ) ; end ;
201+ def self . before_perform_method ( *_args ) ; end ;
202+ def self . after_perform_method ( *_args ) ; end ;
203+
204+ def self . perform ( *_args ) ; end ;
205+ end
206+ end
207+
208+ it "passes enqueue arguments to callbacks" do
209+ expect ( subject ) . to receive ( :before_enqueue_method ) . with ( "enqueue_argument" ) . once
210+ expect ( subject ) . to receive ( :after_enqueue_method ) . with ( "enqueue_argument" ) . once
211+
212+ subject . do ( "enqueue_argument" )
213+ end
214+
215+ it "passes perform arguments to callbacks" do
216+ expect ( subject ) . to receive ( :before_perform_method ) . with ( "perform_argument" ) . once
217+ expect ( subject ) . to receive ( :after_perform_method ) . with ( "perform_argument" ) . once
218+
219+ subject . perform ( "perform_argument" )
220+ end
221+
222+ context "when enqueued" do
223+ it "calls the enqueue callback methods" do
224+ expect ( subject ) . to receive ( :before_enqueue_method ) . once
225+ expect ( subject ) . to receive ( :after_enqueue_method ) . once
226+
227+ subject . do
228+ end
229+
230+ it "does not call the perform callbacks" do
231+ expect ( subject ) . to_not receive ( :before_perform_method )
232+ expect ( subject ) . to_not receive ( :after_perform_method )
233+
234+ subject . do
235+ end
236+ end
237+
238+ context "when perform" do
239+ it "calls the perform callback methods" do
240+ expect ( subject ) . to receive ( :before_perform_method ) . once
241+ expect ( subject ) . to receive ( :after_perform_method ) . once
242+
243+ subject . perform
244+ end
245+
246+ it "does not call the enqueue callbacks" do
247+ expect ( subject ) . to_not receive ( :before_enqueue_method )
248+ expect ( subject ) . to_not receive ( :after_enqueue_method )
249+
250+ subject . perform
251+ end
252+
253+ context "when perform fails" do
254+ subject do
255+ Class . new ( QueueClassicPlus ::Base ) do
256+ @queue = :test
257+
258+ before_perform :before_perform_method
259+ after_perform :after_perform_method
260+
261+ def self . before_perform_method ( *_args ) ; end ;
262+ def self . after_perform_method ( *_args ) ; end ;
263+
264+ def self . perform ( *_args )
265+ raise StandardError
266+ end
267+ end
268+ end
269+
270+ it "does not call after callbacks" do
271+ expect ( subject ) . to receive ( :before_perform_method ) . once
272+ expect ( subject ) . to_not receive ( :after_perform_method )
273+
274+ begin
275+ subject . perform
276+ rescue StandardError
277+ end
278+ end
279+ end
280+ end
281+
282+ context "when callback defined multiple times" do
283+ subject do
284+ Class . new ( QueueClassicPlus ::Base ) do
285+ @queue = :test
286+
287+ before_enqueue :before_enqueue_method_1
288+ before_enqueue :before_enqueue_method_2
289+ before_enqueue :before_enqueue_method_3
290+
291+ def self . before_enqueue_method_1 ( *_args ) ; end ;
292+ def self . before_enqueue_method_2 ( *_args ) ; end ;
293+ def self . before_enqueue_method_3 ( *_args ) ; end ;
294+
295+ def self . perform ( *_args ) ; end ;
296+ end
297+ end
298+
299+ it "calls each callback" do
300+ expect ( subject ) . to receive ( :before_enqueue_method_1 ) . once
301+ expect ( subject ) . to receive ( :before_enqueue_method_2 ) . once
302+ expect ( subject ) . to receive ( :before_enqueue_method_3 ) . once
303+
304+ subject . do
305+ end
306+ end
307+ end
308+
309+ context "with callback blocks defined" do
310+ subject do
311+ Class . new ( QueueClassicPlus ::Base ) do
312+ @queue = :test
313+ class_variable_set ( :@@block_result , [ ] )
314+
315+ before_enqueue do |*_args |
316+ class_variable_get ( :@@block_result ) . append ( "before_enqueue_block" )
317+ end
318+ after_enqueue do |*_args |
319+ class_variable_get ( :@@block_result ) . append ( "after_enqueue_block" )
320+ end
321+
322+ before_perform do |*_args |
323+ class_variable_get ( :@@block_result ) . append ( "before_perform_block" )
324+ end
325+ after_perform do |*_args |
326+ class_variable_get ( :@@block_result ) . append ( "after_perform_block" )
327+ end
328+
329+ def self . perform ; end ;
330+ end
331+ end
332+
333+ context "when enqueued" do
334+ it "calls the enqueue callback blocks" do
335+ subject . do
336+
337+ expect ( subject . class_variable_get ( :@@block_result ) ) . to eq (
338+ %w( before_enqueue_block after_enqueue_block )
339+ )
340+ end
341+ end
342+
343+ context "when perform" do
344+ it "calls the perform callback blocks" do
345+ subject . perform
346+
347+ expect ( subject . class_variable_get ( :@@block_result ) ) . to eq (
348+ %w( before_perform_block after_perform_block )
349+ )
350+ end
351+ end
352+ end
187353 end
188354
189355 describe ".librato_key" do
0 commit comments