Skip to content

Commit e5c6880

Browse files
Add tests for ActiveSupportEventReporter integration
Adds tests for the hook and integration, structured to handle both Rails 8.1+ (where ActiveSupport::EventReporter is available) and earlier versions (where it's not).
1 parent 249a28d commit e5c6880

File tree

2 files changed

+77
-0
lines changed

2 files changed

+77
-0
lines changed
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
describe Appsignal::Hooks::ActiveSupportEventReporterHook do
2+
begin
3+
require "active_support/event_reporter"
4+
rescue LoadError
5+
end
6+
7+
describe "#dependencies_present?" do
8+
subject { described_class.new.dependencies_present? }
9+
10+
if defined?(::ActiveSupport::EventReporter)
11+
context "when ActiveSupport::EventReporter is present" do
12+
it { is_expected.to be_truthy }
13+
end
14+
else
15+
context "when ActiveSupport::EventReporter is not present" do
16+
it { is_expected.to be_falsy }
17+
end
18+
end
19+
end
20+
21+
if defined?(::ActiveSupport::EventReporter)
22+
describe "#install" do
23+
before do
24+
# Mock Rails.event
25+
stub_const("MockEventReporter", Class.new do
26+
attr_reader :subscribers
27+
28+
def initialize
29+
@subscribers = []
30+
end
31+
32+
def subscribe(subscriber)
33+
@subscribers << subscriber
34+
end
35+
end)
36+
37+
mock_event_reporter = MockEventReporter.new
38+
39+
allow(Rails).to receive(:event).and_return(mock_event_reporter)
40+
end
41+
42+
it "subscribes the ActiveSupportEventReporter::Subscriber to Rails.event" do
43+
event_reporter = Rails.event
44+
expect(event_reporter.subscribers).to be_empty
45+
46+
described_class.new.install
47+
48+
expect(event_reporter.subscribers.length).to eq(1)
49+
expect(event_reporter.subscribers.first).to be_a(Appsignal::Integrations::ActiveSupportEventReporter::Subscriber)
50+
end
51+
end
52+
end
53+
end
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
require "appsignal/integrations/active_support_event_reporter"
2+
3+
describe Appsignal::Integrations::ActiveSupportEventReporter::Subscriber do
4+
let(:subscriber) { described_class.new }
5+
let(:logger) { instance_double(Appsignal::Logger) }
6+
7+
before do
8+
start_agent
9+
allow(Appsignal::Logger).to receive(:new).with("rails_events").and_return(logger)
10+
end
11+
12+
describe "#emit" do
13+
it "logs the event name and payload" do
14+
event = {
15+
:name => "user.created",
16+
:payload => { :id => 123, :email => "user@example.com" },
17+
}
18+
19+
expect(logger).to receive(:info).with("user.created", { :id => 123, :email => "user@example.com" })
20+
21+
subscriber.emit(event)
22+
end
23+
end
24+
end

0 commit comments

Comments
 (0)