exception_handling 2.6.0 → 2.6.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (29) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -1
  3. data/.jenkins/Jenkinsfile +24 -8
  4. data/.rspec +3 -0
  5. data/CHANGELOG.md +6 -1
  6. data/Gemfile +4 -4
  7. data/Gemfile.lock +29 -19
  8. data/Rakefile +7 -6
  9. data/lib/exception_handling/exception_info.rb +3 -6
  10. data/lib/exception_handling/log_stub_error.rb +2 -1
  11. data/lib/exception_handling/version.rb +1 -1
  12. data/{test → spec}/helpers/controller_helpers.rb +0 -0
  13. data/{test → spec}/helpers/exception_helpers.rb +2 -2
  14. data/{test → spec}/rake_test_warning_false.rb +0 -0
  15. data/{test/test_helper.rb → spec/spec_helper.rb} +50 -39
  16. data/spec/unit/exception_handling/exception_catalog_spec.rb +85 -0
  17. data/spec/unit/exception_handling/exception_description_spec.rb +82 -0
  18. data/{test/unit/exception_handling/exception_info_test.rb → spec/unit/exception_handling/exception_info_spec.rb} +118 -99
  19. data/{test/unit/exception_handling/honeybadger_callbacks_test.rb → spec/unit/exception_handling/honeybadger_callbacks_spec.rb} +20 -20
  20. data/{test/unit/exception_handling/log_error_stub_test.rb → spec/unit/exception_handling/log_error_stub_spec.rb} +38 -22
  21. data/{test/unit/exception_handling/mailer_test.rb → spec/unit/exception_handling/mailer_spec.rb} +17 -17
  22. data/spec/unit/exception_handling/methods_spec.rb +84 -0
  23. data/spec/unit/exception_handling/sensu_spec.rb +51 -0
  24. data/{test/unit/exception_handling_test.rb → spec/unit/exception_handling_spec.rb} +325 -329
  25. metadata +29 -28
  26. data/test/unit/exception_handling/exception_catalog_test.rb +0 -85
  27. data/test/unit/exception_handling/exception_description_test.rb +0 -82
  28. data/test/unit/exception_handling/methods_test.rb +0 -84
  29. data/test/unit/exception_handling/sensu_test.rb +0 -52
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5720f1d81733d8912d7777a97e57f29c412b05fd938ebe073c91973d1b948685
4
- data.tar.gz: b7f587666d212e629be8603cbb711c76ade2917d1a03c91e541f87b7c3eb09c6
3
+ metadata.gz: e775cff5b73e955140fcc3a5492564e565567e8de147424da3602b83ad2e3b55
4
+ data.tar.gz: 35fa446e469e356ae600c5b24860ec8ff73dda25a72df59d5954be0748aac6bd
5
5
  SHA512:
6
- metadata.gz: c7138e98374c2f2609500fdd2c11c7bee9211d6f6d548e5c1afe3191318e5966c48ff8fd6e6af2230f5c3ceb6ca44ece1535a85009881e9bd748adcf7d8438e9
7
- data.tar.gz: 6f6cdf2a385a190f1439488c3ac0e3dbaa4c5726a6dfdb4c8bb647b7e86c4dd06bb8d2740cc6e1ee54dfebd77a65b204884fd0bd76346367d201eb624f036757
6
+ metadata.gz: d3486a507210596be078ae1953105859d9d2e556b5794f9e1b01bbee21b34e6cd04be115429548a02cce1c6fec80ea680f990ba8b83d07c9594fed5c7de712d5
7
+ data.tar.gz: e19c845b8d8332f5118c0668c4520cabf00bf88c94117111ee2801d5320f2af2cc620224d79e3dc2e4daef62c4c7cb4115e3cc010cf56e8292cf9dcfef49f974
data/.gitignore CHANGED
@@ -1,6 +1,6 @@
1
1
  .idea
2
2
  .DS_Store
3
3
  .rubocop-http*
4
- test/reports/*
4
+ spec/reports/*
5
5
  gemfiles/*.lock
6
6
  pkg/
@@ -36,42 +36,58 @@ pipeline {
36
36
  stage('Appraisals') {
37
37
  parallel {
38
38
  stage('Current') {
39
+ environment {
40
+ JUNIT_OUTPUT = 'spec/reports/current'
41
+ }
42
+
39
43
  steps {
40
- sh 'JUNIT_OUTPUT_DIR=test/reports/current bundle exec rake'
44
+ sh "bundle exec rspec --format RspecJunitFormatter --out ${JUNIT_OUTPUT}/rspec.xml"
41
45
  }
42
46
 
43
47
  post {
44
- always { junit '*/reports/current/*.xml' }
48
+ always { junit "${JUNIT_OUTPUT}/*.xml" }
45
49
  }
46
50
  }
47
51
 
48
52
  stage('Rails 4') {
53
+ environment {
54
+ JUNIT_OUTPUT = 'spec/reports/rails-4'
55
+ }
56
+
49
57
  steps {
50
- sh 'JUNIT_OUTPUT_DIR=test/reports/rails-4 bundle exec appraisal rails-4 rake'
58
+ sh "bundle exec appraisal rails-4 rspec --format RspecJunitFormatter --out ${JUNIT_OUTPUT}/rspec.xml"
51
59
  }
52
60
 
53
61
  post {
54
- always { junit '*/reports/rails-4/*.xml' }
62
+ always { junit "${JUNIT_OUTPUT}/*.xml" }
55
63
  }
56
64
  }
57
65
 
58
66
  stage('Rails 5') {
67
+ environment {
68
+ JUNIT_OUTPUT = 'spec/reports/rails-5'
69
+ }
70
+
59
71
  steps {
60
- sh 'JUNIT_OUTPUT_DIR=test/reports/rails-5 bundle exec appraisal rails-5 rake'
72
+ sh "bundle exec appraisal rails-5 rspec --format RspecJunitFormatter --out ${JUNIT_OUTPUT}/rspec.xml"
61
73
  }
62
74
 
63
75
  post {
64
- always { junit '*/reports/rails-5/*.xml' }
76
+ always { junit "${JUNIT_OUTPUT}/*.xml" }
65
77
  }
66
78
  }
67
79
 
68
80
  stage('Rails 6') {
81
+ environment {
82
+ JUNIT_OUTPUT = 'spec/reports/rails-6'
83
+ }
84
+
69
85
  steps {
70
- sh 'JUNIT_OUTPUT_DIR=test/reports/rails-6 bundle exec appraisal rails-6 rake'
86
+ sh "bundle exec appraisal rails-6 rspec --format RspecJunitFormatter --out ${JUNIT_OUTPUT}/rspec.xml"
71
87
  }
72
88
 
73
89
  post {
74
- always { junit '*/reports/rails-6/*.xml' }
90
+ always { junit "${JUNIT_OUTPUT}/*.xml" }
75
91
  }
76
92
  }
77
93
  }
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --require spec_helper
2
+ --format progress
3
+ --color
@@ -4,7 +4,11 @@ Inspired by [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
4
4
 
5
5
  Note: this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
6
 
7
- ## [2.6.0] - Unreleased
7
+ ## [2.6.1] - 2020-10-14
8
+ ### Fixed
9
+ - Fixed honeybadger_context_data to always merge `current_context_for_thread`, even if `log_context:` is passed as `nil`.
10
+
11
+ ## [2.6.0] - 2020-08-26
8
12
  ### Changed
9
13
  - Calling `log_warning` will now log with Severity::WARNING rather than FATAL.
10
14
  - Reordered the logging to put the exception class next to the message.
@@ -42,6 +46,7 @@ Note: this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0
42
46
  ### Changed
43
47
  - No longer depends on hobo_support. Uses invoca-utils 0.3 instead.
44
48
 
49
+ [2.6.1]: https://github.com/Invoca/exception_handling/compare/v2.6.0...v2.6.1
45
50
  [2.6.0]: https://github.com/Invoca/exception_handling/compare/v2.5.0...v2.6.0
46
51
  [2.5.0]: https://github.com/Invoca/exception_handling/compare/v2.4.4...v2.5.0
47
52
  [2.4.4]: https://github.com/Invoca/exception_handling/compare/v2.4.3...v2.4.4
data/Gemfile CHANGED
@@ -6,10 +6,10 @@ gemspec
6
6
 
7
7
  gem 'appraisal', '~> 2.2'
8
8
  gem 'honeybadger', '3.3.1-1', git: 'git@github.com:Invoca/honeybadger-ruby', ref: 'bb5f2b8a86e4147c38a6270d39ad610fab4dd5e6'
9
- gem "minitest"
10
- gem "minitest-reporters"
11
9
  gem 'pry'
10
+ gem 'pry-byebug'
12
11
  gem 'rake'
13
- gem 'rr'
12
+ gem 'rspec'
13
+ gem 'rspec_junit_formatter'
14
14
  gem 'rubocop'
15
- gem 'shoulda'
15
+ gem 'test-unit'
@@ -8,7 +8,7 @@ GIT
8
8
  PATH
9
9
  remote: .
10
10
  specs:
11
- exception_handling (2.6.0)
11
+ exception_handling (2.6.1)
12
12
  actionmailer (>= 4.2, < 7.0)
13
13
  actionpack (>= 4.2, < 7.0)
14
14
  activesupport (>= 4.2, < 7.0)
@@ -46,19 +46,20 @@ GEM
46
46
  minitest (~> 5.1)
47
47
  thread_safe (~> 0.3, >= 0.3.4)
48
48
  tzinfo (~> 1.1)
49
- ansi (1.5.0)
50
49
  appraisal (2.2.0)
51
50
  bundler
52
51
  rake
53
52
  thor (>= 0.14.0)
54
53
  ast (2.4.0)
55
54
  builder (3.2.3)
55
+ byebug (11.1.3)
56
56
  coderay (1.1.2)
57
57
  concurrent-ruby (1.1.5)
58
- contextual_logger (0.9.1)
58
+ contextual_logger (0.10.0)
59
59
  activesupport
60
60
  json
61
61
  crass (1.0.6)
62
+ diff-lcs (1.4.4)
62
63
  erubis (2.7.0)
63
64
  eventmachine (1.2.7)
64
65
  globalid (0.4.2)
@@ -77,19 +78,18 @@ GEM
77
78
  mini_mime (1.0.2)
78
79
  mini_portile2 (2.4.0)
79
80
  minitest (5.11.3)
80
- minitest-reporters (1.0.20)
81
- ansi
82
- builder
83
- minitest (>= 5.0)
84
- ruby-progressbar
85
81
  nokogiri (1.10.10)
86
82
  mini_portile2 (~> 2.4.0)
87
83
  parallel (1.17.0)
88
84
  parser (2.6.3.0)
89
85
  ast (~> 2.4.0)
86
+ power_assert (1.2.0)
90
87
  pry (0.12.2)
91
88
  coderay (~> 1.1.0)
92
89
  method_source (~> 0.9.0)
90
+ pry-byebug (3.8.0)
91
+ byebug (~> 11.0)
92
+ pry (~> 0.10)
93
93
  rack (1.6.13)
94
94
  rack-test (0.6.3)
95
95
  rack (>= 1.0)
@@ -103,7 +103,21 @@ GEM
103
103
  loofah (~> 2.3)
104
104
  rainbow (3.0.0)
105
105
  rake (13.0.1)
106
- rr (1.2.1)
106
+ rspec (3.9.0)
107
+ rspec-core (~> 3.9.0)
108
+ rspec-expectations (~> 3.9.0)
109
+ rspec-mocks (~> 3.9.0)
110
+ rspec-core (3.9.2)
111
+ rspec-support (~> 3.9.3)
112
+ rspec-expectations (3.9.2)
113
+ diff-lcs (>= 1.2.0, < 2.0)
114
+ rspec-support (~> 3.9.0)
115
+ rspec-mocks (3.9.1)
116
+ diff-lcs (>= 1.2.0, < 2.0)
117
+ rspec-support (~> 3.9.0)
118
+ rspec-support (3.9.3)
119
+ rspec_junit_formatter (0.4.1)
120
+ rspec-core (>= 2, < 4, != 2.12.0)
107
121
  rubocop (0.74.0)
108
122
  jaro_winkler (~> 1.5.1)
109
123
  parallel (~> 1.10)
@@ -112,12 +126,8 @@ GEM
112
126
  ruby-progressbar (~> 1.7)
113
127
  unicode-display_width (>= 1.4.0, < 1.7)
114
128
  ruby-progressbar (1.10.1)
115
- shoulda (3.6.0)
116
- shoulda-context (~> 1.0, >= 1.0.1)
117
- shoulda-matchers (~> 3.0)
118
- shoulda-context (1.2.2)
119
- shoulda-matchers (3.1.3)
120
- activesupport (>= 4.0.0)
129
+ test-unit (3.3.6)
130
+ power_assert
121
131
  thor (1.0.1)
122
132
  thread_safe (0.3.6)
123
133
  tzinfo (1.2.5)
@@ -131,13 +141,13 @@ DEPENDENCIES
131
141
  appraisal (~> 2.2)
132
142
  exception_handling!
133
143
  honeybadger (= 3.3.1.pre.1)!
134
- minitest
135
- minitest-reporters
136
144
  pry
145
+ pry-byebug
137
146
  rake
138
- rr
147
+ rspec
148
+ rspec_junit_formatter
139
149
  rubocop
140
- shoulda
150
+ test-unit
141
151
 
142
152
  BUNDLED WITH
143
153
  1.17.3
data/Rakefile CHANGED
@@ -1,14 +1,15 @@
1
1
  #!/usr/bin/env rake
2
2
  # frozen_string_literal: true
3
3
 
4
- require "bundler/gem_tasks"
5
4
  require 'rake/testtask'
5
+ require "bundler/gem_tasks"
6
6
 
7
- require_relative 'test/rake_test_warning_false'
8
-
9
- task default: :test
7
+ require_relative 'spec/rake_test_warning_false'
10
8
 
11
- Rake::TestTask.new do |t|
12
- t.pattern = "test/**/*_test.rb"
9
+ desc "run rspec unit tests"
10
+ begin
11
+ require 'rspec/core/rake_task'
12
+ RSpec::Core::RakeTask.new(:rspec)
13
13
  end
14
14
 
15
+ task default: :rspec
@@ -57,9 +57,8 @@ module ExceptionHandling
57
57
  @timestamp = timestamp
58
58
  @controller = controller || controller_from_context(exception_context)
59
59
  @data_callback = data_callback
60
- @merged_log_context = if log_context # merge into the surrounding context just like ContextualLogger does when logging
61
- ExceptionHandling.logger.current_context_for_thread.deep_merge(log_context)
62
- end
60
+ # merge into the surrounding context just like ContextualLogger does when logging
61
+ @merged_log_context = ExceptionHandling.logger.current_context_for_thread.deep_merge(log_context || {})
63
62
  end
64
63
 
65
64
  def data
@@ -273,13 +272,11 @@ module ExceptionHandling
273
272
  data[:exception_context] = deep_clean_hash(@exception_context) if @exception_context.present?
274
273
  data[:log_context] = @merged_log_context
275
274
  unstringify_sections(data)
276
- context_data = HONEYBADGER_CONTEXT_SECTIONS.reduce({}) do |context, section|
275
+ HONEYBADGER_CONTEXT_SECTIONS.each_with_object({}) do |section, context|
277
276
  if data[section].present?
278
277
  context[section] = data[section]
279
278
  end
280
- context
281
279
  end
282
- context_data
283
280
  end
284
281
  end
285
282
  end
@@ -1,7 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  #
4
- # Used by functional tests to track exceptions.
4
+ # Test Helper that supports Minitest::Test and Test::Unit
5
+ # Used by tests in the consumers of this gem to track exceptions.
5
6
  #
6
7
 
7
8
  module LogErrorStub
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ExceptionHandling
4
- VERSION = '2.6.0'
4
+ VERSION = '2.6.1'
5
5
  end
@@ -7,7 +7,7 @@ module ExceptionHelpers
7
7
 
8
8
  def exception_with_nil_message
9
9
  exception_with_nil_message = RuntimeError.new(nil)
10
- stub(exception_with_nil_message).message { nil }
10
+ allow(exception_with_nil_message).to receive(:message).and_return(nil)
11
11
  exception_with_nil_message
12
12
  end
13
13
 
@@ -15,6 +15,6 @@ module ExceptionHelpers
15
15
 
16
16
  def capture_notifications
17
17
  @sent_notifications = []
18
- stub(ExceptionHandling).send_exception_to_honeybadger(anything) { |exception_info| @sent_notifications << exception_info }
18
+ allow(ExceptionHandling).to receive(:send_exception_to_honeybadger).with(anything) { |exception_info| @sent_notifications << exception_info }
19
19
  end
20
20
  end
@@ -1,17 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'active_support'
4
- require 'active_support/time'
5
- require 'active_support/test_case'
6
- require 'action_mailer'
7
- require 'action_dispatch'
8
- require 'shoulda'
9
- require 'rr'
10
- require 'minitest/autorun'
11
- require "minitest/reporters"
12
-
13
- junit_ouptut_dir = ENV["JUNIT_OUTPUT_DIR"].presence || "test/reports"
14
- Minitest::Reporters.use!([Minitest::Reporters::DefaultReporter.new, Minitest::Reporters::JUnitReporter.new(junit_ouptut_dir)])
3
+ require 'rspec'
4
+ require 'rspec/mocks'
5
+ require 'rspec_junit_formatter'
15
6
 
16
7
  require 'pry'
17
8
  require 'honeybadger'
@@ -20,8 +11,6 @@ require 'contextual_logger'
20
11
  require 'exception_handling'
21
12
  require 'exception_handling/testing'
22
13
 
23
- ActiveSupport::TestCase.test_order = :sorted
24
-
25
14
  class LoggerStub
26
15
  include ContextualLogger::LoggerMixin
27
16
  attr_accessor :logged, :level
@@ -87,27 +76,17 @@ end
87
76
 
88
77
  ActionMailer::Base.delivery_method = :test
89
78
 
90
- _ = ActiveSupport
91
- _ = ActiveSupport::TestCase
92
79
 
93
- class ActiveSupport::TestCase
94
- @@constant_overrides = []
80
+ module TestHelper
81
+ @constant_overrides = []
82
+ class << self
83
+ attr_accessor :constant_overrides
84
+ end
95
85
 
96
- setup do
97
- unless @@constant_overrides.nil? || @@constant_overrides.empty?
98
- raise "Uh-oh! constant_overrides left over: #{@@constant_overrides.inspect}"
99
- end
100
86
 
101
- unless defined?(Rails) && defined?(Rails.env)
102
- module ::Rails
103
- class << self
104
- attr_writer :env
105
-
106
- def env
107
- @env ||= 'test'
108
- end
109
- end
110
- end
87
+ def setup_constant_overrides
88
+ unless TestHelper.constant_overrides.nil? || TestHelper.constant_overrides.empty?
89
+ raise "Uh-oh! constant_overrides left over: #{TestHelper.constant_overrides.inspect}"
111
90
  end
112
91
 
113
92
  Time.now_override = nil
@@ -127,8 +106,8 @@ class ActiveSupport::TestCase
127
106
  ExceptionHandling.sensu_prefix = ""
128
107
  end
129
108
 
130
- teardown do
131
- @@constant_overrides&.reverse&.each do |parent_module, k, v|
109
+ def teardown_constant_overrides
110
+ TestHelper.constant_overrides&.reverse&.each do |parent_module, k, v|
132
111
  ExceptionHandling.ensure_safe "constant cleanup #{k.inspect}, #{parent_module}(#{parent_module.class})::#{v.inspect}(#{v.class})" do
133
112
  silence_warnings do
134
113
  if v == :never_defined
@@ -139,7 +118,7 @@ class ActiveSupport::TestCase
139
118
  end
140
119
  end
141
120
  end
142
- @@constant_overrides = []
121
+ TestHelper.constant_overrides = []
143
122
  end
144
123
 
145
124
  def set_test_const(const_name, value)
@@ -159,7 +138,7 @@ class ActiveSupport::TestCase
159
138
  end
160
139
  end
161
140
 
162
- @@constant_overrides << [final_parent_module, final_const_name, original_value]
141
+ TestHelper.constant_overrides << [final_parent_module, final_const_name, original_value]
163
142
 
164
143
  silence_warnings { final_parent_module.const_set(final_const_name, value) }
165
144
  end
@@ -171,15 +150,15 @@ class ActiveSupport::TestCase
171
150
  else
172
151
  original_count = 0
173
152
  end
174
- assert_equal expected, ActionMailer::Base.deliveries.size - original_count, "wrong number of emails#{': ' + message.to_s if message}"
153
+ expect(ActionMailer::Base.deliveries.size - original_count).to eq(expected), "wrong number of emails#{': ' + message.to_s if message}"
175
154
  end
176
155
  end
177
156
 
178
157
  def assert_equal_with_diff(arg1, arg2, msg = '')
179
158
  if arg1 == arg2
180
- assert true # To keep the assertion count accurate
159
+ expect(true).to be_truthy # To keep the assertion count accurate
181
160
  else
182
- assert_equal arg1, arg2, "#{msg}\n#{Diff.compare(arg1, arg2)}"
161
+ expect(arg1).to eq(arg2), "#{msg}\n#{Diff.compare(arg1, arg2)}"
183
162
  end
184
163
  end
185
164
 
@@ -210,3 +189,35 @@ class Time
210
189
  end
211
190
  end
212
191
  end
192
+
193
+ RSpec.configure do |config|
194
+ config.add_formatter(RspecJunitFormatter, 'spec/reports/rspec.xml')
195
+ config.include TestHelper
196
+
197
+ config.before(:each) do
198
+ setup_constant_overrides
199
+ unless defined?(Rails) && defined?(Rails.env)
200
+ module Rails
201
+ class << self
202
+ attr_writer :env
203
+
204
+ def env
205
+ @env ||= 'test'
206
+ end
207
+ end
208
+ end
209
+ end
210
+ end
211
+
212
+ config.after(:each) do
213
+ teardown_constant_overrides
214
+ end
215
+
216
+ config.mock_with :rspec do |mocks|
217
+ mocks.verify_partial_doubles = true
218
+ end
219
+
220
+ config.expect_with(:rspec, :test_unit)
221
+
222
+ RSpec::Support::ObjectFormatter.default_instance.max_formatted_output_length = 2_000
223
+ end