1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
|
require 'abstract_unit'
require 'rails/subscriber/test_helper'
class MySubscriber < Rails::Subscriber
attr_reader :event
def some_event(event)
@event = event
info event.name
end
def foo(event)
debug "debug"
info "info"
warn "warn"
end
def bar(event)
info "#{color("cool", :red)}, #{color("isn't it?", :blue, true)}"
end
end
module SubscriberTest
def setup
super
@subscriber = MySubscriber.new
Rails::Subscriber.instance_variable_set(:@log_tailer, nil)
end
def teardown
super
Rails::Subscriber.subscribers.clear
Rails::Subscriber.instance_variable_set(:@log_tailer, nil)
end
def instrument(*args, &block)
ActiveSupport::Notifications.instrument(*args, &block)
end
def test_proxies_method_to_rails_logger
@subscriber.foo(nil)
assert_equal %w(debug), @logger.logged(:debug)
assert_equal %w(info), @logger.logged(:info)
assert_equal %w(warn), @logger.logged(:warn)
end
def test_set_color_for_messages
Rails::Subscriber.colorize_logging = true
@subscriber.bar(nil)
assert_equal "\e[31mcool\e[0m, \e[1m\e[34misn't it?\e[0m", @logger.logged(:info).last
end
def test_does_not_set_color_if_colorize_logging_is_set_to_false
@subscriber.bar(nil)
assert_equal "cool, isn't it?", @logger.logged(:info).last
end
def test_event_is_sent_to_the_registered_class
Rails::Subscriber.add :my_subscriber, @subscriber
instrument "my_subscriber.some_event"
wait
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"
wait
# If we get here, it means that NoMethodError was raised.
end
def test_does_not_send_the_event_if_logger_is_nil
Rails.logger = nil
@subscriber.expects(:some_event).never
Rails::Subscriber.add :my_subscriber, @subscriber
instrument "my_subscriber.some_event"
wait
end
def test_flushes_loggers
Rails::Subscriber.add :my_subscriber, @subscriber
Rails::Subscriber.flush_all!
assert_equal 1, @logger.flush_count
end
def test_flushes_loggers_when_action_dispatch_callback_is_received
Rails::Subscriber.add :my_subscriber, @subscriber
instrument "action_dispatch.callback"
wait
assert_equal 1, @logger.flush_count
end
def test_flushes_the_same_logger_just_once
Rails::Subscriber.add :my_subscriber, @subscriber
Rails::Subscriber.add :another, @subscriber
instrument "action_dispatch.callback"
wait
assert_equal 1, @logger.flush_count
end
def test_tails_logs_when_action_dispatch_callback_is_received
log_tailer = mock()
log_tailer.expects(:tail!)
Rails::Rack::LogTailer.expects(:new).with(nil, "log/development.log").returns(log_tailer)
Rails::Subscriber.tail_log = true
Rails::Subscriber.add :my_subscriber, @subscriber
instrument "action_dispatch.callback"
wait
ensure
Rails::Subscriber.tail_log = false
end
class SyncSubscriberTest < ActiveSupport::TestCase
include Rails::Subscriber::SyncTestHelper
include SubscriberTest
end
class AsyncSubscriberTest < ActiveSupport::TestCase
include Rails::Subscriber::AsyncTestHelper
include SubscriberTest
end
end
|