appsignal 2.1.0.beta.1 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (74) hide show
  1. checksums.yaml +4 -4
  2. data/.rspec +2 -1
  3. data/CHANGELOG.md +5 -0
  4. data/README.md +14 -15
  5. data/appsignal.gemspec +1 -1
  6. data/lib/appsignal.rb +1 -1
  7. data/lib/appsignal/auth_check.rb +5 -2
  8. data/lib/appsignal/cli/demo.rb +1 -1
  9. data/lib/appsignal/cli/diagnose.rb +1 -1
  10. data/lib/appsignal/cli/install.rb +1 -1
  11. data/lib/appsignal/transaction.rb +2 -1
  12. data/lib/appsignal/version.rb +1 -1
  13. data/spec/lib/appsignal/auth_check_spec.rb +9 -10
  14. data/spec/lib/appsignal/capistrano2_spec.rb +6 -6
  15. data/spec/lib/appsignal/capistrano3_spec.rb +6 -6
  16. data/spec/lib/appsignal/cli/demo_spec.rb +1 -1
  17. data/spec/lib/appsignal/cli/diagnose_spec.rb +1 -1
  18. data/spec/lib/appsignal/cli/helpers_spec.rb +2 -2
  19. data/spec/lib/appsignal/cli/install_spec.rb +2 -2
  20. data/spec/lib/appsignal/cli_spec.rb +2 -2
  21. data/spec/lib/appsignal/config_spec.rb +24 -24
  22. data/spec/lib/appsignal/demo_spec.rb +4 -2
  23. data/spec/lib/appsignal/event_formatter/action_view/render_formatter_spec.rb +11 -7
  24. data/spec/lib/appsignal/event_formatter/active_record/instantiation_formatter_spec.rb +2 -2
  25. data/spec/lib/appsignal/event_formatter/active_record/sql_formatter_spec.rb +2 -2
  26. data/spec/lib/appsignal/event_formatter/elastic_search/search_formatter_spec.rb +1 -1
  27. data/spec/lib/appsignal/event_formatter/faraday/request_formatter_spec.rb +2 -2
  28. data/spec/lib/appsignal/event_formatter/moped/query_formatter_spec.rb +9 -9
  29. data/spec/lib/appsignal/event_formatter_spec.rb +17 -17
  30. data/spec/lib/appsignal/extension_spec.rb +7 -7
  31. data/spec/lib/appsignal/garbage_collection_profiler_spec.rb +0 -3
  32. data/spec/lib/appsignal/hooks/active_support_notifications_spec.rb +11 -3
  33. data/spec/lib/appsignal/hooks/celluloid_spec.rb +12 -4
  34. data/spec/lib/appsignal/hooks/data_mapper_spec.rb +12 -4
  35. data/spec/lib/appsignal/hooks/delayed_job_spec.rb +21 -13
  36. data/spec/lib/appsignal/hooks/mongo_ruby_driver_spec.rb +14 -6
  37. data/spec/lib/appsignal/hooks/net_http_spec.rb +11 -3
  38. data/spec/lib/appsignal/hooks/passenger_spec.rb +14 -6
  39. data/spec/lib/appsignal/hooks/puma_spec.rb +18 -10
  40. data/spec/lib/appsignal/hooks/rake_spec.rb +2 -2
  41. data/spec/lib/appsignal/hooks/redis_spec.rb +40 -30
  42. data/spec/lib/appsignal/hooks/sequel_spec.rb +11 -3
  43. data/spec/lib/appsignal/hooks/shoryuken_spec.rb +15 -7
  44. data/spec/lib/appsignal/hooks/sidekiq_spec.rb +17 -9
  45. data/spec/lib/appsignal/hooks/unicorn_spec.rb +16 -8
  46. data/spec/lib/appsignal/hooks/webmachine_spec.rb +14 -4
  47. data/spec/lib/appsignal/hooks_spec.rb +28 -28
  48. data/spec/lib/appsignal/integrations/data_mapper_spec.rb +1 -1
  49. data/spec/lib/appsignal/integrations/grape_spec.rb +3 -3
  50. data/spec/lib/appsignal/integrations/mongo_ruby_driver_spec.rb +14 -16
  51. data/spec/lib/appsignal/integrations/object_spec.rb +10 -10
  52. data/spec/lib/appsignal/integrations/padrino_spec.rb +14 -18
  53. data/spec/lib/appsignal/integrations/railtie_spec.rb +35 -19
  54. data/spec/lib/appsignal/integrations/resque_active_job_spec.rb +2 -2
  55. data/spec/lib/appsignal/integrations/resque_spec.rb +8 -8
  56. data/spec/lib/appsignal/integrations/sinatra_spec.rb +2 -2
  57. data/spec/lib/appsignal/integrations/webmachine_spec.rb +1 -1
  58. data/spec/lib/appsignal/js_exception_transaction_spec.rb +1 -1
  59. data/spec/lib/appsignal/minutely_spec.rb +3 -3
  60. data/spec/lib/appsignal/rack/generic_instrumentation_spec.rb +12 -12
  61. data/spec/lib/appsignal/rack/js_exception_catcher_spec.rb +2 -2
  62. data/spec/lib/appsignal/rack/rails_instrumentation_spec.rb +19 -15
  63. data/spec/lib/appsignal/rack/sinatra_instrumentation_spec.rb +21 -21
  64. data/spec/lib/appsignal/rack/streaming_listener_spec.rb +5 -5
  65. data/spec/lib/appsignal/system_spec.rb +5 -5
  66. data/spec/lib/appsignal/transaction_spec.rb +176 -155
  67. data/spec/lib/appsignal/transmitter_spec.rb +29 -23
  68. data/spec/lib/appsignal/utils/params_sanitizer_spec.rb +49 -35
  69. data/spec/lib/appsignal/utils_spec.rb +15 -8
  70. data/spec/lib/appsignal_spec.rb +134 -150
  71. data/spec/spec_helper.rb +5 -2
  72. metadata +6 -10
  73. data/spec/lib/tmp/config/appsignal.yml +0 -2
  74. data/spec/support/delegate_matcher.rb +0 -38
@@ -6,8 +6,8 @@ describe Appsignal::Rack::JSExceptionCatcher do
6
6
  let(:config) { project_fixture_config("production", config_options) }
7
7
 
8
8
  before do
9
- Appsignal.stub(:config => config)
10
- config.stub(:active? => active)
9
+ allow(Appsignal).to receive(:config).and_return(config)
10
+ allow(config).to receive(:active?).and_return(active)
11
11
  end
12
12
 
13
13
  describe "#initialize" do
@@ -3,7 +3,7 @@ if DependencyHelper.rails_present?
3
3
  end
4
4
 
5
5
  describe Appsignal::Rack::RailsInstrumentation do
6
- before :all do
6
+ before :context do
7
7
  start_agent
8
8
  end
9
9
 
@@ -20,11 +20,11 @@ if DependencyHelper.rails_present?
20
20
 
21
21
  describe "#call" do
22
22
  before do
23
- middleware.stub(:raw_payload => {})
23
+ allow(middleware).to receive(:raw_payload).and_return({})
24
24
  end
25
25
 
26
26
  context "when appsignal is active" do
27
- before { Appsignal.stub(:active? => true) }
27
+ before { allow(Appsignal).to receive(:active?).and_return(true) }
28
28
 
29
29
  it "should call with monitoring" do
30
30
  expect(middleware).to receive(:call_with_appsignal_monitoring).with(env)
@@ -32,7 +32,7 @@ if DependencyHelper.rails_present?
32
32
  end
33
33
 
34
34
  context "when appsignal is not active" do
35
- before { Appsignal.stub(:active? => false) }
35
+ before { allow(Appsignal).to receive(:active?).and_return(false) }
36
36
 
37
37
  it "should not call with monitoring" do
38
38
  expect(middleware).to_not receive(:call_with_appsignal_monitoring)
@@ -48,7 +48,7 @@ if DependencyHelper.rails_present?
48
48
 
49
49
  describe "#call_with_appsignal_monitoring" do
50
50
  it "should create a transaction" do
51
- Appsignal::Transaction.should_receive(:create).with(
51
+ expect(Appsignal::Transaction).to receive(:create).with(
52
52
  "1",
53
53
  Appsignal::Transaction::HTTP_REQUEST,
54
54
  kind_of(ActionDispatch::Request),
@@ -63,29 +63,29 @@ if DependencyHelper.rails_present?
63
63
  end
64
64
 
65
65
  it "should call the app" do
66
- app.should_receive(:call).with(env)
66
+ expect(app).to receive(:call).with(env)
67
67
  end
68
68
 
69
69
  context "with an error" do
70
70
  let(:error) { VerySpecificError.new }
71
71
  let(:app) do
72
72
  double.tap do |d|
73
- d.stub(:call).and_raise(error)
73
+ allow(d).to receive(:call).and_raise(error)
74
74
  end
75
75
  end
76
76
 
77
77
  it "should set the error" do
78
- Appsignal::Transaction.any_instance.should_receive(:set_error).with(error)
78
+ expect_any_instance_of(Appsignal::Transaction).to receive(:set_error).with(error)
79
79
  end
80
80
  end
81
81
 
82
82
  it "should set metadata" do
83
- Appsignal::Transaction.any_instance.should_receive(:set_metadata).twice
83
+ expect_any_instance_of(Appsignal::Transaction).to receive(:set_metadata).twice
84
84
  end
85
85
 
86
86
  it "should set the action and queue start" do
87
- Appsignal::Transaction.any_instance.should_receive(:set_action).with("MockController#index")
88
- Appsignal::Transaction.any_instance.should_receive(:set_http_or_background_queue_start)
87
+ expect_any_instance_of(Appsignal::Transaction).to receive(:set_action).with("MockController#index")
88
+ expect_any_instance_of(Appsignal::Transaction).to receive(:set_http_or_background_queue_start)
89
89
  end
90
90
 
91
91
  after { middleware.call(env) rescue VerySpecificError }
@@ -94,16 +94,20 @@ if DependencyHelper.rails_present?
94
94
  describe "#request_id" do
95
95
  subject { middleware.request_id(env) }
96
96
 
97
- context "with request id set" do
97
+ context "with request id present" do
98
98
  let(:env) { { "action_dispatch.request_id" => "id" } }
99
99
 
100
- it { should eq "id" }
100
+ it "returns the present id" do
101
+ is_expected.to eq "id"
102
+ end
101
103
  end
102
104
 
103
- context "with request id not set" do
105
+ context "with request id not present" do
104
106
  let(:env) { {} }
105
107
 
106
- its(:length) { should eq 36 }
108
+ it "sets a new id" do
109
+ expect(subject.length).to eq 36
110
+ end
107
111
  end
108
112
  end
109
113
  end
@@ -10,8 +10,8 @@ if DependencyHelper.sinatra_present?
10
10
  describe "#call" do
11
11
  before do
12
12
  start_agent
13
- middleware.stub(:raw_payload => {})
14
- Appsignal.stub(:active? => true)
13
+ allow(middleware).to receive(:raw_payload).and_return({})
14
+ allow(Appsignal).to receive(:active?).and_return(true)
15
15
  end
16
16
 
17
17
  it "should call without monitoring" do
@@ -31,7 +31,7 @@ if DependencyHelper.sinatra_present?
31
31
  end
32
32
 
33
33
  describe Appsignal::Rack::SinatraBaseInstrumentation do
34
- before :all do
34
+ before :context do
35
35
  start_agent
36
36
  end
37
37
 
@@ -77,11 +77,11 @@ if DependencyHelper.sinatra_present?
77
77
 
78
78
  describe "#call" do
79
79
  before do
80
- middleware.stub(:raw_payload => {})
80
+ allow(middleware).to receive(:raw_payload).and_return({})
81
81
  end
82
82
 
83
83
  context "when appsignal is active" do
84
- before { Appsignal.stub(:active? => true) }
84
+ before { allow(Appsignal).to receive(:active?).and_return(true) }
85
85
 
86
86
  it "should call with monitoring" do
87
87
  expect(middleware).to receive(:call_with_appsignal_monitoring).with(env)
@@ -89,7 +89,7 @@ if DependencyHelper.sinatra_present?
89
89
  end
90
90
 
91
91
  context "when appsignal is not active" do
92
- before { Appsignal.stub(:active? => false) }
92
+ before { allow(Appsignal).to receive(:active?).and_return(false) }
93
93
 
94
94
  it "should not call with monitoring" do
95
95
  expect(middleware).to_not receive(:call_with_appsignal_monitoring)
@@ -105,7 +105,7 @@ if DependencyHelper.sinatra_present?
105
105
 
106
106
  describe "#call_with_appsignal_monitoring" do
107
107
  it "should create a transaction" do
108
- Appsignal::Transaction.should_receive(:create).with(
108
+ expect(Appsignal::Transaction).to receive(:create).with(
109
109
  kind_of(String),
110
110
  Appsignal::Transaction::HTTP_REQUEST,
111
111
  kind_of(Sinatra::Request),
@@ -114,20 +114,20 @@ if DependencyHelper.sinatra_present?
114
114
  end
115
115
 
116
116
  it "should call the app" do
117
- app.should_receive(:call).with(env)
117
+ expect(app).to receive(:call).with(env)
118
118
  end
119
119
 
120
120
  context "with an error" do
121
121
  let(:error) { VerySpecificError.new }
122
122
  let(:app) do
123
123
  double.tap do |d|
124
- d.stub(:call).and_raise(error)
125
- d.stub(:settings => settings)
124
+ allow(d).to receive(:call).and_raise(error)
125
+ allow(d).to receive(:settings).and_return(settings)
126
126
  end
127
127
  end
128
128
 
129
129
  it "should set the error" do
130
- Appsignal::Transaction.any_instance.should_receive(:set_error).with(error)
130
+ expect_any_instance_of(Appsignal::Transaction).to receive(:set_error).with(error)
131
131
  end
132
132
  end
133
133
 
@@ -136,14 +136,14 @@ if DependencyHelper.sinatra_present?
136
136
  let(:env) { { "sinatra.error" => error } }
137
137
 
138
138
  it "should set the error" do
139
- Appsignal::Transaction.any_instance.should_receive(:set_error).with(error)
139
+ expect_any_instance_of(Appsignal::Transaction).to receive(:set_error).with(error)
140
140
  end
141
141
 
142
142
  context "if raise_errors is on" do
143
143
  let(:settings) { double(:raise_errors => true) }
144
144
 
145
145
  it "should not set the error" do
146
- Appsignal::Transaction.any_instance.should_not_receive(:set_error)
146
+ expect_any_instance_of(Appsignal::Transaction).to_not receive(:set_error)
147
147
  end
148
148
  end
149
149
 
@@ -151,21 +151,21 @@ if DependencyHelper.sinatra_present?
151
151
  let(:env) { { "sinatra.error" => error, "sinatra.skip_appsignal_error" => true } }
152
152
 
153
153
  it "should not set the error" do
154
- Appsignal::Transaction.any_instance.should_not_receive(:set_error)
154
+ expect_any_instance_of(Appsignal::Transaction).to_not receive(:set_error)
155
155
  end
156
156
  end
157
157
  end
158
158
 
159
159
  describe "action name" do
160
160
  it "should set the action" do
161
- Appsignal::Transaction.any_instance.should_receive(:set_action).with("GET /")
161
+ expect_any_instance_of(Appsignal::Transaction).to receive(:set_action).with("GET /")
162
162
  end
163
163
 
164
164
  context "without 'sinatra.route' env" do
165
165
  let(:env) { { :path => "/", :method => "GET" } }
166
166
 
167
167
  it "returns nil" do
168
- Appsignal::Transaction.any_instance.should_receive(:set_action).with(nil)
168
+ expect_any_instance_of(Appsignal::Transaction).to receive(:set_action).with(nil)
169
169
  end
170
170
  end
171
171
 
@@ -173,25 +173,25 @@ if DependencyHelper.sinatra_present?
173
173
  before { env["SCRIPT_NAME"] = "/api" }
174
174
 
175
175
  it "should call set_action with an application prefix path" do
176
- Appsignal::Transaction.any_instance.should_receive(:set_action).with("GET /api/")
176
+ expect_any_instance_of(Appsignal::Transaction).to receive(:set_action).with("GET /api/")
177
177
  end
178
178
 
179
179
  context "without 'sinatra.route' env" do
180
180
  let(:env) { { :path => "/", :method => "GET" } }
181
181
 
182
182
  it "returns nil" do
183
- Appsignal::Transaction.any_instance.should_receive(:set_action).with(nil)
183
+ expect_any_instance_of(Appsignal::Transaction).to receive(:set_action).with(nil)
184
184
  end
185
185
  end
186
186
  end
187
187
  end
188
188
 
189
189
  it "should set metadata" do
190
- Appsignal::Transaction.any_instance.should_receive(:set_metadata).twice
190
+ expect_any_instance_of(Appsignal::Transaction).to receive(:set_metadata).twice
191
191
  end
192
192
 
193
193
  it "should set the queue start" do
194
- Appsignal::Transaction.any_instance.should_receive(:set_http_or_background_queue_start)
194
+ expect_any_instance_of(Appsignal::Transaction).to receive(:set_http_or_background_queue_start)
195
195
  end
196
196
 
197
197
  context "with overridden request class and params method" do
@@ -199,7 +199,7 @@ if DependencyHelper.sinatra_present?
199
199
 
200
200
  it "should use the overridden request class and params method" do
201
201
  request = ::Rack::Request.new(env)
202
- ::Rack::Request.should_receive(:new)
202
+ expect(::Rack::Request).to receive(:new)
203
203
  .with(env.merge(:params_method => :filtered_params))
204
204
  .at_least(:once)
205
205
  .and_return(request)
@@ -15,7 +15,7 @@ describe Appsignal::Rack::StreamingListener do
15
15
 
16
16
  describe "#call" do
17
17
  context "when Appsignal is active" do
18
- before { Appsignal.stub(:active? => true) }
18
+ before { allow(Appsignal).to receive(:active?).and_return(true) }
19
19
 
20
20
  it "should call `call_with_appsignal_monitoring`" do
21
21
  expect(listener).to receive(:call_with_appsignal_monitoring)
@@ -23,7 +23,7 @@ describe Appsignal::Rack::StreamingListener do
23
23
  end
24
24
 
25
25
  context "when Appsignal is not active" do
26
- before { Appsignal.stub(:active? => false) }
26
+ before { allow(Appsignal).to receive(:active?).and_return(false) }
27
27
 
28
28
  it "should not call `call_with_appsignal_monitoring`" do
29
29
  expect(listener).to_not receive(:call_with_appsignal_monitoring)
@@ -45,9 +45,9 @@ describe Appsignal::Rack::StreamingListener do
45
45
  let(:raw_payload) { { :foo => :bar } }
46
46
 
47
47
  before do
48
- SecureRandom.stub(:uuid => "123")
49
- listener.stub(:raw_payload => raw_payload)
50
- Appsignal::Transaction.stub(:create => transaction)
48
+ allow(SecureRandom).to receive(:uuid).and_return("123")
49
+ allow(listener).to receive(:raw_payload).and_return(raw_payload)
50
+ allow(Appsignal::Transaction).to receive(:create).and_return(transaction)
51
51
  end
52
52
 
53
53
  it "should create a transaction" do
@@ -6,7 +6,7 @@ describe Appsignal::System do
6
6
  around { |example| recognize_as_heroku { example.run } }
7
7
 
8
8
  it "returns true" do
9
- expect(subject).to be_true
9
+ expect(subject).to be_truthy
10
10
  end
11
11
  end
12
12
 
@@ -14,7 +14,7 @@ describe Appsignal::System do
14
14
  around { |example| recognize_as_container(:docker) { example.run } }
15
15
 
16
16
  it "returns true" do
17
- expect(subject).to be_true
17
+ expect(subject).to be_truthy
18
18
  end
19
19
  end
20
20
 
@@ -22,7 +22,7 @@ describe Appsignal::System do
22
22
  around { |example| recognize_as_container(:none) { example.run } }
23
23
 
24
24
  it "returns false" do
25
- expect(subject).to be_false
25
+ expect(subject).to be_falsy
26
26
  end
27
27
  end
28
28
  end
@@ -34,7 +34,7 @@ describe Appsignal::System do
34
34
  around { |example| recognize_as_heroku { example.run } }
35
35
 
36
36
  it "returns true" do
37
- expect(subject).to be_true
37
+ expect(subject).to be_truthy
38
38
  end
39
39
  end
40
40
 
@@ -42,7 +42,7 @@ describe Appsignal::System do
42
42
  around { |example| recognize_as_container(:none) { example.run } }
43
43
 
44
44
  it "returns false" do
45
- expect(subject).to be_false
45
+ expect(subject).to be_falsy
46
46
  end
47
47
  end
48
48
  end
@@ -1,13 +1,5 @@
1
- require_relative "../../support/mocks/fake_gc_profiler"
2
-
3
- class Smash < Hash
4
- def []=(_key, _val)
5
- raise "the roof"
6
- end
7
- end
8
-
9
1
  describe Appsignal::Transaction do
10
- before :all do
2
+ before :context do
11
3
  start_agent
12
4
  end
13
5
 
@@ -25,19 +17,19 @@ describe Appsignal::Transaction do
25
17
  describe "class methods" do
26
18
  describe ".create" do
27
19
  it "should add the transaction to thread local" do
28
- Appsignal::Extension.should_receive(:start_transaction).with("1", "http_request", 0)
20
+ expect(Appsignal::Extension).to receive(:start_transaction).with("1", "http_request", 0)
29
21
 
30
22
  created_transaction = Appsignal::Transaction.create("1", namespace, request, options)
31
23
 
32
- Thread.current[:appsignal_transaction].should eq created_transaction
24
+ expect(Thread.current[:appsignal_transaction]).to eq created_transaction
33
25
  end
34
26
 
35
27
  it "should create a transaction" do
36
28
  created_transaction = Appsignal::Transaction.create("1", namespace, request, options)
37
29
 
38
- created_transaction.should be_a Appsignal::Transaction
39
- created_transaction.transaction_id.should eq "1"
40
- created_transaction.namespace.should eq "http_request"
30
+ expect(created_transaction).to be_a Appsignal::Transaction
31
+ expect(created_transaction.transaction_id).to eq "1"
32
+ expect(created_transaction.namespace).to eq "http_request"
41
33
  end
42
34
 
43
35
  context "when a transaction is already running" do
@@ -77,11 +69,11 @@ describe Appsignal::Transaction do
77
69
  before { Appsignal::Transaction.create("1", namespace, request, options) }
78
70
 
79
71
  it "should return the correct transaction" do
80
- should eq transaction
72
+ is_expected.to eq transaction
81
73
  end
82
74
 
83
75
  it "should indicate it's not a nil transaction" do
84
- subject.nil_transaction?.should be_false
76
+ expect(subject.nil_transaction?).to be_falsy
85
77
  end
86
78
  end
87
79
 
@@ -91,11 +83,11 @@ describe Appsignal::Transaction do
91
83
  end
92
84
 
93
85
  it "should return a nil transaction stub" do
94
- should be_a Appsignal::Transaction::NilTransaction
86
+ is_expected.to be_a Appsignal::Transaction::NilTransaction
95
87
  end
96
88
 
97
89
  it "should indicate it's a nil transaction" do
98
- subject.nil_transaction?.should be_true
90
+ expect(subject.nil_transaction?).to be_truthy
99
91
  end
100
92
  end
101
93
  end
@@ -104,19 +96,19 @@ describe Appsignal::Transaction do
104
96
  before { Appsignal::Transaction.create("2", Appsignal::Transaction::HTTP_REQUEST, {}) }
105
97
 
106
98
  it "should complete the current transaction and set the thread appsignal_transaction to nil" do
107
- Appsignal::Transaction.current.should_receive(:complete)
99
+ expect(Appsignal::Transaction.current).to receive(:complete)
108
100
 
109
101
  Appsignal::Transaction.complete_current!
110
102
 
111
- Thread.current[:appsignal_transaction].should be_nil
103
+ expect(Thread.current[:appsignal_transaction]).to be_nil
112
104
  end
113
105
 
114
106
  it "should still clear the transaction if there is an error" do
115
- Appsignal::Transaction.current.should_receive(:complete).and_raise "Error"
107
+ expect(Appsignal::Transaction.current).to receive(:complete).and_raise "Error"
116
108
 
117
109
  Appsignal::Transaction.complete_current!
118
110
 
119
- Thread.current[:appsignal_transaction].should be_nil
111
+ expect(Thread.current[:appsignal_transaction]).to be_nil
120
112
  end
121
113
 
122
114
  context "if a transaction is discarded" do
@@ -124,18 +116,18 @@ describe Appsignal::Transaction do
124
116
  expect(Appsignal::Transaction.current.ext).to_not receive(:complete)
125
117
 
126
118
  Appsignal::Transaction.current.discard!
127
- expect(Appsignal::Transaction.current.discarded?).to be_true
119
+ expect(Appsignal::Transaction.current.discarded?).to be_truthy
128
120
 
129
121
  Appsignal::Transaction.complete_current!
130
122
 
131
- Thread.current[:appsignal_transaction].should be_nil
123
+ expect(Thread.current[:appsignal_transaction]).to be_nil
132
124
  end
133
125
 
134
126
  it "should not be discarded when restore! is called" do
135
127
  Appsignal::Transaction.current.discard!
136
- expect(Appsignal::Transaction.current.discarded?).to be_true
128
+ expect(Appsignal::Transaction.current.discarded?).to be_truthy
137
129
  Appsignal::Transaction.current.restore!
138
- expect(Appsignal::Transaction.current.discarded?).to be_false
130
+ expect(Appsignal::Transaction.current.discarded?).to be_falsy
139
131
  end
140
132
  end
141
133
  end
@@ -143,17 +135,17 @@ describe Appsignal::Transaction do
143
135
 
144
136
  describe "#complete" do
145
137
  it "should sample data if it needs to be sampled" do
146
- transaction.ext.should_receive(:finish).and_return(true)
147
- transaction.should_receive(:sample_data)
148
- transaction.ext.should_receive(:complete)
138
+ expect(transaction.ext).to receive(:finish).and_return(true)
139
+ expect(transaction).to receive(:sample_data)
140
+ expect(transaction.ext).to receive(:complete)
149
141
 
150
142
  transaction.complete
151
143
  end
152
144
 
153
145
  it "should not sample data if it does not need to be sampled" do
154
- transaction.ext.should_receive(:finish).and_return(false)
155
- transaction.should_not_receive(:sample_data)
156
- transaction.ext.should_receive(:complete)
146
+ expect(transaction.ext).to receive(:finish).and_return(false)
147
+ expect(transaction).to_not receive(:sample_data)
148
+ expect(transaction.ext).to receive(:complete)
157
149
 
158
150
  transaction.complete
159
151
  end
@@ -180,14 +172,14 @@ describe Appsignal::Transaction do
180
172
 
181
173
  describe "#paused?" do
182
174
  it "should return the pause state" do
183
- expect(transaction.paused?).to be_false
175
+ expect(transaction.paused?).to be_falsy
184
176
  end
185
177
 
186
178
  context "when paused" do
187
179
  before { transaction.pause! }
188
180
 
189
181
  it "should return the pause state" do
190
- expect(transaction.paused?).to be_true
182
+ expect(transaction.paused?).to be_truthy
191
183
  end
192
184
  end
193
185
  end
@@ -195,24 +187,43 @@ describe Appsignal::Transaction do
195
187
 
196
188
  context "with transaction instance" do
197
189
  context "initialization" do
198
- subject { transaction }
190
+ it "loads the AppSignal extension" do
191
+ expect(transaction.ext).to_not be_nil
192
+ end
193
+
194
+ it "sets the transaction id" do
195
+ expect(transaction.transaction_id).to eq "1"
196
+ end
197
+
198
+ it "sets the namespace to http_request" do
199
+ expect(transaction.namespace).to eq "http_request"
200
+ end
201
+
202
+ it "sets the request" do
203
+ expect(transaction.request).to_not be_nil
204
+ end
199
205
 
200
- its(:ext) { should_not be_nil }
201
- its(:transaction_id) { should eq "1" }
202
- its(:namespace) { should eq "http_request" }
203
- its(:request) { should_not be_nil }
204
- its(:paused) { should be_false }
205
- its(:tags) { should eq({}) }
206
+ it "sets the request not to paused" do
207
+ expect(transaction.paused).to be_falsy
208
+ end
209
+
210
+ it "sets no tags by default" do
211
+ expect(transaction.tags).to eq({})
212
+ end
206
213
 
207
- context "options" do
214
+ describe "#options" do
208
215
  subject { transaction.options }
209
216
 
210
- its([:params_method]) { should eq :params }
217
+ it "sets the default :params_method" do
218
+ expect(subject[:params_method]).to eq :params
219
+ end
211
220
 
212
221
  context "with overridden options" do
213
222
  let(:options) { { :params_method => :filtered_params } }
214
223
 
215
- its([:params_method]) { should eq :filtered_params }
224
+ it "sets the overriden :params_method" do
225
+ expect(subject[:params_method]).to eq :filtered_params
226
+ end
216
227
  end
217
228
  end
218
229
  end
@@ -240,7 +251,7 @@ describe Appsignal::Transaction do
240
251
 
241
252
  describe "set_action" do
242
253
  it "should set the action in extension" do
243
- transaction.ext.should_receive(:set_action).with(
254
+ expect(transaction.ext).to receive(:set_action).with(
244
255
  "PagesController#show"
245
256
  ).once
246
257
 
@@ -248,7 +259,7 @@ describe Appsignal::Transaction do
248
259
  end
249
260
 
250
261
  it "should not set the action in extension when value is nil" do
251
- Appsignal::Extension.should_not_receive(:set_transaction_action)
262
+ expect(Appsignal::Extension).to_not receive(:set_transaction_action)
252
263
 
253
264
  transaction.set_action(nil)
254
265
  end
@@ -259,7 +270,7 @@ describe Appsignal::Transaction do
259
270
  let(:from) { { :controller => "HomeController", :action => "show" } }
260
271
 
261
272
  it "should set the action" do
262
- transaction.should_receive(:set_action).with("HomeController#show")
273
+ expect(transaction).to receive(:set_action).with("HomeController#show")
263
274
  end
264
275
  end
265
276
 
@@ -267,7 +278,7 @@ describe Appsignal::Transaction do
267
278
  let(:from) { { :action => "show" } }
268
279
 
269
280
  it "should set the action" do
270
- transaction.should_receive(:set_action).with("show")
281
+ expect(transaction).to receive(:set_action).with("show")
271
282
  end
272
283
  end
273
284
 
@@ -275,7 +286,7 @@ describe Appsignal::Transaction do
275
286
  let(:from) { { :class => "Worker", :method => "perform" } }
276
287
 
277
288
  it "should set the action" do
278
- transaction.should_receive(:set_action).with("Worker#perform")
289
+ expect(transaction).to receive(:set_action).with("Worker#perform")
279
290
  end
280
291
  end
281
292
 
@@ -284,7 +295,7 @@ describe Appsignal::Transaction do
284
295
 
285
296
  describe "set_queue_start" do
286
297
  it "should set the queue start in extension" do
287
- transaction.ext.should_receive(:set_queue_start).with(
298
+ expect(transaction.ext).to receive(:set_queue_start).with(
288
299
  10.0
289
300
  ).once
290
301
 
@@ -292,19 +303,19 @@ describe Appsignal::Transaction do
292
303
  end
293
304
 
294
305
  it "should not set the queue start in extension when value is nil" do
295
- transaction.ext.should_not_receive(:set_queue_start)
306
+ expect(transaction.ext).to_not receive(:set_queue_start)
296
307
 
297
308
  transaction.set_queue_start(nil)
298
309
  end
299
310
 
300
311
  it "should not raise an error when the queue start is too big" do
301
- transaction.ext.should_receive(:set_queue_start).and_raise(RangeError)
312
+ expect(transaction.ext).to receive(:set_queue_start).and_raise(RangeError)
302
313
 
303
- Appsignal.logger.should_receive(:warn).with("Queue start value 10 is too big")
314
+ expect(Appsignal.logger).to receive(:warn).with("Queue start value 10 is too big")
304
315
 
305
- lambda do
316
+ expect do
306
317
  transaction.set_queue_start(10)
307
- end.should_not raise_error
318
+ end.to_not raise_error
308
319
  end
309
320
  end
310
321
 
@@ -314,7 +325,7 @@ describe Appsignal::Transaction do
314
325
  let(:env) { { "HTTP_X_REQUEST_START" => (fixed_time * 1000).to_s } }
315
326
 
316
327
  it "should set the queue start on the transaction" do
317
- transaction.should_receive(:set_queue_start).with(13_897_836_000)
328
+ expect(transaction).to receive(:set_queue_start).with(13_897_836_000)
318
329
 
319
330
  transaction.set_http_or_background_queue_start
320
331
  end
@@ -325,7 +336,7 @@ describe Appsignal::Transaction do
325
336
  let(:env) { { :queue_start => fixed_time } }
326
337
 
327
338
  it "should set the queue start on the transaction" do
328
- transaction.should_receive(:set_queue_start).with(1_389_783_600_000)
339
+ expect(transaction).to receive(:set_queue_start).with(1_389_783_600_000)
329
340
 
330
341
  transaction.set_http_or_background_queue_start
331
342
  end
@@ -334,7 +345,7 @@ describe Appsignal::Transaction do
334
345
 
335
346
  describe "#set_metadata" do
336
347
  it "should set the metdata in extension" do
337
- transaction.ext.should_receive(:set_metadata).with(
348
+ expect(transaction.ext).to receive(:set_metadata).with(
338
349
  "request_method",
339
350
  "GET"
340
351
  ).once
@@ -343,7 +354,7 @@ describe Appsignal::Transaction do
343
354
  end
344
355
 
345
356
  it "should not set the metdata in extension when value is nil" do
346
- transaction.ext.should_not_receive(:set_metadata)
357
+ expect(transaction.ext).to_not receive(:set_metadata)
347
358
 
348
359
  transaction.set_metadata("request_method", nil)
349
360
  end
@@ -351,7 +362,7 @@ describe Appsignal::Transaction do
351
362
 
352
363
  describe "set_sample_data" do
353
364
  it "should set the data" do
354
- transaction.ext.should_receive(:set_sample_data).with(
365
+ expect(transaction.ext).to receive(:set_sample_data).with(
355
366
  "params",
356
367
  Appsignal::Utils.data_generate("controller" => "blog_posts", "action" => "show", "id" => "1")
357
368
  ).once
@@ -365,7 +376,7 @@ describe Appsignal::Transaction do
365
376
  end
366
377
 
367
378
  it "should do nothing if the data cannot be converted to json" do
368
- transaction.ext.should_not_receive(:set_sample_data).with(
379
+ expect(transaction.ext).to_not receive(:set_sample_data).with(
369
380
  "params",
370
381
  kind_of(String)
371
382
  )
@@ -376,7 +387,7 @@ describe Appsignal::Transaction do
376
387
 
377
388
  describe "#sample_data" do
378
389
  it "should sample data" do
379
- transaction.ext.should_receive(:set_sample_data).with(
390
+ expect(transaction.ext).to receive(:set_sample_data).with(
380
391
  "environment",
381
392
  Appsignal::Utils.data_generate(
382
393
  "CONTENT_LENGTH" => "0",
@@ -386,19 +397,19 @@ describe Appsignal::Transaction do
386
397
  "PATH_INFO" => "/blog"
387
398
  )
388
399
  ).once
389
- transaction.ext.should_receive(:set_sample_data).with(
400
+ expect(transaction.ext).to receive(:set_sample_data).with(
390
401
  "session_data",
391
402
  Appsignal::Utils.data_generate({})
392
403
  ).once
393
- transaction.ext.should_receive(:set_sample_data).with(
404
+ expect(transaction.ext).to receive(:set_sample_data).with(
394
405
  "params",
395
406
  Appsignal::Utils.data_generate("controller" => "blog_posts", "action" => "show", "id" => "1")
396
407
  ).once
397
- transaction.ext.should_receive(:set_sample_data).with(
408
+ expect(transaction.ext).to receive(:set_sample_data).with(
398
409
  "metadata",
399
410
  Appsignal::Utils.data_generate("key" => "value")
400
411
  ).once
401
- transaction.ext.should_receive(:set_sample_data).with(
412
+ expect(transaction.ext).to receive(:set_sample_data).with(
402
413
  "tags",
403
414
  Appsignal::Utils.data_generate({})
404
415
  ).once
@@ -412,20 +423,20 @@ describe Appsignal::Transaction do
412
423
  let(:error) { double(:error, :message => "test message", :backtrace => ["line 1"]) }
413
424
 
414
425
  it "should also respond to add_exception for backwords compatibility" do
415
- transaction.should respond_to(:add_exception)
426
+ expect(transaction).to respond_to(:add_exception)
416
427
  end
417
428
 
418
429
  it "should not add the error if appsignal is not active" do
419
- Appsignal.stub(:active? => false)
420
- transaction.ext.should_not_receive(:set_error)
430
+ allow(Appsignal).to receive(:active?).and_return(false)
431
+ expect(transaction.ext).to_not receive(:set_error)
421
432
 
422
433
  transaction.set_error(error)
423
434
  end
424
435
 
425
436
  context "for a http request" do
426
437
  it "should set an error in the extension" do
427
- transaction.ext.should_receive(:set_error).with(
428
- "RSpec::Mocks::Mock",
438
+ expect(transaction.ext).to receive(:set_error).with(
439
+ "RSpec::Mocks::Double",
429
440
  "test message",
430
441
  Appsignal::Utils.data_generate(["line 1"])
431
442
  )
@@ -442,8 +453,8 @@ describe Appsignal::Transaction do
442
453
  end
443
454
 
444
455
  it "should set an error in the extension" do
445
- transaction.ext.should_receive(:set_error).with(
446
- "RSpec::Mocks::Mock",
456
+ expect(transaction.ext).to receive(:set_error).with(
457
+ "RSpec::Mocks::Double",
447
458
  "",
448
459
  Appsignal::Utils.data_generate(["line 1"])
449
460
  )
@@ -455,21 +466,27 @@ describe Appsignal::Transaction do
455
466
 
456
467
  describe "#start_event" do
457
468
  it "should start the event in the extension" do
458
- transaction.ext.should_receive(:start_event)
469
+ expect(transaction.ext).to receive(:start_event).with(0).and_call_original
459
470
 
460
471
  transaction.start_event
461
472
  end
462
473
  end
463
474
 
464
475
  describe "#finish_event" do
476
+ let(:fake_gc_time) { 123 }
477
+ before do
478
+ expect(described_class.garbage_collection_profiler)
479
+ .to receive(:total_time).at_least(:once).and_return(fake_gc_time)
480
+ end
481
+
465
482
  it "should finish the event in the extension" do
466
- transaction.ext.should_receive(:finish_event).with(
483
+ expect(transaction.ext).to receive(:finish_event).with(
467
484
  "name",
468
485
  "title",
469
486
  "body",
470
487
  1,
471
- 0
472
- )
488
+ fake_gc_time
489
+ ).and_call_original
473
490
 
474
491
  transaction.finish_event(
475
492
  "name",
@@ -480,13 +497,13 @@ describe Appsignal::Transaction do
480
497
  end
481
498
 
482
499
  it "should finish the event in the extension with nil arguments" do
483
- transaction.ext.should_receive(:finish_event).with(
500
+ expect(transaction.ext).to receive(:finish_event).with(
484
501
  "name",
485
502
  "",
486
503
  "",
487
504
  0,
488
- 0
489
- )
505
+ fake_gc_time
506
+ ).and_call_original
490
507
 
491
508
  transaction.finish_event(
492
509
  "name",
@@ -495,25 +512,24 @@ describe Appsignal::Transaction do
495
512
  nil
496
513
  )
497
514
  end
498
-
499
- it "should add garbage collection time" do
500
- allow_any_instance_of(Appsignal::GarbageCollectionProfiler)
501
- .to receive(:internal_profiler)
502
- .and_return(FakeGCProfiler.new(0.12345))
503
-
504
- transaction.finish_event("name", nil, nil, nil)
505
- end
506
515
  end
507
516
 
508
517
  describe "#record_event" do
518
+ let(:fake_gc_time) { 123 }
519
+ before do
520
+ expect(described_class.garbage_collection_profiler)
521
+ .to receive(:total_time).at_least(:once).and_return(fake_gc_time)
522
+ end
523
+
509
524
  it "should record the event in the extension" do
510
- transaction.ext.should_receive(:record_event).with(
525
+ expect(transaction.ext).to receive(:record_event).with(
511
526
  "name",
512
527
  "title",
513
528
  "body",
514
529
  1000,
515
- 1
516
- )
530
+ 1,
531
+ fake_gc_time
532
+ ).and_call_original
517
533
 
518
534
  transaction.record_event(
519
535
  "name",
@@ -525,13 +541,14 @@ describe Appsignal::Transaction do
525
541
  end
526
542
 
527
543
  it "should finish the event in the extension with nil arguments" do
528
- transaction.ext.should_receive(:record_event).with(
544
+ expect(transaction.ext).to receive(:record_event).with(
529
545
  "name",
530
546
  "",
531
547
  "",
532
548
  1000,
533
- 0
534
- )
549
+ 0,
550
+ fake_gc_time
551
+ ).and_call_original
535
552
 
536
553
  transaction.record_event(
537
554
  "name",
@@ -546,19 +563,20 @@ describe Appsignal::Transaction do
546
563
  describe "#instrument" do
547
564
  it "should start and finish an event around the given block" do
548
565
  stub = double
549
- stub.should_receive(:method_call).and_return("return value")
566
+ expect(stub).to receive(:method_call).and_return("return value")
550
567
 
551
- transaction.should_receive(:start_event)
552
- transaction.should_receive(:finish_event).with(
568
+ expect(transaction).to receive(:start_event)
569
+ expect(transaction).to receive(:finish_event).with(
553
570
  "name",
554
571
  "title",
555
572
  "body",
556
573
  0
557
574
  )
558
575
 
559
- transaction.instrument "name", "title", "body" do
576
+ return_value = transaction.instrument "name", "title", "body" do
560
577
  stub.method_call
561
- end.should eq "return value"
578
+ end
579
+ expect(return_value).to eq "return value"
562
580
  end
563
581
  end
564
582
 
@@ -566,11 +584,11 @@ describe Appsignal::Transaction do
566
584
  let(:env) { {} }
567
585
  subject { Appsignal::Transaction::GenericRequest.new(env) }
568
586
 
569
- it "should initialize with an empty env" do
570
- subject.env.should be_empty
587
+ it "initializes with an empty env" do
588
+ expect(subject.env).to be_empty
571
589
  end
572
590
 
573
- context "with a filled env" do
591
+ context "when given an env" do
574
592
  let(:env) do
575
593
  {
576
594
  :params => { :id => 1 },
@@ -578,8 +596,13 @@ describe Appsignal::Transaction do
578
596
  }
579
597
  end
580
598
 
581
- its(:env) { should eq env }
582
- its(:params) { should eq(:id => 1) }
599
+ it "sets the given env" do
600
+ expect(subject.env).to eq env
601
+ end
602
+
603
+ it "sets the params present in the env" do
604
+ expect(subject.params).to eq(:id => 1)
605
+ end
583
606
  end
584
607
  end
585
608
 
@@ -591,23 +614,23 @@ describe Appsignal::Transaction do
591
614
  context "when request is nil" do
592
615
  let(:request) { nil }
593
616
 
594
- it { should eq nil }
617
+ it { is_expected.to eq nil }
595
618
  end
596
619
 
597
620
  context "when env is nil" do
598
621
  before { expect(transaction.request).to receive(:env).and_return(nil) }
599
622
 
600
- it { should eq nil }
623
+ it { is_expected.to eq nil }
601
624
  end
602
625
 
603
626
  context "when queue start is nil" do
604
- it { should eq nil }
627
+ it { is_expected.to eq nil }
605
628
  end
606
629
 
607
630
  context "when queue start is set" do
608
631
  let(:env) { background_env_with_data }
609
632
 
610
- it { should eq 1_389_783_590_000 }
633
+ it { is_expected.to eq 1_389_783_590_000 }
611
634
  end
612
635
  end
613
636
 
@@ -620,48 +643,48 @@ describe Appsignal::Transaction do
620
643
  context "when request is nil" do
621
644
  let(:request) { nil }
622
645
 
623
- it { should be_nil }
646
+ it { is_expected.to be_nil }
624
647
  end
625
648
 
626
649
  context "when env is nil" do
627
650
  before { expect(transaction.request).to receive(:env).and_return(nil) }
628
651
 
629
- it { should be_nil }
652
+ it { is_expected.to be_nil }
630
653
  end
631
654
 
632
655
  context "with no relevant header set" do
633
656
  let(:env) { {} }
634
657
 
635
- it { should be_nil }
658
+ it { is_expected.to be_nil }
636
659
  end
637
660
 
638
661
  context "with the HTTP_X_REQUEST_START header set" do
639
662
  let(:env) { { "HTTP_X_REQUEST_START" => "t=#{slightly_earlier_time_value}" } }
640
663
 
641
- it { should eq 1_389_783_599_600 }
664
+ it { is_expected.to eq 1_389_783_599_600 }
642
665
 
643
666
  context "with unparsable content" do
644
667
  let(:env) { { "HTTP_X_REQUEST_START" => "something" } }
645
668
 
646
- it { should be_nil }
669
+ it { is_expected.to be_nil }
647
670
  end
648
671
 
649
672
  context "with some cruft" do
650
673
  let(:env) { { "HTTP_X_REQUEST_START" => "t=#{slightly_earlier_time_value}aaaa" } }
651
674
 
652
- it { should eq 1_389_783_599_600 }
675
+ it { is_expected.to eq 1_389_783_599_600 }
653
676
  end
654
677
 
655
678
  context "with a really low number" do
656
679
  let(:env) { { "HTTP_X_REQUEST_START" => "t=100" } }
657
680
 
658
- it { should be_nil }
681
+ it { is_expected.to be_nil }
659
682
  end
660
683
 
661
684
  context "with the alternate HTTP_X_QUEUE_START header set" do
662
685
  let(:env) { { "HTTP_X_QUEUE_START" => "t=#{slightly_earlier_time_value}" } }
663
686
 
664
- it { should eq 1_389_783_599_600 }
687
+ it { is_expected.to eq 1_389_783_599_600 }
665
688
  end
666
689
  end
667
690
  end
@@ -683,28 +706,28 @@ describe Appsignal::Transaction do
683
706
  subject { transaction.send(:sanitized_params) }
684
707
 
685
708
  context "without params" do
686
- before { transaction.request.stub(:params => nil) }
709
+ before { allow(transaction.request).to receive(:params).and_return(nil) }
687
710
 
688
- it { should be_nil }
711
+ it { is_expected.to be_nil }
689
712
  end
690
713
 
691
714
  context "when params crashes" do
692
- before { transaction.request.stub(:params).and_raise(NoMethodError) }
715
+ before { allow(transaction.request).to receive(:params).and_raise(NoMethodError) }
693
716
 
694
- it { should be_nil }
717
+ it { is_expected.to be_nil }
695
718
  end
696
719
 
697
720
  context "when params method does not exist" do
698
721
  let(:options) { { :params_method => :nonsense } }
699
722
 
700
- it { should be_nil }
723
+ it { is_expected.to be_nil }
701
724
  end
702
725
 
703
726
  context "when not sending params" do
704
727
  before { Appsignal.config.config_hash[:send_params] = false }
705
728
  after { Appsignal.config.config_hash[:send_params] = true }
706
729
 
707
- it { should be_nil }
730
+ it { is_expected.to be_nil }
708
731
  end
709
732
 
710
733
  context "with an array" do
@@ -712,13 +735,13 @@ describe Appsignal::Transaction do
712
735
  Appsignal::Transaction::GenericRequest.new(background_env_with_data(:params => ["arg1", "arg2"]))
713
736
  end
714
737
 
715
- it { should eq ["arg1", "arg2"] }
738
+ it { is_expected.to eq ["arg1", "arg2"] }
716
739
 
717
740
  context "with AppSignal filtering" do
718
741
  before { Appsignal.config.config_hash[:filter_parameters] = %w(foo) }
719
742
  after { Appsignal.config.config_hash[:filter_parameters] = [] }
720
743
 
721
- it { should eq ["arg1", "arg2"] }
744
+ it { is_expected.to eq ["arg1", "arg2"] }
722
745
  end
723
746
  end
724
747
 
@@ -731,7 +754,7 @@ describe Appsignal::Transaction do
731
754
 
732
755
  it "should call the params sanitizer" do
733
756
  puts Appsignal.config.config_hash[:filter_parameters].inspect
734
- subject.should eq(:foo => :bar)
757
+ expect(subject).to eq(:foo => :bar)
735
758
  end
736
759
  end
737
760
 
@@ -744,7 +767,7 @@ describe Appsignal::Transaction do
744
767
  after { Appsignal.config.config_hash[:filter_parameters] = [] }
745
768
 
746
769
  it "should call the params sanitizer with filtering" do
747
- subject.should eq(:foo => "[FILTERED]", :baz => :bat)
770
+ expect(subject).to eq(:foo => "[FILTERED]", :baz => :bat)
748
771
  end
749
772
  end
750
773
  end
@@ -758,15 +781,13 @@ describe Appsignal::Transaction do
758
781
  context "when request is nil" do
759
782
  let(:request) { nil }
760
783
 
761
- it "returns nil" do
762
- expect(subject).to be_nil
763
- end
784
+ it { is_expected.to be_nil }
764
785
  end
765
786
 
766
787
  context "when env is nil" do
767
788
  before { expect(transaction.request).to receive(:env).and_return(nil) }
768
789
 
769
- it { should be_nil }
790
+ it { is_expected.to be_nil }
770
791
  end
771
792
 
772
793
  context "when env is present" do
@@ -778,7 +799,9 @@ describe Appsignal::Transaction do
778
799
  end
779
800
  end
780
801
 
781
- its(:keys) { should =~ whitelisted_keys[0, whitelisted_keys.length] }
802
+ it "only sets whitelisted keys" do
803
+ expect(subject.keys).to match_array(whitelisted_keys)
804
+ end
782
805
  end
783
806
  end
784
807
 
@@ -788,52 +811,50 @@ describe Appsignal::Transaction do
788
811
  context "when request is nil" do
789
812
  let(:request) { nil }
790
813
 
791
- it "returns nil" do
792
- expect(subject).to be_nil
793
- end
814
+ it { is_expected.to be_nil }
794
815
  end
795
816
 
796
817
  context "when session is nil" do
797
818
  before { expect(transaction.request).to receive(:session).and_return(nil) }
798
819
 
799
- it { should be_nil }
820
+ it { is_expected.to be_nil }
800
821
  end
801
822
 
802
823
  context "when session is empty" do
803
824
  before { expect(transaction.request).to receive(:session).and_return({}) }
804
825
 
805
- it { should eq({}) }
826
+ it { is_expected.to eq({}) }
806
827
  end
807
828
 
808
829
  context "when request class does not have a session method" do
809
830
  let(:request) { Appsignal::Transaction::GenericRequest.new({}) }
810
831
 
811
- it { should be_nil }
832
+ it { is_expected.to be_nil }
812
833
  end
813
834
 
814
835
  context "when there is a session" do
815
836
  before do
816
- transaction.should respond_to(:request)
817
- transaction.stub_chain(:request, :session => { :foo => :bar })
818
- transaction.stub_chain(:request, :fullpath => :bar)
837
+ expect(transaction).to respond_to(:request)
838
+ allow(transaction).to receive_message_chain(:request, :session => { :foo => :bar })
839
+ allow(transaction).to receive_message_chain(:request, :fullpath => :bar)
819
840
  end
820
841
 
821
842
  it "passes the session data into the params sanitizer" do
822
- Appsignal::Utils::ParamsSanitizer.should_receive(:sanitize).with(:foo => :bar)
843
+ expect(Appsignal::Utils::ParamsSanitizer).to receive(:sanitize).with(:foo => :bar)
823
844
  .and_return(:sanitized_foo)
824
- subject.should eq :sanitized_foo
845
+ expect(subject).to eq :sanitized_foo
825
846
  end
826
847
 
827
848
  if defined? ActionDispatch::Request::Session
828
849
  context "with ActionDispatch::Request::Session" do
829
850
  before do
830
- transaction.should respond_to(:request)
831
- transaction.stub_chain(:request, :session => action_dispatch_session)
832
- transaction.stub_chain(:request, :fullpath => :bar)
851
+ expect(transaction).to respond_to(:request)
852
+ allow(transaction).to receive_message_chain(:request, :session => action_dispatch_session)
853
+ allow(transaction).to receive_message_chain(:request, :fullpath => :bar)
833
854
  end
834
855
 
835
856
  it "should return an session hash" do
836
- Appsignal::Utils::ParamsSanitizer.should_receive(:sanitize).with("foo" => :bar)
857
+ expect(Appsignal::Utils::ParamsSanitizer).to receive(:sanitize).with("foo" => :bar)
837
858
  .and_return(:sanitized_foo)
838
859
  subject
839
860
  end
@@ -859,8 +880,8 @@ describe Appsignal::Transaction do
859
880
  end
860
881
 
861
882
  it "does not pass the session data into the params sanitizer" do
862
- Appsignal::Utils::ParamsSanitizer.should_not_receive(:sanitize)
863
- subject.should be_nil
883
+ expect(Appsignal::Utils::ParamsSanitizer).to_not receive(:sanitize)
884
+ expect(subject).to be_nil
864
885
  end
865
886
  end
866
887
  end
@@ -872,19 +893,19 @@ describe Appsignal::Transaction do
872
893
  context "when request is nil" do
873
894
  let(:request) { nil }
874
895
 
875
- it { should be_nil }
896
+ it { is_expected.to be_nil }
876
897
  end
877
898
 
878
899
  context "when env is nil" do
879
900
  before { expect(transaction.request).to receive(:env).and_return(nil) }
880
901
 
881
- it { should be_nil }
902
+ it { is_expected.to be_nil }
882
903
  end
883
904
 
884
905
  context "when env is present" do
885
906
  let(:env) { { :metadata => { :key => "value" } } }
886
907
 
887
- it { should eq env[:metadata] }
908
+ it { is_expected.to eq env[:metadata] }
888
909
  end
889
910
  end
890
911
 
@@ -905,12 +926,12 @@ describe Appsignal::Transaction do
905
926
  subject { transaction.send(:sanitized_tags).keys }
906
927
 
907
928
  it "should only return whitelisted data" do
908
- should =~ [
929
+ is_expected.to match_array([
909
930
  :valid_key,
910
931
  "valid_string_key",
911
932
  :both_symbols,
912
933
  :integer_value
913
- ]
934
+ ])
914
935
  end
915
936
  end
916
937
 
@@ -938,7 +959,7 @@ describe Appsignal::Transaction do
938
959
  subject { Appsignal::Transaction::NilTransaction.new }
939
960
 
940
961
  it "should have method stubs" do
941
- lambda do
962
+ expect do
942
963
  subject.complete
943
964
  subject.pause!
944
965
  subject.resume!
@@ -953,7 +974,7 @@ describe Appsignal::Transaction do
953
974
  subject.set_sample_data("key", "data")
954
975
  subject.sample_data
955
976
  subject.set_error("a")
956
- end.should_not raise_error
977
+ end.to_not raise_error
957
978
  end
958
979
  end
959
980
  end