spec/receiver_spec.rb in routemaster-client-0.0.2 vs spec/receiver_spec.rb in routemaster-client-0.0.3

- old
+ new

@@ -1,23 +1,22 @@ require 'spec_helper' require 'spec/support/rack_test' require 'routemaster/receiver' describe Routemaster::Receiver do - let(:handler) { double 'handler', on_events: nil } + let(:handler) { double 'handler', on_events: nil, on_events_received: true } let(:app) { described_class.new(fake_app, options) } def perform post '/events', payload, 'CONTENT_TYPE' => 'application/json' end let(:options) do { path: '/events', - uuid: 'demo', - handler: handler + uuid: 'demo' } end class FakeApp def call(env) @@ -57,17 +56,53 @@ it 'delegates to the next middlex for non-POST' do get '/events' expect(last_response.status).to eq(501) end - it 'calls the handler when receiving an avent' do - authorize 'demo', 'x' - expect(handler).to receive(:on_events).exactly(:once) - perform + context 'with the deprecated :handler option' do + let(:options) {{ + path: '/events', + uuid: 'demo', + handler: handler + }} + + it 'calls the handler when receiving an avent' do + authorize 'demo', 'x' + expect(handler).to receive(:on_events).exactly(:once) + perform + end + + it 'calls the handler multiple times' do + authorize 'demo', 'x' + expect(handler).to receive(:on_events).exactly(3).times + 3.times { perform } + end + + it 'warns about deprecation' do + expect_any_instance_of(described_class).to receive(:warn).with(/deprecated/) + app + end end - it 'calls the handler multiple times' do - authorize 'demo', 'x' - expect(handler).to receive(:on_events).exactly(3).times - 3.times { perform } + context 'with a listener' do + let(:handler) { double } + before { Wisper.subscribe(handler, scope: 'Routemaster::Receiver', prefix: true) } + after { Wisper::GlobalListeners.clear } + + it 'broadcasts :events_received' do + authorize 'demo', 'x' + + expect(handler).to receive(:on_events_received).exactly(:once) + # TODO: + # we'll be able to say this with a more recent wisper (and skip the + # handler): + # expect(app).to publish_event(:events_received) + perform + end + + it 'can broadcast multiple times' do + authorize 'demo', 'x' + expect(handler).to receive(:on_events_received).exactly(3).times + 3.times { perform } + end end end