rails/activesupport/test/notifications/evented_notification_test.rb
Eric Saxby 6fe36ba585 Evented notifications take priority over Timed notifications
In cases where a notification subscriber includes methods to support
both Evented and Timed events, Evented should take priority over Timed.
This allows subscribers to be backwards compatible (older Rails only
allows Timed events) while defaulting to newer behavior.
2012-08-11 17:39:20 -07:00

88 lines
2.3 KiB
Ruby

require 'abstract_unit'
module ActiveSupport
module Notifications
class EventedTest < ActiveSupport::TestCase
class Listener
attr_reader :events
def initialize
@events = []
end
def start(name, id, payload)
@events << [:start, name, id, payload]
end
def finish(name, id, payload)
@events << [:finish, name, id, payload]
end
end
class ListenerWithTimedSupport < Listener
def call(name, start, finish, id, payload)
@events << [:call, name, start, finish, id, payload]
end
end
def test_evented_listener
notifier = Fanout.new
listener = Listener.new
notifier.subscribe 'hi', listener
notifier.start 'hi', 1, {}
notifier.start 'hi', 2, {}
notifier.finish 'hi', 2, {}
notifier.finish 'hi', 1, {}
assert_equal 4, listener.events.length
assert_equal [
[:start, 'hi', 1, {}],
[:start, 'hi', 2, {}],
[:finish, 'hi', 2, {}],
[:finish, 'hi', 1, {}],
], listener.events
end
def test_evented_listener_no_events
notifier = Fanout.new
listener = Listener.new
notifier.subscribe 'hi', listener
notifier.start 'world', 1, {}
assert_equal 0, listener.events.length
end
def test_listen_to_everything
notifier = Fanout.new
listener = Listener.new
notifier.subscribe nil, listener
notifier.start 'hello', 1, {}
notifier.start 'world', 1, {}
notifier.finish 'world', 1, {}
notifier.finish 'hello', 1, {}
assert_equal 4, listener.events.length
assert_equal [
[:start, 'hello', 1, {}],
[:start, 'world', 1, {}],
[:finish, 'world', 1, {}],
[:finish, 'hello', 1, {}],
], listener.events
end
def test_evented_listener_priority
notifier = Fanout.new
listener = ListenerWithTimedSupport.new
notifier.subscribe 'hi', listener
notifier.start 'hi', 1, {}
notifier.finish 'hi', 1, {}
assert_equal [
[:start, 'hi', 1, {}],
[:finish, 'hi', 1, {}]
], listener.events
end
end
end
end