mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
6fe36ba585
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.
87 lines
2.3 KiB
Ruby
87 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
|