exception_handling 2.6.1 → 2.7.0.pre.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (33) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -1
  3. data/.jenkins/Jenkinsfile +8 -24
  4. data/CHANGELOG.md +8 -1
  5. data/Gemfile +4 -4
  6. data/Gemfile.lock +19 -29
  7. data/Rakefile +6 -7
  8. data/lib/exception_handling/log_stub_error.rb +1 -2
  9. data/lib/exception_handling/logging_methods.rb +33 -0
  10. data/lib/exception_handling/methods.rb +6 -53
  11. data/lib/exception_handling/testing.rb +20 -10
  12. data/lib/exception_handling/version.rb +1 -1
  13. data/lib/exception_handling.rb +2 -2
  14. data/{spec → test}/helpers/controller_helpers.rb +0 -0
  15. data/{spec → test}/helpers/exception_helpers.rb +2 -2
  16. data/{spec → test}/rake_test_warning_false.rb +0 -0
  17. data/{spec/spec_helper.rb → test/test_helper.rb} +39 -50
  18. data/test/unit/exception_handling/exception_catalog_test.rb +85 -0
  19. data/test/unit/exception_handling/exception_description_test.rb +82 -0
  20. data/{spec/unit/exception_handling/exception_info_spec.rb → test/unit/exception_handling/exception_info_test.rb} +107 -105
  21. data/{spec/unit/exception_handling/honeybadger_callbacks_spec.rb → test/unit/exception_handling/honeybadger_callbacks_test.rb} +20 -20
  22. data/{spec/unit/exception_handling/log_error_stub_spec.rb → test/unit/exception_handling/log_error_stub_test.rb} +22 -38
  23. data/test/unit/exception_handling/logging_methods_test.rb +37 -0
  24. data/{spec/unit/exception_handling/mailer_spec.rb → test/unit/exception_handling/mailer_test.rb} +17 -17
  25. data/test/unit/exception_handling/methods_test.rb +105 -0
  26. data/test/unit/exception_handling/sensu_test.rb +52 -0
  27. data/{spec/unit/exception_handling_spec.rb → test/unit/exception_handling_test.rb} +329 -325
  28. metadata +36 -34
  29. data/.rspec +0 -3
  30. data/spec/unit/exception_handling/exception_catalog_spec.rb +0 -85
  31. data/spec/unit/exception_handling/exception_description_spec.rb +0 -82
  32. data/spec/unit/exception_handling/methods_spec.rb +0 -84
  33. data/spec/unit/exception_handling/sensu_spec.rb +0 -51
@@ -1,14 +1,14 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require File.expand_path('../spec_helper', __dir__)
3
+ require File.expand_path('../test_helper', __dir__)
4
4
  require_test_helper 'controller_helpers'
5
5
  require_test_helper 'exception_helpers'
6
6
 
7
- describe ExceptionHandling do
7
+ class ExceptionHandlingTest < ActiveSupport::TestCase
8
8
  include ControllerHelpers
9
9
  include ExceptionHelpers
10
10
 
11
- before do
11
+ setup do
12
12
  @fail_count = 0
13
13
  end
14
14
 
@@ -108,228 +108,228 @@ describe ExceptionHandling do
108
108
  end
109
109
 
110
110
  context "with warn and honeybadger notify stubbed" do
111
- before do
112
- allow(ExceptionHandling).to receive(:warn).with(anything)
113
- allow(Honeybadger).to receive(:notify).with(anything)
111
+ setup do
112
+ stub(ExceptionHandling).warn(anything)
113
+ stub(Honeybadger).notify(anything)
114
114
  end
115
115
 
116
116
  context "with logger stashed" do
117
- before { @original_logger = ExceptionHandling.logger }
118
- after { ExceptionHandling.logger = @original_logger }
117
+ setup { @original_logger = ExceptionHandling.logger }
118
+ teardown { ExceptionHandling.logger = @original_logger }
119
119
 
120
- it "store logger as-is if it has ContextualLogger::Mixin" do
120
+ should "store logger as-is if it has ContextualLogger::Mixin" do
121
121
  logger = Logger.new('/dev/null')
122
122
  logger.extend(ContextualLogger::LoggerMixin)
123
123
  ancestors = logger.singleton_class.ancestors.*.name
124
124
 
125
125
  ExceptionHandling.logger = logger
126
- expect(ExceptionHandling.logger.singleton_class.ancestors.*.name).to eq(ancestors)
126
+ assert_equal ancestors, ExceptionHandling.logger.singleton_class.ancestors.*.name
127
127
  end
128
128
 
129
- it "allow logger = nil (no deprecation warning)" do
130
- expect(STDERR).to receive(:puts).with(/DEPRECATION WARNING/).never
129
+ should "allow logger = nil (no deprecation warning)" do
130
+ mock(STDERR).puts(/DEPRECATION WARNING/).never
131
131
  ExceptionHandling.logger = nil
132
132
  end
133
133
 
134
- it "[deprecated] mix in ContextualLogger::Mixin if not there" do
135
- expect(STDERR).to receive(:puts).with(/DEPRECATION WARNING: implicit extend with ContextualLogger::LoggerMixin is deprecated and will be removed from exception_handling 3\.0/)
134
+ should "[deprecated] mix in ContextualLogger::Mixin if not there" do
135
+ mock(STDERR).puts(/DEPRECATION WARNING: implicit extend with ContextualLogger::LoggerMixin is deprecated and will be removed from exception_handling 3\.0/)
136
136
  logger = Logger.new('/dev/null')
137
137
  ancestors = logger.singleton_class.ancestors.*.name
138
138
 
139
139
  ExceptionHandling.logger = logger
140
- expect(ExceptionHandling.logger.singleton_class.ancestors.*.name).to_not eq(ancestors)
141
- expect(ExceptionHandling.logger).to be_kind_of(ContextualLogger::LoggerMixin)
140
+ assert_not_equal ancestors, ExceptionHandling.logger.singleton_class.ancestors.*.name
141
+ assert_kind_of ContextualLogger::LoggerMixin, ExceptionHandling.logger
142
142
  end
143
143
  end
144
144
 
145
145
  context "#log_error" do
146
- it "take in additional logging context hash and pass it to the logger" do
146
+ should "take in additional logging context hash and pass it to the logger" do
147
147
  ExceptionHandling.log_error('This is an Error', 'This is the prefix context', service_name: 'exception_handling')
148
- expect(logged_excluding_reload_filter.last[:message]).to match(/This is an Error/)
149
- expect(logged_excluding_reload_filter.last[:context]).to_not be_empty
150
- expect(service_name: 'exception_handling').to eq(logged_excluding_reload_filter.last[:context])
148
+ assert_match(/This is an Error/, logged_excluding_reload_filter.last[:message])
149
+ assert_not_empty logged_excluding_reload_filter.last[:context]
150
+ assert_equal logged_excluding_reload_filter.last[:context], service_name: 'exception_handling'
151
151
  end
152
152
 
153
- it "log with Severity::FATAL" do
153
+ should "log with Severity::FATAL" do
154
154
  ExceptionHandling.log_error('This is a Warning', service_name: 'exception_handling')
155
- expect('FATAL').to eq(logged_excluding_reload_filter.last[:severity])
155
+ assert_equal logged_excluding_reload_filter.last[:severity], 'FATAL'
156
156
  end
157
157
  end
158
158
 
159
159
  context "#log_warning" do
160
- it "have empty array as a backtrace" do
161
- expect(ExceptionHandling).to receive(:log_error).with((ExceptionHandling::Warning), anything) do |error|
162
- expect(error.backtrace).to eq([])
160
+ should "have empty array as a backtrace" do
161
+ mock(ExceptionHandling).log_error(is_a(ExceptionHandling::Warning), anything) do |error|
162
+ assert_equal [], error.backtrace
163
163
  end
164
164
  ExceptionHandling.log_warning('Now with empty array as a backtrace!')
165
165
  end
166
166
 
167
- it "take in additional key word args as logging context and pass them to the logger" do
167
+ should "take in additional key word args as logging context and pass them to the logger" do
168
168
  ExceptionHandling.log_warning('This is a Warning', service_name: 'exception_handling')
169
- expect(logged_excluding_reload_filter.last[:message]).to match(/This is a Warning/)
170
- expect(logged_excluding_reload_filter.last[:context]).to_not be_empty
171
- expect(service_name: 'exception_handling').to eq(logged_excluding_reload_filter.last[:context])
169
+ assert_match(/This is a Warning/, logged_excluding_reload_filter.last[:message])
170
+ assert_not_empty logged_excluding_reload_filter.last[:context]
171
+ assert_equal logged_excluding_reload_filter.last[:context], service_name: 'exception_handling'
172
172
  end
173
173
 
174
- it "log with Severity::WARN" do
174
+ should "log with Severity::WARN" do
175
175
  ExceptionHandling.log_warning('This is a Warning', service_name: 'exception_handling')
176
- expect('WARN').to eq(logged_excluding_reload_filter.last[:severity])
176
+ assert_equal logged_excluding_reload_filter.last[:severity], 'WARN'
177
177
  end
178
178
  end
179
179
 
180
180
  context "#log_info" do
181
- it "take in additional key word args as logging context and pass them to the logger" do
181
+ should "take in additional key word args as logging context and pass them to the logger" do
182
182
  ExceptionHandling.log_info('This is an Info', service_name: 'exception_handling')
183
- expect(logged_excluding_reload_filter.last[:message]).to match(/This is an Info/)
184
- expect(logged_excluding_reload_filter.last[:context]).to_not be_empty
185
- expect(service_name: 'exception_handling').to eq(logged_excluding_reload_filter.last[:context])
183
+ assert_match(/This is an Info/, logged_excluding_reload_filter.last[:message])
184
+ assert_not_empty logged_excluding_reload_filter.last[:context]
185
+ assert_equal logged_excluding_reload_filter.last[:context], service_name: 'exception_handling'
186
186
  end
187
187
 
188
- it "log with Severity::INFO" do
188
+ should "log with Severity::INFO" do
189
189
  ExceptionHandling.log_info('This is a Warning', service_name: 'exception_handling')
190
- expect('INFO').to eq(logged_excluding_reload_filter.last[:severity])
190
+ assert_equal logged_excluding_reload_filter.last[:severity], 'INFO'
191
191
  end
192
192
  end
193
193
 
194
194
  context "#log_debug" do
195
- it "take in additional key word args as logging context and pass them to the logger" do
195
+ should "take in additional key word args as logging context and pass them to the logger" do
196
196
  ExceptionHandling.log_debug('This is a Debug', service_name: 'exception_handling')
197
- expect(logged_excluding_reload_filter.last[:message]).to match(/This is a Debug/)
198
- expect(logged_excluding_reload_filter.last[:context]).to_not be_empty
199
- expect(service_name: 'exception_handling').to eq(logged_excluding_reload_filter.last[:context])
197
+ assert_match(/This is a Debug/, logged_excluding_reload_filter.last[:message])
198
+ assert_not_empty logged_excluding_reload_filter.last[:context]
199
+ assert_equal logged_excluding_reload_filter.last[:context], service_name: 'exception_handling'
200
200
  end
201
201
 
202
- it "log with Severity::DEBUG" do
202
+ should "log with Severity::DEBUG" do
203
203
  ExceptionHandling.log_debug('This is a Warning', service_name: 'exception_handling')
204
- expect('DEBUG').to eq(logged_excluding_reload_filter.last[:severity])
204
+ assert_equal logged_excluding_reload_filter.last[:severity], 'DEBUG'
205
205
  end
206
206
  end
207
207
 
208
208
  context "#write_exception_to_log" do
209
- it "log warnings with Severity::WARN" do
209
+ should "log warnings with Severity::WARN" do
210
210
  warning = ExceptionHandling::Warning.new('This is a Warning')
211
211
  ExceptionHandling.write_exception_to_log(warning, '', Time.now.to_i, service_name: 'exception_handling')
212
- expect('WARN').to eq(logged_excluding_reload_filter.last[:severity])
212
+ assert_equal logged_excluding_reload_filter.last[:severity], 'WARN'
213
213
  end
214
214
 
215
- it "log everything else with Severity::FATAL" do
215
+ should "log everything else with Severity::FATAL" do
216
216
  error = RuntimeError.new('This is a runtime error')
217
217
  ExceptionHandling.write_exception_to_log(error, '', Time.now.to_i, service_name: 'exception_handling')
218
- expect('FATAL').to eq(logged_excluding_reload_filter.last[:severity])
218
+ assert_equal logged_excluding_reload_filter.last[:severity], 'FATAL'
219
219
  end
220
220
  end
221
221
 
222
222
  context "configuration with custom_data_hook or post_log_error_hook" do
223
- after do
223
+ teardown do
224
224
  ExceptionHandling.custom_data_hook = nil
225
225
  ExceptionHandling.post_log_error_hook = nil
226
226
  end
227
227
 
228
- it "support a custom_data_hook" do
228
+ should "support a custom_data_hook" do
229
229
  capture_notifications
230
230
 
231
231
  ExceptionHandling.custom_data_hook = method(:append_organization_info_config)
232
232
  ExceptionHandling.ensure_safe("context") { raise "Some Exception" }
233
233
 
234
- expect(sent_notifications.last.enhanced_data['user_details'].to_s).to match(/Invoca Engineering Dept./)
234
+ assert_match(/Invoca Engineering Dept./, sent_notifications.last.enhanced_data['user_details'].to_s)
235
235
  end
236
236
 
237
- it "support a log_error hook, and pass exception_data, treat_like_warning, and logged_to_honeybadger to it" do
237
+ should "support a log_error hook, and pass exception_data, treat_like_warning, and logged_to_honeybadger to it" do
238
238
  @honeybadger_status = nil
239
239
  ExceptionHandling.post_log_error_hook = method(:log_error_callback_config)
240
240
 
241
241
  notify_args = []
242
- expect(Honeybadger).to receive(:notify).with(any_args) { |info| notify_args << info; '06220c5a-b471-41e5-baeb-de247da45a56' }
242
+ mock(Honeybadger).notify.with_any_args { |info| notify_args << info; '06220c5a-b471-41e5-baeb-de247da45a56' }
243
243
  ExceptionHandling.ensure_safe("context") { raise "Some Exception" }
244
- expect(@fail_count).to eq(1)
245
- expect(@treat_like_warning).to eq(false)
246
- expect(@honeybadger_status).to eq(:success)
244
+ assert_equal 1, @fail_count
245
+ assert_equal false, @treat_like_warning
246
+ assert_equal :success, @honeybadger_status
247
247
 
248
- expect(@callback_data["notes"]).to eq("this is used by a test")
249
- expect(notify_args.size).to eq(1), notify_args.inspect
250
- expect(notify_args.last[:context].to_s).to match(/this is used by a test/)
248
+ assert_equal "this is used by a test", @callback_data["notes"]
249
+ assert_equal 1, notify_args.size, notify_args.inspect
250
+ assert_match(/this is used by a test/, notify_args.last[:context].to_s)
251
251
  end
252
252
 
253
- it "plumb treat_like_warning and logged_to_honeybadger to log error hook" do
253
+ should "plumb treat_like_warning and logged_to_honeybadger to log error hook" do
254
254
  @honeybadger_status = nil
255
255
  ExceptionHandling.post_log_error_hook = method(:log_error_callback_config)
256
256
  ExceptionHandling.log_error(StandardError.new("Some Exception"), "mooo", treat_like_warning: true)
257
- expect(@fail_count).to eq(1)
258
- expect(@treat_like_warning).to eq(true)
259
- expect(@honeybadger_status).to eq(:skipped)
257
+ assert_equal 1, @fail_count
258
+ assert_equal true, @treat_like_warning
259
+ assert_equal :skipped, @honeybadger_status
260
260
  end
261
261
 
262
- it "include logging context in the exception data" do
262
+ should "include logging context in the exception data" do
263
263
  ExceptionHandling.post_log_error_hook = method(:log_error_callback_config)
264
264
  ExceptionHandling.log_error(StandardError.new("Some Exception"), "mooo", treat_like_warning: true, log_context_test: "contextual_logging")
265
265
 
266
266
  expected_log_context = {
267
267
  "log_context_test" => "contextual_logging"
268
268
  }
269
- expect(@callback_data[:log_context]).to eq(expected_log_context)
269
+ assert_equal expected_log_context, @callback_data[:log_context]
270
270
  end
271
271
 
272
- it "support rescue exceptions from a log_error hook" do
272
+ should "support rescue exceptions from a log_error hook" do
273
273
  ExceptionHandling.post_log_error_hook = method(:log_error_callback_with_failure)
274
274
  log_info_messages = []
275
- allow(ExceptionHandling.logger).to receive(:info).with(any_args) do |message, _|
275
+ stub(ExceptionHandling.logger).info.with_any_args do |message, _|
276
276
  log_info_messages << message
277
277
  end
278
- expect { ExceptionHandling.ensure_safe("mooo") { raise "Some Exception" } }.to_not raise_error
279
- expect(log_info_messages.find { |message| message =~ /Unable to execute custom log_error callback/ }).to be_truthy
278
+ assert_nothing_raised { ExceptionHandling.ensure_safe("mooo") { raise "Some Exception" } }
279
+ assert log_info_messages.find { |message| message =~ /Unable to execute custom log_error callback/ }
280
280
  end
281
281
 
282
- it "handle nil message exceptions resulting from the log_error hook" do
282
+ should "handle nil message exceptions resulting from the log_error hook" do
283
283
  ExceptionHandling.post_log_error_hook = method(:log_error_callback_returns_nil_message_exception)
284
284
  log_info_messages = []
285
- allow(ExceptionHandling.logger).to receive(:info).with(any_args) do |message, _|
285
+ stub(ExceptionHandling.logger).info.with_any_args do |message, _|
286
286
  log_info_messages << message
287
287
  end
288
- expect { ExceptionHandling.ensure_safe("mooo") { raise "Some Exception" } }.to_not raise_error
289
- expect(log_info_messages.find { |message| message =~ /Unable to execute custom log_error callback/ }).to be_truthy
288
+ assert_nothing_raised { ExceptionHandling.ensure_safe("mooo") { raise "Some Exception" } }
289
+ assert log_info_messages.find { |message| message =~ /Unable to execute custom log_error callback/ }
290
290
  end
291
291
 
292
- it "handle nil message exceptions resulting from the custom data hook" do
292
+ should "handle nil message exceptions resulting from the custom data hook" do
293
293
  ExceptionHandling.custom_data_hook = method(:custom_data_callback_returns_nil_message_exception)
294
294
  log_info_messages = []
295
- allow(ExceptionHandling.logger).to receive(:info).with(any_args) do |message, _|
295
+ stub(ExceptionHandling.logger).info.with_any_args do |message, _|
296
296
  log_info_messages << message
297
297
  end
298
- expect { ExceptionHandling.ensure_safe("mooo") { raise "Some Exception" } }.not_to raise_error
299
- expect(log_info_messages.find { |message| message =~ /Unable to execute custom custom_data_hook callback/ }).to be_truthy
298
+ assert_nothing_raised { ExceptionHandling.ensure_safe("mooo") { raise "Some Exception" } }
299
+ assert log_info_messages.find { |message| message =~ /Unable to execute custom custom_data_hook callback/ }
300
300
  end
301
301
  end
302
302
 
303
303
  context "Exception Handling" do
304
304
  context "default_metric_name" do
305
305
  context "when metric_name is present in exception_data" do
306
- it "include metric_name in resulting metric name" do
306
+ should "include metric_name in resulting metric name" do
307
307
  exception = StandardError.new('this is an exception')
308
308
  metric = ExceptionHandling.default_metric_name({ 'metric_name' => 'special_metric' }, exception, true)
309
- expect(metric).to eq('exception_handling.special_metric')
309
+ assert_equal 'exception_handling.special_metric', metric
310
310
  end
311
311
  end
312
312
 
313
313
  context "when metric_name is not present in exception_data" do
314
- it "return exception_handling.warning when using log warning" do
314
+ should "return exception_handling.warning when using log warning" do
315
315
  warning = ExceptionHandling::Warning.new('this is a warning')
316
316
  metric = ExceptionHandling.default_metric_name({}, warning, false)
317
- expect(metric).to eq('exception_handling.warning')
317
+ assert_equal 'exception_handling.warning', metric
318
318
  end
319
319
 
320
- it "return exception_handling.exception when using log error" do
320
+ should "return exception_handling.exception when using log error" do
321
321
  exception = StandardError.new('this is an exception')
322
322
  metric = ExceptionHandling.default_metric_name({}, exception, false)
323
- expect(metric).to eq('exception_handling.exception')
323
+ assert_equal 'exception_handling.exception', metric
324
324
  end
325
325
 
326
326
  context "when using log error with treat_like_warning" do
327
- it "return exception_handling.unforwarded_exception when exception not present" do
327
+ should "return exception_handling.unforwarded_exception when exception not present" do
328
328
  metric = ExceptionHandling.default_metric_name({}, nil, true)
329
- expect(metric).to eq('exception_handling.unforwarded_exception')
329
+ assert_equal 'exception_handling.unforwarded_exception', metric
330
330
  end
331
331
 
332
- it "return exception_handling.unforwarded_exception with exception classname when exception is present" do
332
+ should "return exception_handling.unforwarded_exception with exception classname when exception is present" do
333
333
  module SomeModule
334
334
  class SomeException < StandardError
335
335
  end
@@ -337,43 +337,43 @@ describe ExceptionHandling do
337
337
 
338
338
  exception = SomeModule::SomeException.new('this is an exception')
339
339
  metric = ExceptionHandling.default_metric_name({}, exception, true)
340
- expect(metric).to eq('exception_handling.unforwarded_exception_SomeException')
340
+ assert_equal 'exception_handling.unforwarded_exception_SomeException', metric
341
341
  end
342
342
  end
343
343
  end
344
344
  end
345
345
 
346
346
  context "default_honeybadger_metric_name" do
347
- it "return exception_handling.honeybadger.success when status is :success" do
347
+ should "return exception_handling.honeybadger.success when status is :success" do
348
348
  metric = ExceptionHandling.default_honeybadger_metric_name(:success)
349
- expect(metric).to eq('exception_handling.honeybadger.success')
349
+ assert_equal 'exception_handling.honeybadger.success', metric
350
350
  end
351
351
 
352
- it "return exception_handling.honeybadger.failure when status is :failure" do
352
+ should "return exception_handling.honeybadger.failure when status is :failure" do
353
353
  metric = ExceptionHandling.default_honeybadger_metric_name(:failure)
354
- expect(metric).to eq('exception_handling.honeybadger.failure')
354
+ assert_equal 'exception_handling.honeybadger.failure', metric
355
355
  end
356
356
 
357
- it "return exception_handling.honeybadger.skipped when status is :skipped" do
357
+ should "return exception_handling.honeybadger.skipped when status is :skipped" do
358
358
  metric = ExceptionHandling.default_honeybadger_metric_name(:skipped)
359
- expect(metric).to eq('exception_handling.honeybadger.skipped')
359
+ assert_equal 'exception_handling.honeybadger.skipped', metric
360
360
  end
361
361
 
362
- it "return exception_handling.honeybadger.unknown_status when status is not recognized" do
362
+ should "return exception_handling.honeybadger.unknown_status when status is not recognized" do
363
363
  metric = ExceptionHandling.default_honeybadger_metric_name(nil)
364
- expect(metric).to eq('exception_handling.honeybadger.unknown_status')
364
+ assert_equal 'exception_handling.honeybadger.unknown_status', metric
365
365
  end
366
366
  end
367
367
 
368
368
  context "ExceptionHandling.ensure_safe" do
369
- it "log an exception with call stack if an exception is raised." do
370
- expect(ExceptionHandling.logger).to receive(:fatal).with(/\(blah\):\n.*exception_handling_spec\.rb/, anything)
369
+ should "log an exception with call stack if an exception is raised." do
370
+ mock(ExceptionHandling.logger).fatal(/\(blah\):\n.*exception_handling_test\.rb/, anything)
371
371
  ExceptionHandling.ensure_safe { raise ArgumentError, "blah" }
372
372
  end
373
373
 
374
374
  if ActionView::VERSION::MAJOR >= 5
375
- it "log an exception with call stack if an ActionView template exception is raised." do
376
- expect(ExceptionHandling.logger).to receive(:fatal).with(/\(Error:\d+\) \nActionView::Template::Error: \(blah\):\n /, anything)
375
+ should "log an exception with call stack if an ActionView template exception is raised." do
376
+ mock(ExceptionHandling.logger).fatal(/\(Error:\d+\) \nActionView::Template::Error: \(blah\):\n /, anything)
377
377
  ExceptionHandling.ensure_safe do
378
378
  begin
379
379
  # Rails 5 made the switch from ActionView::TemplateError taking in the original exception
@@ -385,292 +385,297 @@ describe ExceptionHandling do
385
385
  end
386
386
  end
387
387
  else
388
- it "log an exception with call stack if an ActionView template exception is raised." do
389
- expect(ExceptionHandling.logger).to receive(:fatal).with(/\(Error:\d+\) \nActionView::Template::Error: \(blah\):\n /, anything)
388
+ should "log an exception with call stack if an ActionView template exception is raised." do
389
+ mock(ExceptionHandling.logger).fatal(/\(Error:\d+\) \nActionView::Template::Error: \(blah\):\n /, anything)
390
390
  ExceptionHandling.ensure_safe { raise ActionView::TemplateError.new({}, ArgumentError.new("blah")) }
391
391
  end
392
392
  end
393
393
 
394
- it "should not log an exception if an exception is not raised." do
395
- expect(ExceptionHandling.logger).to_not receive(:fatal)
394
+ should "should not log an exception if an exception is not raised." do
395
+ dont_allow(ExceptionHandling.logger).fatal
396
396
  ExceptionHandling.ensure_safe { ; }
397
397
  end
398
398
 
399
- it "return its value if used during an assignment" do
400
- expect(ExceptionHandling.logger).to_not receive(:fatal)
399
+ should "return its value if used during an assignment" do
400
+ dont_allow(ExceptionHandling.logger).fatal
401
401
  b = ExceptionHandling.ensure_safe { 5 }
402
- expect(b).to eq(5)
402
+ assert_equal 5, b
403
403
  end
404
404
 
405
- it "return nil if an exception is raised during an assignment" do
406
- expect(ExceptionHandling.logger).to receive(:fatal).with(/\(blah\):\n.*exception_handling_spec\.rb/, anything)
405
+ should "return nil if an exception is raised during an assignment" do
406
+ mock(ExceptionHandling.logger).fatal(/\(blah\):\n.*exception_handling_test\.rb/, anything)
407
407
  b = ExceptionHandling.ensure_safe { raise ArgumentError, "blah" }
408
- expect(b).to be_nil
408
+ assert_nil b
409
409
  end
410
410
 
411
- it "allow a message to be appended to the error when logged." do
412
- expect(ExceptionHandling.logger).to receive(:fatal).with(/mooo\nArgumentError: \(blah\):\n.*exception_handling_spec\.rb/, anything)
411
+ should "allow a message to be appended to the error when logged." do
412
+ mock(ExceptionHandling.logger).fatal(/mooo\nArgumentError: \(blah\):\n.*exception_handling_test\.rb/, anything)
413
413
  b = ExceptionHandling.ensure_safe("mooo") { raise ArgumentError, "blah" }
414
- expect(b).to be_nil
414
+ assert_nil b
415
415
  end
416
416
 
417
- it "only rescue StandardError and descendents" do
418
- expect { ExceptionHandling.ensure_safe("mooo") { raise Exception } }.to raise_exception(Exception)
417
+ should "only rescue StandardError and descendents" do
418
+ assert_raise(Exception) { ExceptionHandling.ensure_safe("mooo") { raise Exception } }
419
419
 
420
- expect(ExceptionHandling.logger).to receive(:fatal).with(/mooo\nStandardError: \(blah\):\n.*exception_handling_spec\.rb/, anything)
420
+ mock(ExceptionHandling.logger).fatal(/mooo\nStandardError: \(blah\):\n.*exception_handling_test\.rb/, anything)
421
421
 
422
422
  b = ExceptionHandling.ensure_safe("mooo") { raise StandardError, "blah" }
423
- expect(b).to be_nil
423
+ assert_nil b
424
424
  end
425
425
  end
426
426
 
427
427
  context "ExceptionHandling.ensure_completely_safe" do
428
- it "log an exception if an exception is raised." do
429
- expect(ExceptionHandling.logger).to receive(:fatal).with(/\(blah\):\n.*exception_handling_spec\.rb/, anything)
428
+ should "log an exception if an exception is raised." do
429
+ mock(ExceptionHandling.logger).fatal(/\(blah\):\n.*exception_handling_test\.rb/, anything)
430
430
  ExceptionHandling.ensure_completely_safe { raise ArgumentError, "blah" }
431
431
  end
432
432
 
433
- it "should not log an exception if an exception is not raised." do
434
- expect(ExceptionHandling.logger).to receive(:fatal).exactly(0)
433
+ should "should not log an exception if an exception is not raised." do
434
+ mock(ExceptionHandling.logger).fatal.times(0)
435
435
  ExceptionHandling.ensure_completely_safe { ; }
436
436
  end
437
437
 
438
- it "return its value if used during an assignment" do
439
- expect(ExceptionHandling.logger).to receive(:fatal).exactly(0)
438
+ should "return its value if used during an assignment" do
439
+ mock(ExceptionHandling.logger).fatal.times(0)
440
440
  b = ExceptionHandling.ensure_completely_safe { 5 }
441
- expect(b).to eq(5)
441
+ assert_equal 5, b
442
442
  end
443
443
 
444
- it "return nil if an exception is raised during an assignment" do
445
- expect(ExceptionHandling.logger).to receive(:fatal).with(/\(blah\):\n.*exception_handling_spec\.rb/, anything) { nil }
444
+ should "return nil if an exception is raised during an assignment" do
445
+ mock(ExceptionHandling.logger).fatal(/\(blah\):\n.*exception_handling_test\.rb/, anything) { nil }
446
446
  b = ExceptionHandling.ensure_completely_safe { raise ArgumentError, "blah" }
447
- expect(b).to be_nil
447
+ assert_nil b
448
448
  end
449
449
 
450
- it "allow a message to be appended to the error when logged." do
451
- expect(ExceptionHandling.logger).to receive(:fatal).with(/mooo\nArgumentError: \(blah\):\n.*exception_handling_spec\.rb/, anything)
450
+ should "allow a message to be appended to the error when logged." do
451
+ mock(ExceptionHandling.logger).fatal(/mooo\nArgumentError: \(blah\):\n.*exception_handling_test\.rb/, anything)
452
452
  b = ExceptionHandling.ensure_completely_safe("mooo") { raise ArgumentError, "blah" }
453
- expect(b).to be_nil
453
+ assert_nil b
454
454
  end
455
455
 
456
- it "rescue any instance or child of Exception" do
457
- expect(ExceptionHandling.logger).to receive(:fatal).with(/\(blah\):\n.*exception_handling_spec\.rb/, anything)
456
+ should "rescue any instance or child of Exception" do
457
+ mock(ExceptionHandling.logger).fatal(/\(blah\):\n.*exception_handling_test\.rb/, anything)
458
458
  ExceptionHandling.ensure_completely_safe { raise Exception, "blah" }
459
459
  end
460
460
 
461
- it "not rescue the special exceptions that Ruby uses" do
461
+ should "not rescue the special exceptions that Ruby uses" do
462
462
  [SystemExit, SystemStackError, NoMemoryError, SecurityError].each do |exception|
463
- expect do
463
+ assert_raise exception do
464
464
  ExceptionHandling.ensure_completely_safe do
465
465
  raise exception
466
466
  end
467
- end.to raise_exception(exception)
467
+ end
468
468
  end
469
469
  end
470
470
  end
471
471
 
472
472
  context "ExceptionHandling.ensure_escalation" do
473
- before do
473
+ setup do
474
474
  capture_notifications
475
475
  ActionMailer::Base.deliveries.clear
476
476
  end
477
477
 
478
- it "log the exception as usual and send the proper email" do
479
- expect(ExceptionHandling.logger).to receive(:fatal).with(/\(blah\):\n.*exception_handling_spec\.rb/, anything)
478
+ should "log the exception as usual and send the proper email" do
479
+ mock(ExceptionHandling.logger).fatal(/\(blah\):\n.*exception_handling_test\.rb/, anything)
480
480
  ExceptionHandling.ensure_escalation("Favorite Feature") { raise ArgumentError, "blah" }
481
- expect(ActionMailer::Base.deliveries.count).to eq(1)
482
- expect(sent_notifications.size).to eq(1), sent_notifications.inspect
481
+ assert_equal 1, ActionMailer::Base.deliveries.count
482
+ assert_equal 1, sent_notifications.size, sent_notifications.inspect
483
483
 
484
484
  email = ActionMailer::Base.deliveries.last
485
- expect(email.subject).to eq("#{ExceptionHandling.email_environment} Escalation: Favorite Feature")
486
- expect(email.body.to_s).to match('ArgumentError: blah')
487
- expect(email.body.to_s).to match(ExceptionHandling.last_exception_timestamp.to_s)
485
+ assert_equal "#{ExceptionHandling.email_environment} Escalation: Favorite Feature", email.subject
486
+ assert_match 'ArgumentError: blah', email.body.to_s
487
+ assert_match ExceptionHandling.last_exception_timestamp.to_s, email.body.to_s
488
488
  end
489
489
 
490
- it "should not escalate if an exception is not raised." do
491
- expect(ExceptionHandling.logger).to_not receive(:fatal)
490
+ should "should not escalate if an exception is not raised." do
491
+ dont_allow(ExceptionHandling.logger).fatal
492
492
  ExceptionHandling.ensure_escalation('Ignored') { ; }
493
- expect(ActionMailer::Base.deliveries.count).to eq(0)
493
+ assert_equal 0, ActionMailer::Base.deliveries.count
494
494
  end
495
495
 
496
- it "log if the escalation email cannot be sent" do
497
- expect_any_instance_of(Mail::Message).to receive(:deliver).and_raise(RuntimeError.new, "Delivery Error")
496
+ should "log if the escalation email cannot be sent" do
497
+ any_instance_of(Mail::Message) do |message|
498
+ mock(message).deliver { raise RuntimeError.new, "Delivery Error" }
499
+ end
498
500
  log_fatals = []
499
- expect(ExceptionHandling.logger).to receive(:fatal).with(any_args).at_least(:once) do |*args|
500
- log_fatals << args
501
+ stub(ExceptionHandling.logger) do |logger|
502
+ logger.fatal.with_any_args { |*args| log_fatals << args }
501
503
  end
502
504
 
503
505
  ExceptionHandling.ensure_escalation("ensure context") { raise ArgumentError, "first_test_exception" }
504
- expect(log_fatals[0].first).to match(/ArgumentError.*first_test_exception/)
505
- expect(log_fatals[1].first).to match(/safe_email_deliver.*Delivery Error/m)
506
506
 
507
- expect(log_fatals.size).to eq(2), log_fatals.inspect
507
+ assert_match(/ArgumentError.*first_test_exception/, log_fatals[0].first)
508
+ assert_match(/safe_email_deliver.*Delivery Error/m, log_fatals[1].first)
509
+
510
+ assert_equal 2, log_fatals.size, log_fatals.inspect
508
511
 
509
- expect(sent_notifications.size).to eq(1), sent_notifications.inspect # still sent to honeybadger
512
+ assert_equal 1, sent_notifications.size, sent_notifications.inspect # still sent to honeybadger
510
513
  end
511
514
 
512
- it "allow the caller to specify custom recipients" do
515
+ should "allow the caller to specify custom recipients" do
513
516
  custom_recipients = ['something@invoca.com']
514
- expect(ExceptionHandling.logger).to receive(:fatal).with(/\(blah\):\n.*exception_handling_spec\.rb/, anything)
517
+ mock(ExceptionHandling.logger).fatal(/\(blah\):\n.*exception_handling_test\.rb/, anything)
515
518
  ExceptionHandling.ensure_escalation("Favorite Feature", custom_recipients) { raise ArgumentError, "blah" }
516
- expect(ActionMailer::Base.deliveries.count).to eq(1)
517
- expect(sent_notifications.size).to eq(1), sent_notifications.inspect
519
+ assert_equal 1, ActionMailer::Base.deliveries.count
520
+ assert_equal 1, sent_notifications.size, sent_notifications.inspect
518
521
 
519
522
  email = ActionMailer::Base.deliveries.last
520
- expect(email.subject).to eq("#{ExceptionHandling.email_environment} Escalation: Favorite Feature")
521
- expect(email.body.to_s).to match('ArgumentError: blah')
522
- expect(email.body.to_s).to match(ExceptionHandling.last_exception_timestamp.to_s)
523
- expect(email.to).to eq(custom_recipients)
523
+ assert_equal "#{ExceptionHandling.email_environment} Escalation: Favorite Feature", email.subject
524
+ assert_match 'ArgumentError: blah', email.body.to_s
525
+ assert_match ExceptionHandling.last_exception_timestamp.to_s, email.body.to_s
526
+ assert_equal custom_recipients, email.to
524
527
  end
525
528
  end
526
529
 
527
530
  context "ExceptionHandling.ensure_alert" do
528
- it "log the exception as usual and fire a sensu event" do
529
- expect(ExceptionHandling::Sensu).to receive(:generate_event).with("Favorite Feature", "test context\nblah")
530
- expect(ExceptionHandling.logger).to receive(:fatal).with(/\(blah\):\n.*exception_handling_spec\.rb/, anything)
531
+ should "log the exception as usual and fire a sensu event" do
532
+ mock(ExceptionHandling::Sensu).generate_event("Favorite Feature", "test context\nblah")
533
+ mock(ExceptionHandling.logger).fatal(/\(blah\):\n.*exception_handling_test\.rb/, anything)
531
534
  ExceptionHandling.ensure_alert('Favorite Feature', 'test context') { raise ArgumentError, "blah" }
532
535
  end
533
536
 
534
- it "should not send sensu event if an exception is not raised." do
535
- expect(ExceptionHandling.logger).to_not receive(:fatal)
536
- expect(ExceptionHandling::Sensu).to_not receive(:generate_event)
537
+ should "should not send sensu event if an exception is not raised." do
538
+ dont_allow(ExceptionHandling.logger).fatal
539
+ dont_allow(ExceptionHandling::Sensu).generate_event
537
540
  ExceptionHandling.ensure_alert('Ignored', 'test context') { ; }
538
541
  end
539
542
 
540
- it "log if the sensu event could not be sent" do
541
- expect(ExceptionHandling::Sensu).to receive(:send_event).with(anything) { raise "Failed to send" }
542
- expect(ExceptionHandling.logger).to receive(:fatal).with(/first_test_exception/, anything)
543
- expect(ExceptionHandling.logger).to receive(:fatal).with(/Failed to send/, anything)
543
+ should "log if the sensu event could not be sent" do
544
+ mock(ExceptionHandling::Sensu).send_event(anything) { raise "Failed to send" }
545
+ mock(ExceptionHandling.logger) do |logger|
546
+ logger.fatal(/first_test_exception/, anything)
547
+ logger.fatal(/Failed to send/, anything)
548
+ end
544
549
  ExceptionHandling.ensure_alert("Not Used", 'test context') { raise ArgumentError, "first_test_exception" }
545
550
  end
546
551
 
547
- it "log if the exception message is nil" do
548
- expect(ExceptionHandling::Sensu).to receive(:generate_event).with("some alert", "test context\n")
552
+ should "log if the exception message is nil" do
553
+ mock(ExceptionHandling::Sensu).generate_event("some alert", "test context\n")
549
554
  ExceptionHandling.ensure_alert('some alert', 'test context') { raise_exception_with_nil_message }
550
555
  end
551
556
  end
552
557
 
553
558
  context "ExceptionHandling.escalate_to_production_support" do
554
- it "notify production support" do
559
+ should "notify production support" do
555
560
  subject = "Runtime Error found!"
556
561
  exception = RuntimeError.new("Test")
557
562
  recipients = ["prodsupport@example.com"]
558
563
 
559
- expect(ExceptionHandling).to receive(:production_support_recipients).and_return(recipients).exactly(2)
560
- expect(ExceptionHandling).to receive(:escalate).with(subject, exception, ExceptionHandling.last_exception_timestamp, recipients)
564
+ mock(ExceptionHandling).production_support_recipients { recipients }.times(2)
565
+ mock(ExceptionHandling).escalate(subject, exception, ExceptionHandling.last_exception_timestamp, recipients)
561
566
  ExceptionHandling.escalate_to_production_support(exception, subject)
562
567
  end
563
568
  end
564
569
 
565
570
  context "exception timestamp" do
566
- before do
571
+ setup do
567
572
  Time.now_override = Time.parse('1986-5-21 4:17 am UTC')
568
573
  end
569
574
 
570
- it "include the timestamp when the exception is logged" do
575
+ should "include the timestamp when the exception is logged" do
571
576
  capture_notifications
572
577
 
573
- expect(ExceptionHandling.logger).to receive(:fatal).with(/\(Error:517033020\) context\nArgumentError: \(blah\):\n.*exception_handling_spec\.rb/, anything)
578
+ mock(ExceptionHandling.logger).fatal(/\(Error:517033020\) context\nArgumentError: \(blah\):\n.*exception_handling_test\.rb/, anything)
574
579
  b = ExceptionHandling.ensure_safe("context") { raise ArgumentError, "blah" }
575
- expect(b).to be_nil
580
+ assert_nil b
576
581
 
577
- expect(ExceptionHandling.last_exception_timestamp).to eq(517_033_020)
582
+ assert_equal 517_033_020, ExceptionHandling.last_exception_timestamp
578
583
 
579
- expect(sent_notifications.size).to eq(1), sent_notifications.inspect
584
+ assert_equal 1, sent_notifications.size, sent_notifications.inspect
580
585
 
581
- expect(sent_notifications.last.enhanced_data['timestamp']).to eq(517_033_020)
586
+ assert_equal 517_033_020, sent_notifications.last.enhanced_data['timestamp']
582
587
  end
583
588
  end
584
589
 
585
- it "log the error if the exception message is nil" do
590
+ should "log the error if the exception message is nil" do
586
591
  capture_notifications
587
592
 
588
593
  ExceptionHandling.log_error(exception_with_nil_message)
589
594
 
590
- expect(sent_notifications.size).to eq(1), sent_notifications.inspect
591
- expect(sent_notifications.last.enhanced_data['error_string']).to eq('RuntimeError: ')
595
+ assert_equal 1, sent_notifications.size, sent_notifications.inspect
596
+ assert_equal 'RuntimeError: ', sent_notifications.last.enhanced_data['error_string']
592
597
  end
593
598
 
594
- it "log the error if the exception message is nil and the exception context is a hash" do
599
+ should "log the error if the exception message is nil and the exception context is a hash" do
595
600
  capture_notifications
596
601
 
597
602
  ExceptionHandling.log_error(exception_with_nil_message, "SERVER_NAME" => "exceptional.com")
598
603
 
599
- expect(sent_notifications.size).to eq(1), sent_notifications.inspect
600
- expect(sent_notifications.last.enhanced_data['error_string']).to eq('RuntimeError: ')
604
+ assert_equal 1, sent_notifications.size, sent_notifications.inspect
605
+ assert_equal 'RuntimeError: ', sent_notifications.last.enhanced_data['error_string']
601
606
  end
602
607
 
603
608
  context "Honeybadger integration" do
604
609
  context "with Honeybadger not defined" do
605
- before do
606
- allow(ExceptionHandling).to receive(:honeybadger_defined?) { false }
610
+ setup do
611
+ stub(ExceptionHandling).honeybadger_defined? { false }
607
612
  end
608
613
 
609
- it "not invoke send_exception_to_honeybadger when log_error is executed" do
610
- expect(ExceptionHandling).to_not receive(:send_exception_to_honeybadger)
614
+ should "not invoke send_exception_to_honeybadger when log_error is executed" do
615
+ dont_allow(ExceptionHandling).send_exception_to_honeybadger
611
616
  ExceptionHandling.log_error(exception_1)
612
617
  end
613
618
 
614
- it "not invoke send_exception_to_honeybadger when ensure_safe is executed" do
615
- expect(ExceptionHandling).to_not receive(:send_exception_to_honeybadger)
619
+ should "not invoke send_exception_to_honeybadger when ensure_safe is executed" do
620
+ dont_allow(ExceptionHandling).send_exception_to_honeybadger
616
621
  ExceptionHandling.ensure_safe { raise exception_1 }
617
622
  end
618
623
  end
619
624
 
620
625
  context "with Honeybadger defined" do
621
- it "not send_exception_to_honeybadger when log_warning is executed" do
622
- expect(ExceptionHandling).to_not receive(:send_exception_to_honeybadger)
626
+ should "not send_exception_to_honeybadger when log_warning is executed" do
627
+ dont_allow(ExceptionHandling).send_exception_to_honeybadger
623
628
  ExceptionHandling.log_warning("This should not go to honeybadger")
624
629
  end
625
630
 
626
- it "not send_exception_to_honeybadger when log_error is called with a Warning" do
627
- expect(ExceptionHandling).to_not receive(:send_exception_to_honeybadger)
631
+ should "not send_exception_to_honeybadger when log_error is called with a Warning" do
632
+ dont_allow(ExceptionHandling).send_exception_to_honeybadger
628
633
  ExceptionHandling.log_error(ExceptionHandling::Warning.new("This should not go to honeybadger"))
629
634
  end
630
635
 
631
- it "invoke send_exception_to_honeybadger when log_error is executed" do
632
- expect(ExceptionHandling).to receive(:send_exception_to_honeybadger).with(any_args).and_call_original
636
+ should "invoke send_exception_to_honeybadger when log_error is executed" do
637
+ mock.proxy(ExceptionHandling).send_exception_to_honeybadger.with_any_args
633
638
  ExceptionHandling.log_error(exception_1)
634
639
  end
635
640
 
636
- it "invoke send_exception_to_honeybadger when log_error_rack is executed" do
637
- expect(ExceptionHandling).to receive(:send_exception_to_honeybadger).with(any_args).and_call_original
641
+ should "invoke send_exception_to_honeybadger when log_error_rack is executed" do
642
+ mock.proxy(ExceptionHandling).send_exception_to_honeybadger.with_any_args
638
643
  ExceptionHandling.log_error_rack(exception_1, {}, nil)
639
644
  end
640
645
 
641
- it "invoke send_exception_to_honeybadger when ensure_safe is executed" do
642
- expect(ExceptionHandling).to receive(:send_exception_to_honeybadger).with(any_args).and_call_original
646
+ should "invoke send_exception_to_honeybadger when ensure_safe is executed" do
647
+ mock.proxy(ExceptionHandling).send_exception_to_honeybadger.with_any_args
643
648
  ExceptionHandling.ensure_safe { raise exception_1 }
644
649
  end
645
650
 
646
- it "specify error message as an empty string when notifying honeybadger if exception message is nil" do
647
- expect(Honeybadger).to receive(:notify).with(any_args) do |args|
648
- expect(args[:error_message]).to eq("")
651
+ should "specify error message as an empty string when notifying honeybadger if exception message is nil" do
652
+ mock(Honeybadger).notify.with_any_args do |args|
653
+ assert_equal "", args[:error_message]
649
654
  end
650
655
  ExceptionHandling.log_error(exception_with_nil_message)
651
656
  end
652
657
 
653
658
  context "with stubbed values" do
654
- before do
659
+ setup do
655
660
  Time.now_override = Time.now
656
661
  @env = { server: "fe98" }
657
662
  @parameters = { advertiser_id: 435, controller: "some_controller" }
658
663
  @session = { username: "jsmith" }
659
664
  @request_uri = "host/path"
660
665
  @controller = create_dummy_controller(@env, @parameters, @session, @request_uri)
661
- allow(ExceptionHandling).to receive(:server_name) { "invoca_fe98" }
666
+ stub(ExceptionHandling).server_name { "invoca_fe98" }
662
667
 
663
668
  @exception = StandardError.new("Some Exception")
664
669
  @exception.set_backtrace([
665
- "spec/unit/exception_handling_spec.rb:847:in `exception_1'",
666
- "spec/unit/exception_handling_spec.rb:455:in `block (4 levels) in <class:ExceptionHandlingTest>'"
670
+ "test/unit/exception_handling_test.rb:847:in `exception_1'",
671
+ "test/unit/exception_handling_test.rb:455:in `block (4 levels) in <class:ExceptionHandlingTest>'"
667
672
  ])
668
673
  @exception_context = { "SERVER_NAME" => "exceptional.com" }
669
674
  end
670
675
 
671
- it "send error details and relevant context data to Honeybadger with log_context" do
676
+ should "send error details and relevant context data to Honeybadger with log_context" do
672
677
  honeybadger_data = nil
673
- expect(Honeybadger).to receive(:notify).with(any_args) do |data|
678
+ mock(Honeybadger).notify.with_any_args do |data|
674
679
  honeybadger_data = data
675
680
  end
676
681
  ExceptionHandling.logger.global_context = { service_name: "rails", region: "AWS-us-east-1" }
@@ -708,19 +713,19 @@ describe ExceptionHandling do
708
713
  "SERVER_NAME" => "exceptional.com"
709
714
  },
710
715
  backtrace: [
711
- "spec/unit/exception_handling_spec.rb:847:in `exception_1'",
712
- "spec/unit/exception_handling_spec.rb:455:in `block (4 levels) in <class:ExceptionHandlingTest>'"
716
+ "test/unit/exception_handling_test.rb:847:in `exception_1'",
717
+ "test/unit/exception_handling_test.rb:455:in `block (4 levels) in <class:ExceptionHandlingTest>'"
713
718
  ],
714
719
  event_response: "Event successfully received",
715
720
  log_context: { "service_name" => "bin/console", "region" => "AWS-us-east-1", "log_source" => "gem/listen" }
716
721
  }
717
722
  }
718
- expect(honeybadger_data).to eq(expected_data)
723
+ assert_equal_with_diff expected_data, honeybadger_data
719
724
  end
720
725
 
721
- it "send error details and relevant context data to Honeybadger with empty log_context" do
726
+ should "send error details and relevant context data to Honeybadger with empty log_context" do
722
727
  honeybadger_data = nil
723
- expect(Honeybadger).to receive(:notify).with(any_args) do |data|
728
+ mock(Honeybadger).notify.with_any_args do |data|
724
729
  honeybadger_data = data
725
730
  end
726
731
  ExceptionHandling.logger.global_context = {}
@@ -758,22 +763,22 @@ describe ExceptionHandling do
758
763
  "SERVER_NAME" => "exceptional.com"
759
764
  },
760
765
  backtrace: [
761
- "spec/unit/exception_handling_spec.rb:847:in `exception_1'",
762
- "spec/unit/exception_handling_spec.rb:455:in `block (4 levels) in <class:ExceptionHandlingTest>'"
766
+ "test/unit/exception_handling_test.rb:847:in `exception_1'",
767
+ "test/unit/exception_handling_test.rb:455:in `block (4 levels) in <class:ExceptionHandlingTest>'"
763
768
  ],
764
769
  event_response: "Event successfully received"
765
770
  }
766
771
  }
767
- expect(honeybadger_data).to eq(expected_data)
772
+ assert_equal_with_diff expected_data, honeybadger_data
768
773
  end
769
774
  end
770
775
 
771
776
  context "with post_log_error_hook set" do
772
- after do
777
+ teardown do
773
778
  ExceptionHandling.post_log_error_hook = nil
774
779
  end
775
780
 
776
- it "not send notification to honeybadger when exception description has the flag turned off and call log error callback with logged_to_honeybadger set to nil" do
781
+ should "not send notification to honeybadger when exception description has the flag turned off and call log error callback with logged_to_honeybadger set to nil" do
777
782
  @honeybadger_status = nil
778
783
  ExceptionHandling.post_log_error_hook = method(:log_error_callback_config)
779
784
  filter_list = {
@@ -782,37 +787,37 @@ describe ExceptionHandling do
782
787
  send_to_honeybadger: false
783
788
  }
784
789
  }
785
- allow(File).to receive(:mtime) { incrementing_mtime }
786
- expect(YAML).to receive(:load_file).with(any_args) { ActiveSupport::HashWithIndifferentAccess.new(filter_list) }.at_least(1)
790
+ stub(File).mtime { incrementing_mtime }
791
+ mock(YAML).load_file.with_any_args { ActiveSupport::HashWithIndifferentAccess.new(filter_list) }.at_least(1)
787
792
 
788
- expect(ExceptionHandling).to receive(:send_exception_to_honeybadger_unless_filtered).with(any_args).exactly(1).and_call_original
789
- expect(Honeybadger).to_not receive(:notify)
793
+ mock.proxy(ExceptionHandling).send_exception_to_honeybadger_unless_filtered.with_any_args.once
794
+ dont_allow(Honeybadger).notify
790
795
  ExceptionHandling.log_error(StandardError.new("suppress Honeybadger notification"))
791
- expect(@honeybadger_status).to eq(:skipped)
796
+ assert_equal :skipped, @honeybadger_status
792
797
  end
793
798
 
794
- it "call log error callback with logged_to_honeybadger set to false if an error occurs while attempting to notify honeybadger" do
799
+ should "call log error callback with logged_to_honeybadger set to false if an error occurs while attempting to notify honeybadger" do
795
800
  @honeybadger_status = nil
796
801
  ExceptionHandling.post_log_error_hook = method(:log_error_callback_config)
797
- expect(Honeybadger).to receive(:notify).with(any_args) { raise "Honeybadger Notification Failure" }
802
+ mock(Honeybadger).notify.with_any_args { raise "Honeybadger Notification Failure" }
798
803
  ExceptionHandling.log_error(exception_1)
799
- expect(@honeybadger_status).to eq(:failure)
804
+ assert_equal :failure, @honeybadger_status
800
805
  end
801
806
 
802
- it "call log error callback with logged_to_honeybadger set to false on unsuccessful honeybadger notification" do
807
+ should "call log error callback with logged_to_honeybadger set to false on unsuccessful honeybadger notification" do
803
808
  @honeybadger_status = nil
804
809
  ExceptionHandling.post_log_error_hook = method(:log_error_callback_config)
805
- expect(Honeybadger).to receive(:notify).with(any_args) { false }
810
+ mock(Honeybadger).notify.with_any_args { false }
806
811
  ExceptionHandling.log_error(exception_1)
807
- expect(@honeybadger_status).to eq(:failure)
812
+ assert_equal :failure, @honeybadger_status
808
813
  end
809
814
 
810
- it "call log error callback with logged_to_honeybadger set to true on successful honeybadger notification" do
815
+ should "call log error callback with logged_to_honeybadger set to true on successful honeybadger notification" do
811
816
  @honeybadger_status = nil
812
817
  ExceptionHandling.post_log_error_hook = method(:log_error_callback_config)
813
- expect(Honeybadger).to receive(:notify).with(any_args) { '06220c5a-b471-41e5-baeb-de247da45a56' }
818
+ mock(Honeybadger).notify.with_any_args { '06220c5a-b471-41e5-baeb-de247da45a56' }
814
819
  ExceptionHandling.log_error(exception_1)
815
- expect(@honeybadger_status).to eq(:success)
820
+ assert_equal :success, @honeybadger_status
816
821
  end
817
822
  end
818
823
  end
@@ -824,33 +829,33 @@ describe ExceptionHandling do
824
829
  end
825
830
  end
826
831
 
827
- it "allow sections to have data with just a to_s method" do
832
+ should "allow sections to have data with just a to_s method" do
828
833
  capture_notifications
829
834
 
830
835
  ExceptionHandling.log_error("This is my RingSwitch example.") do |data|
831
836
  data.merge!(event_response: EventResponse.new)
832
837
  end
833
838
 
834
- expect(sent_notifications.size).to eq(1), sent_notifications.inspect
835
- expect(sent_notifications.last.enhanced_data['event_response'].to_s).to match(/message from to_s!/)
839
+ assert_equal 1, sent_notifications.size, sent_notifications.inspect
840
+ assert_match(/message from to_s!/, sent_notifications.last.enhanced_data['event_response'].to_s)
836
841
  end
837
842
  end
838
843
 
839
- it "return the error ID (timestamp)" do
844
+ should "return the error ID (timestamp)" do
840
845
  result = ExceptionHandling.log_error(RuntimeError.new("A runtime error"), "Runtime message")
841
- expect(result).to eq(ExceptionHandling.last_exception_timestamp)
846
+ assert_equal ExceptionHandling.last_exception_timestamp, result
842
847
  end
843
848
 
844
- it "rescue exceptions that happen in log_error" do
845
- allow(ExceptionHandling).to receive(:make_exception) { raise ArgumentError, "Bad argument" }
846
- expect(ExceptionHandling).to receive(:write_exception_to_log).with(satisfy { |ex| ex.to_s['Bad argument'] },
849
+ should "rescue exceptions that happen in log_error" do
850
+ stub(ExceptionHandling).make_exception { raise ArgumentError, "Bad argument" }
851
+ mock(ExceptionHandling).write_exception_to_log(satisfy { |ex| ex.to_s['Bad argument'] },
847
852
  satisfy { |context| context['ExceptionHandlingError: log_error rescued exception while logging Runtime message'] },
848
853
  anything)
849
854
  ExceptionHandling.log_error(RuntimeError.new("A runtime error"), "Runtime message")
850
855
  end
851
856
 
852
- it "rescue exceptions that happen when log_error yields" do
853
- expect(ExceptionHandling).to receive(:write_exception_to_log).with(satisfy { |ex| ex.to_s['Bad argument'] },
857
+ should "rescue exceptions that happen when log_error yields" do
858
+ mock(ExceptionHandling).write_exception_to_log(satisfy { |ex| ex.to_s['Bad argument'] },
854
859
  satisfy { |context| context['Context message'] },
855
860
  anything,
856
861
  anything)
@@ -858,38 +863,38 @@ describe ExceptionHandling do
858
863
  end
859
864
 
860
865
  context "Exception Filtering" do
861
- before do
866
+ setup do
862
867
  filter_list = { exception1: { 'error' => "my error message" },
863
868
  exception2: { 'error' => "some other message", :session => "misc data" } }
864
- allow(YAML).to receive(:load_file) { ActiveSupport::HashWithIndifferentAccess.new(filter_list) }
869
+ stub(YAML).load_file { ActiveSupport::HashWithIndifferentAccess.new(filter_list) }
865
870
 
866
871
  # bump modified time up to get the above filter loaded
867
- allow(File).to receive(:mtime) { incrementing_mtime }
872
+ stub(File).mtime { incrementing_mtime }
868
873
  end
869
874
 
870
- it "handle case where filter list is not found" do
871
- allow(YAML).to receive(:load_file) { raise Errno::ENOENT, "File not found" }
875
+ should "handle case where filter list is not found" do
876
+ stub(YAML).load_file { raise Errno::ENOENT, "File not found" }
872
877
 
873
878
  capture_notifications
874
879
 
875
880
  ExceptionHandling.log_error("My error message is in list")
876
- expect(sent_notifications.size).to eq(1), sent_notifications.inspect
881
+ assert_equal 1, sent_notifications.size, sent_notifications.inspect
877
882
  end
878
883
 
879
- it "log exception and suppress email when exception is on filter list" do
884
+ should "log exception and suppress email when exception is on filter list" do
880
885
  capture_notifications
881
886
 
882
887
  ExceptionHandling.log_error("Error message is not in list")
883
- expect(sent_notifications.size).to eq(1), sent_notifications.inspect
888
+ assert_equal 1, sent_notifications.size, sent_notifications.inspect
884
889
 
885
890
  sent_notifications.clear
886
891
  ExceptionHandling.log_error("My error message is in list")
887
- expect(sent_notifications.size).to eq(0), sent_notifications.inspect
892
+ assert_equal 0, sent_notifications.size, sent_notifications.inspect
888
893
  end
889
894
 
890
- it "allow filtering exception on any text in exception data" do
895
+ should "allow filtering exception on any text in exception data" do
891
896
  filters = { exception1: { session: "data: my extra session data" } }
892
- allow(YAML).to receive(:load_file) { ActiveSupport::HashWithIndifferentAccess.new(filters) }
897
+ stub(YAML).load_file { ActiveSupport::HashWithIndifferentAccess.new(filters) }
893
898
 
894
899
  capture_notifications
895
900
 
@@ -899,7 +904,7 @@ describe ExceptionHandling do
899
904
  data: "my extra session data"
900
905
  }
901
906
  end
902
- expect(sent_notifications.size).to eq(0), sent_notifications.inspect
907
+ assert_equal 0, sent_notifications.size, sent_notifications.inspect
903
908
 
904
909
  ExceptionHandling.log_error("No match here") do |data|
905
910
  data[:session] = {
@@ -907,86 +912,86 @@ describe ExceptionHandling do
907
912
  data: "my extra session <no match!> data"
908
913
  }
909
914
  end
910
- expect(sent_notifications.size).to eq(1), sent_notifications.inspect
915
+ assert_equal 1, sent_notifications.size, sent_notifications.inspect
911
916
  end
912
917
 
913
- it "reload filter list on the next exception if file was modified" do
918
+ should "reload filter list on the next exception if file was modified" do
914
919
  capture_notifications
915
920
 
916
921
  ExceptionHandling.log_error("Error message is not in list")
917
- expect(sent_notifications.size).to eq(1), sent_notifications.inspect
922
+ assert_equal 1, sent_notifications.size, sent_notifications.inspect
918
923
 
919
924
  filter_list = { exception1: { 'error' => "Error message is not in list" } }
920
- allow(YAML).to receive(:load_file) { ActiveSupport::HashWithIndifferentAccess.new(filter_list) }
921
- allow(File).to receive(:mtime) { incrementing_mtime }
925
+ stub(YAML).load_file { ActiveSupport::HashWithIndifferentAccess.new(filter_list) }
926
+ stub(File).mtime { incrementing_mtime }
922
927
 
923
928
  sent_notifications.clear
924
929
  ExceptionHandling.log_error("Error message is not in list")
925
- expect(sent_notifications.size).to eq(0), sent_notifications.inspect
930
+ assert_equal 0, sent_notifications.size, sent_notifications.inspect
926
931
  end
927
932
 
928
- it "not consider filter if both error message and body do not match" do
933
+ should "not consider filter if both error message and body do not match" do
929
934
  capture_notifications
930
935
 
931
936
  # error message matches, but not full text
932
937
  ExceptionHandling.log_error("some other message")
933
- expect(sent_notifications.size).to eq(1), sent_notifications.inspect
938
+ assert_equal 1, sent_notifications.size, sent_notifications.inspect
934
939
 
935
940
  # now both match
936
941
  sent_notifications.clear
937
942
  ExceptionHandling.log_error("some other message") do |data|
938
943
  data[:session] = { some_random_key: "misc data" }
939
944
  end
940
- expect(sent_notifications.size).to eq(0), sent_notifications.inspect
945
+ assert_equal 0, sent_notifications.size, sent_notifications.inspect
941
946
  end
942
947
 
943
- it "skip environment keys not on whitelist" do
948
+ should "skip environment keys not on whitelist" do
944
949
  capture_notifications
945
950
 
946
951
  ExceptionHandling.log_error("some message") do |data|
947
952
  data[:environment] = { SERVER_PROTOCOL: "HTTP/1.0", RAILS_SECRETS_YML_CONTENTS: 'password: VERY_SECRET_PASSWORD' }
948
953
  end
949
- expect(sent_notifications.size).to eq(1), sent_notifications.inspect
954
+ assert_equal 1, sent_notifications.size, sent_notifications.inspect
950
955
 
951
956
  mail = sent_notifications.last
952
957
  environment = mail.enhanced_data['environment']
953
958
 
954
- expect(environment["RAILS_SECRETS_YML_CONTENTS"]).to be_nil, environment.inspect # this is not on whitelist).to be_nil
955
- expect(environment["SERVER_PROTOCOL"]).to be_truthy, environment.inspect # this is
959
+ assert_nil environment["RAILS_SECRETS_YML_CONTENTS"], environment.inspect # this is not on whitelist
960
+ assert environment["SERVER_PROTOCOL"], environment.inspect # this is
956
961
  end
957
962
 
958
- it "omit environment defaults" do
963
+ should "omit environment defaults" do
959
964
  capture_notifications
960
965
 
961
- allow(ExceptionHandling).to receive(:send_exception_to_honeybadger).with(anything) { |exception_info| sent_notifications << exception_info }
966
+ stub(ExceptionHandling).send_exception_to_honeybadger(anything) { |exception_info| sent_notifications << exception_info }
962
967
 
963
968
  ExceptionHandling.log_error("some message") do |data|
964
969
  data[:environment] = { SERVER_PORT: '80', SERVER_PROTOCOL: "HTTP/1.0" }
965
970
  end
966
- expect(sent_notifications.size).to eq(1), sent_notifications.inspect
971
+ assert_equal 1, sent_notifications.size, sent_notifications.inspect
967
972
  mail = sent_notifications.last
968
973
  environment = mail.enhanced_data['environment']
969
974
 
970
- expect(environment["SERVER_PORT"]).to be_nil, environment.inspect # this was default).to be_nil
971
- expect(environment["SERVER_PROTOCOL"]).to be_truthy, environment.inspect # this was not
975
+ assert_nil environment["SERVER_PORT"], environment.inspect # this was default
976
+ assert environment["SERVER_PROTOCOL"], environment # this was not
972
977
  end
973
978
 
974
- it "reject the filter file if any contain all empty regexes" do
979
+ should "reject the filter file if any contain all empty regexes" do
975
980
  filter_list = { exception1: { 'error' => "", :session => "" },
976
981
  exception2: { 'error' => "is not in list", :session => "" } }
977
- allow(YAML).to receive(:load_file) { ActiveSupport::HashWithIndifferentAccess.new(filter_list) }
978
- allow(File).to receive(:mtime) { incrementing_mtime }
982
+ stub(YAML).load_file { ActiveSupport::HashWithIndifferentAccess.new(filter_list) }
983
+ stub(File).mtime { incrementing_mtime }
979
984
 
980
985
  capture_notifications
981
986
 
982
987
  ExceptionHandling.log_error("Error message is not in list")
983
- expect(sent_notifications.size).to eq(1), sent_notifications.inspect
988
+ assert_equal 1, sent_notifications.size, sent_notifications.inspect
984
989
  end
985
990
 
986
- it "reload filter file if filename changes" do
991
+ should "reload filter file if filename changes" do
987
992
  catalog = ExceptionHandling.exception_catalog
988
993
  ExceptionHandling.filter_list_filename = "./config/other_exception_filters.yml"
989
- expect(ExceptionHandling.exception_catalog).to_not eq(catalog)
994
+ assert_not_equal catalog, ExceptionHandling.exception_catalog
990
995
  end
991
996
 
992
997
  context "Exception Handling Mailer" do
@@ -1000,7 +1005,7 @@ describe ExceptionHandling do
1000
1005
 
1001
1006
  [[true, false], [true, true]].each do |em_flag, synchrony_flag|
1002
1007
  context "eventmachine_safe = #{em_flag} && eventmachine_synchrony = #{synchrony_flag}" do
1003
- before do
1008
+ setup do
1004
1009
  ExceptionHandling.eventmachine_safe = em_flag
1005
1010
  ExceptionHandling.eventmachine_synchrony = synchrony_flag
1006
1011
  EventMachineStub.block = nil
@@ -1010,60 +1015,61 @@ describe ExceptionHandling do
1010
1015
  set_test_const('EventMachine::DNS::Resolver', DNSResolvStub)
1011
1016
  end
1012
1017
 
1013
- after do
1018
+ teardown do
1014
1019
  ExceptionHandling.eventmachine_safe = false
1015
1020
  ExceptionHandling.eventmachine_synchrony = false
1016
1021
  end
1017
1022
 
1018
- it "schedule EventMachine STMP when EventMachine defined" do
1023
+ should "schedule EventMachine STMP when EventMachine defined" do
1019
1024
  ActionMailer::Base.deliveries.clear
1020
1025
 
1021
1026
  set_test_const('EventMachine::Protocols::SmtpClient', SmtpClientStub)
1022
1027
 
1023
1028
  ExceptionHandling.ensure_escalation("ensure message") { raise 'Exception to escalate!' }
1024
- expect(EventMachineStub.block).to be_truthy
1029
+ assert EventMachineStub.block
1025
1030
  EventMachineStub.block.call
1026
- expect(DNSResolvStub.callback_block).to be_truthy
1031
+ assert DNSResolvStub.callback_block
1027
1032
  DNSResolvStub.callback_block.call ['127.0.0.1']
1028
- expect((SmtpClientStub.send_hash & EXPECTED_SMTP_HASH.keys).map_hash { |_k, v| v.to_s }) .to eq(EXPECTED_SMTP_HASH), SmtpClientStub.send_hash.inspect
1029
- expect(SmtpClientStub.last_method).to eq((synchrony_flag ? :asend : :send))
1030
- expect(SmtpClientStub.send_hash[:content]).to match(/Exception to escalate/)
1033
+ assert_equal_with_diff EXPECTED_SMTP_HASH, (SmtpClientStub.send_hash & EXPECTED_SMTP_HASH.keys).map_hash { |_k, v| v.to_s }, SmtpClientStub.send_hash.inspect
1034
+ assert_equal((synchrony_flag ? :asend : :send), SmtpClientStub.last_method)
1035
+ assert_match(/Exception to escalate/, SmtpClientStub.send_hash[:content])
1031
1036
  assert_emails 0, ActionMailer::Base.deliveries.*.to_s
1032
1037
  end
1033
1038
 
1034
- it "pass the content as a proper rfc 2822 message" do
1039
+ should "pass the content as a proper rfc 2822 message" do
1035
1040
  set_test_const('EventMachine::Protocols::SmtpClient', SmtpClientStub)
1036
1041
  ExceptionHandling.ensure_escalation("ensure message") { raise 'Exception to escalate!' }
1037
- expect(EventMachineStub.block).to be_truthy
1042
+ assert EventMachineStub.block
1038
1043
  EventMachineStub.block.call
1039
- expect(DNSResolvStub.callback_block).to be_truthy
1044
+ assert DNSResolvStub.callback_block
1040
1045
  DNSResolvStub.callback_block.call ['127.0.0.1']
1041
- expect(content = SmtpClientStub.send_hash[:content]).to be_truthy
1042
- expect(content).to match(/Content-Transfer-Encoding: 7bit/)
1043
- expect(content).to match(/\r\n\.\r\n\z/)
1046
+ assert content = SmtpClientStub.send_hash[:content]
1047
+ assert_match(/Content-Transfer-Encoding: 7bit/, content)
1048
+ assert_match(/\r\n\.\r\n\z/, content)
1044
1049
  end
1045
1050
 
1046
- it "log fatal on EventMachine STMP errback" do
1051
+ should "log fatal on EventMachine STMP errback" do
1047
1052
  ActionMailer::Base.deliveries.clear
1048
1053
 
1049
1054
  set_test_const('EventMachine::Protocols::SmtpClient', SmtpClientErrbackStub)
1050
- expect(ExceptionHandling.logger).to receive(:fatal).with(/Exception to escalate/, anything)
1051
- expect(ExceptionHandling.logger).to receive(:fatal).with(/Failed to email by SMTP: "credential mismatch"/)
1055
+ mock(ExceptionHandling.logger).fatal(/Exception to escalate/, anything)
1056
+ mock(ExceptionHandling.logger).fatal(/Failed to email by SMTP: "credential mismatch"/)
1052
1057
 
1053
1058
  ExceptionHandling.ensure_escalation("ensure message") { raise 'Exception to escalate!' }
1054
- expect(EventMachineStub.block).to be_truthy
1059
+ assert EventMachineStub.block
1055
1060
  EventMachineStub.block.call
1056
- expect(DNSResolvStub.callback_block).to be_truthy
1061
+ assert DNSResolvStub.callback_block
1057
1062
  DNSResolvStub.callback_block.call(['127.0.0.1'])
1058
1063
  SmtpClientErrbackStub.block.call("credential mismatch")
1059
- expect((SmtpClientErrbackStub.send_hash & EXPECTED_SMTP_HASH.keys).map_hash { |_k, v| v.to_s }).to eq(EXPECTED_SMTP_HASH), SmtpClientErrbackStub.send_hash.inspect end
1064
+ assert_equal_with_diff EXPECTED_SMTP_HASH, (SmtpClientErrbackStub.send_hash & EXPECTED_SMTP_HASH.keys).map_hash { |_k, v| v.to_s }, SmtpClientErrbackStub.send_hash.inspect
1065
+ end
1060
1066
 
1061
- it "log fatal on EventMachine dns resolver errback" do
1062
- expect(ExceptionHandling.logger).to receive(:fatal).with(/Exception to escalate/, anything)
1063
- expect(ExceptionHandling.logger).to receive(:fatal).with(/Failed to resolv DNS for localhost: "softlayer sucks"/)
1067
+ should "log fatal on EventMachine dns resolver errback" do
1068
+ mock(ExceptionHandling.logger).fatal(/Exception to escalate/, anything)
1069
+ mock(ExceptionHandling.logger).fatal(/Failed to resolv DNS for localhost: "softlayer sucks"/)
1064
1070
 
1065
1071
  ExceptionHandling.ensure_escalation("ensure message") { raise 'Exception to escalate!' }
1066
- expect(EventMachineStub.block).to be_truthy
1072
+ assert EventMachineStub.block
1067
1073
  EventMachineStub.block.call
1068
1074
  DNSResolvStub.errback_block.call("softlayer sucks")
1069
1075
  end
@@ -1073,7 +1079,7 @@ describe ExceptionHandling do
1073
1079
  end
1074
1080
 
1075
1081
  context "Exception mapping" do
1076
- before do
1082
+ setup do
1077
1083
  @data = {
1078
1084
  environment: {
1079
1085
  'HTTP_HOST' => "localhost",
@@ -1098,17 +1104,17 @@ describe ExceptionHandling do
1098
1104
  }
1099
1105
  end
1100
1106
 
1101
- it "clean backtraces" do
1107
+ should "clean backtraces" do
1102
1108
  begin
1103
1109
  raise "test exception"
1104
1110
  rescue => ex
1105
1111
  backtrace = ex.backtrace
1106
1112
  end
1107
1113
  result = ExceptionHandling.send(:clean_backtrace, ex).to_s
1108
- expect(backtrace).to_not eq(result)
1114
+ assert_not_equal result, backtrace
1109
1115
  end
1110
1116
 
1111
- it "return entire backtrace if cleaned is emtpy" do
1117
+ should "return entire backtrace if cleaned is emtpy" do
1112
1118
  begin
1113
1119
  backtrace = ["/Users/peter/ringrevenue/web/vendor/rails-3.2.12/activerecord/lib/active_record/relation/finder_methods.rb:312:in `find_with_ids'",
1114
1120
  "/Users/peter/ringrevenue/web/vendor/rails-3.2.12/activerecord/lib/active_record/relation/finder_methods.rb:107:in `find'",
@@ -1146,14 +1152,12 @@ describe ExceptionHandling do
1146
1152
  end
1147
1153
  end
1148
1154
 
1149
- rails = double(Rails)
1150
- expect(rails).to receive(:backtrace_cleaner) { Rails::BacktraceCleaner.new }
1151
- rails.backtrace_cleaner
1155
+ mock(Rails).backtrace_cleaner { Rails::BacktraceCleaner.new }
1152
1156
 
1153
1157
  ex = Exception.new
1154
1158
  ex.set_backtrace(backtrace)
1155
1159
  result = ExceptionHandling.send(:clean_backtrace, ex)
1156
- expect(result).to eq(backtrace)
1160
+ assert_equal backtrace, result
1157
1161
  ensure
1158
1162
  Object.send(:remove_const, :Rails)
1159
1163
  end
@@ -1161,36 +1165,36 @@ describe ExceptionHandling do
1161
1165
  end
1162
1166
 
1163
1167
  context "log_perodically" do
1164
- before do
1168
+ setup do
1165
1169
  Time.now_override = Time.now # Freeze time
1166
1170
  ExceptionHandling.logger.clear
1167
1171
  end
1168
1172
 
1169
- after do
1173
+ teardown do
1170
1174
  Time.now_override = nil
1171
1175
  end
1172
1176
 
1173
- it "take in additional logging context and pass them to the logger" do
1177
+ should "take in additional logging context and pass them to the logger" do
1174
1178
  ExceptionHandling.log_periodically(:test_context_with_periodic, 30.minutes, "this will be written", service_name: 'exception_handling')
1175
- expect(logged_excluding_reload_filter.last[:context]).to_not be_empty
1176
- expect(logged_excluding_reload_filter.last[:context]).to eq({ service_name: 'exception_handling' })
1179
+ assert_not_empty logged_excluding_reload_filter.last[:context]
1180
+ assert_equal({ service_name: 'exception_handling' }, logged_excluding_reload_filter.last[:context])
1177
1181
  end
1178
1182
 
1179
- it "log immediately when we are expected to log" do
1183
+ should "log immediately when we are expected to log" do
1180
1184
  ExceptionHandling.log_periodically(:test_periodic_exception, 30.minutes, "this will be written")
1181
- expect(logged_excluding_reload_filter.size).to eq(1)
1185
+ assert_equal 1, logged_excluding_reload_filter.size
1182
1186
 
1183
1187
  Time.now_override = Time.now + 5.minutes
1184
1188
  ExceptionHandling.log_periodically(:test_periodic_exception, 30.minutes, "this will not be written")
1185
- expect(logged_excluding_reload_filter.size).to eq(1)
1189
+ assert_equal 1, logged_excluding_reload_filter.size
1186
1190
 
1187
1191
  ExceptionHandling.log_periodically(:test_another_periodic_exception, 30.minutes, "this will be written")
1188
- expect(logged_excluding_reload_filter.size).to eq(2)
1192
+ assert_equal 2, logged_excluding_reload_filter.size
1189
1193
 
1190
1194
  Time.now_override = Time.now + 26.minutes
1191
1195
 
1192
1196
  ExceptionHandling.log_periodically(:test_periodic_exception, 30.minutes, "this will be written")
1193
- expect(logged_excluding_reload_filter.size).to eq(3)
1197
+ assert_equal 3, logged_excluding_reload_filter.size
1194
1198
  end
1195
1199
  end
1196
1200
  end