@@ -411,6 +411,61 @@ def with_test_queuefactory(ctx, ack=true, msg=nil, nowork=false)
411411 w . do_work ( header , nil , "msg" , handler )
412412 end
413413
414+ describe 'middleware' do
415+ let ( :middleware ) do
416+ Class . new do
417+ def initialize ( app , *args )
418+ @app = app
419+ end
420+
421+ def call ( deserialized_msg , delivery_info , metadata , handler )
422+ @app . call ( deserialized_msg , delivery_info , metadata , handler )
423+ end
424+ end
425+ end
426+
427+ let ( :worker ) do
428+ Class . new do
429+ include Sneakers ::Worker
430+ from_queue 'defaults' , ack : false
431+
432+ def work_with_params ( msg , delivery_info , metadata )
433+ msg
434+ end
435+ end
436+ end
437+
438+ before do
439+ Sneakers . middleware . use ( middleware , 'args' )
440+
441+ @delivery_info = Object . new
442+ @metadata = Object . new
443+ stub ( @metadata ) . []( :content_type ) { 'some/fake' }
444+ @message = Object . new
445+ @handler = Object . new
446+ end
447+
448+ after do
449+ Sneakers . middleware . delete ( middleware )
450+ end
451+
452+ it 'should process job and call #work_with_params/#work' do
453+ w = worker . new ( @queue , TestPool . new )
454+ mock ( w ) . work_with_params ( @message , @delivery_info , @metadata ) . once
455+
456+ w . do_work ( @delivery_info , @metadata , @message , @handler )
457+ end
458+
459+ it "should call registered middleware" do
460+ mock . proxy ( middleware ) . new ( instance_of ( Proc ) , 'args' ) . once do |res |
461+ mock . proxy ( res ) . call ( @message , @delivery_info , @metadata , @handler ) . once
462+ end
463+
464+ w = worker . new ( @queue , TestPool . new )
465+ w . do_work ( @delivery_info , @metadata , @message , @handler )
466+ end
467+ end
468+
414469 describe "with ack" do
415470 before do
416471 @delivery_info = Object . new
0 commit comments