From fe3ceabeed6bde67eb9c0e64b27e133a66e13d83 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Tue, 12 Jan 2010 17:48:09 +0100 Subject: Set up subscriber on initialization. --- railties/test/application/generators_test.rb | 2 +- railties/test/application/notifications_test.rb | 46 ++++++++++++++++++++++--- railties/test/subscriber_test.rb | 10 ++++++ 3 files changed, 52 insertions(+), 6 deletions(-) (limited to 'railties/test') diff --git a/railties/test/application/generators_test.rb b/railties/test/application/generators_test.rb index 0c858d6394..e1e51c318c 100644 --- a/railties/test/application/generators_test.rb +++ b/railties/test/application/generators_test.rb @@ -52,8 +52,8 @@ module ApplicationTests config.generators.test_framework :rspec RUBY - require "#{app_path}/config/environment" # Initialize the application + require "#{app_path}/config/environment" require "rails/generators" Rails::Generators.configure! diff --git a/railties/test/application/notifications_test.rb b/railties/test/application/notifications_test.rb index b57e829cca..1eb0777db8 100644 --- a/railties/test/application/notifications_test.rb +++ b/railties/test/application/notifications_test.rb @@ -12,28 +12,64 @@ module ApplicationTests end end + class MockLogger + def method_missing(*args) + @logged ||= [] + @logged << args.last + end + + def logged + @logged.compact.map { |l| l.to_s.strip } + end + end + class NotificationsTest < Test::Unit::TestCase include ActiveSupport::Testing::Isolation def setup build_app boot_rails + end + + def instrument(*args, &block) + ActiveSupport::Notifications.instrument(*args, &block) + end + + def wait + ActiveSupport::Notifications.notifier.wait + end + + test "new queue is set" do + # We don't want to load all frameworks, so remove them and clean up environments. + use_frameworks [] FileUtils.rm_rf("#{app_path}/config/environments") - require "active_support/notifications" - @events = [] add_to_config <<-RUBY config.notifications.notifier = ActiveSupport::Notifications::Notifier.new(ApplicationTests::MyQueue.new) RUBY - end - test "new queue is set" do - use_frameworks [] require "#{app_path}/config/environment" assert_raise RuntimeError do ActiveSupport::Notifications.publish('foo') end end + + test "rails subscribers are added" do + add_to_config <<-RUBY + config.colorize_logging = false + RUBY + + require "#{app_path}/config/environment" + + ActiveRecord::Base.logger = logger = MockLogger.new + + # Mimic an ActiveRecord notifications + instrument "active_record.sql", :name => "SQL", :sql => "SHOW tables" + wait + + assert_equal 1, logger.logged.size + assert_match /SHOW tables/, logger.logged.last + end end end diff --git a/railties/test/subscriber_test.rb b/railties/test/subscriber_test.rb index ada40e2d2b..0d8793abab 100644 --- a/railties/test/subscriber_test.rb +++ b/railties/test/subscriber_test.rb @@ -22,7 +22,10 @@ ActiveSupport::Notifications.subscribe do |*args| end class MySubscriber < Rails::Subscriber + attr_reader :event + def some_event(event) + @event = event info event.name end @@ -85,6 +88,13 @@ class SubscriberTest < ActiveSupport::TestCase assert_equal %w(my_subscriber.some_event), @logger.logged(:info) end + def test_event_is_an_active_support_notifications_event + Rails::Subscriber.add :my_subscriber, @subscriber + instrument "my_subscriber.some_event" + wait + assert_kind_of ActiveSupport::Notifications::Event, @subscriber.event + end + def test_does_not_send_the_event_if_it_doesnt_match_the_class Rails::Subscriber.add :my_subscriber, @subscriber instrument "my_subscriber.unknown_event" -- cgit v1.2.3