Commit ee62fe94a4763e6803ad7eee7ce5bddb5197488c

Authored by Stephen Crosby
2 parents c2962c8e d3608428
Exists in master and in 1 other branch production

Merge pull request #830 from ronin/fix-empty-backtrace

Fix parsing V3 api notice without backtrace
lib/airbrake_api/v3/notice_parser.rb
... ... @@ -32,7 +32,7 @@ module AirbrakeApi
32 32 end
33 33  
34 34 def backtrace
35   - error['backtrace'].map do |backtrace_line|
  35 + (error['backtrace'] || []).map do |backtrace_line|
36 36 {
37 37 method: backtrace_line['function'],
38 38 file: backtrace_line['file'],
... ...
spec/fixtures/api_v3_request_without_backtrace.json 0 → 100644
... ... @@ -0,0 +1,28 @@
  1 +{
  2 + "notifier":{"name":"airbrake-js-v8","version":"0.3.10","url":"https://github.com/airbrake/airbrake-js"},
  3 + "errors":[
  4 + {
  5 + "type":"Error",
  6 + "message":"Error: TestError",
  7 + "backtrace":null
  8 + }
  9 + ],
  10 + "context":{
  11 + "language":"JavaScript",
  12 + "sourceMapEnabled":true,
  13 + "userAgent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.99 Safari/537.36",
  14 + "url":"http://localhost:3000/kontakt",
  15 + "userId":1,"userUsername":"john",
  16 + "userName":"John Doe",
  17 + "userUsername": "john",
  18 + "userEmail":"john.doe@example.org",
  19 + "version":"1.0",
  20 + "component":"ContactsController",
  21 + "action":"show"
  22 + },
  23 + "params":{"returnTo":"dashboard"},
  24 + "environment":{"navigator_vendor":"Google Inc."},
  25 + "session":{"isAdmin":true},
  26 + "key":"a3969bfbf65f073921e",
  27 + "project_id":"a3969bfbf65f073921e"
  28 +}
0 29 \ No newline at end of file
... ...
spec/lib/airbrake_api/v3/notice_parser_spec.rb
... ... @@ -36,6 +36,19 @@ describe AirbrakeApi::V3::NoticeParser do
36 36 expect(report).to be_valid
37 37 end
38 38  
  39 + it 'parses JSON payload with missing backtrace' do
  40 + json = Rails.root.join('spec', 'fixtures', 'api_v3_request_without_backtrace.json').read
  41 + params = JSON.parse(json)
  42 + params['key'] = app.api_key
  43 +
  44 + report = AirbrakeApi::V3::NoticeParser.new(params).report
  45 + notice = report.generate_notice!
  46 +
  47 + expect(report.error_class).to eq('Error')
  48 + expect(report.message).to eq('Error: TestError')
  49 + expect(report.backtrace.lines.size).to eq(0)
  50 + end
  51 +
39 52 def build_params(options = {})
40 53 json = Rails.root.join('spec', 'fixtures', 'api_v3_request.json').read
41 54 data = JSON.parse(json)
... ...