From d3608428d9339777134ecd8084ca62bd698bd1e7 Mon Sep 17 00:00:00 2001 From: Michał Młoźniak Date: Wed, 11 Feb 2015 18:51:43 +0100 Subject: [PATCH] Fix parsing V3 api notice without backtrace --- lib/airbrake_api/v3/notice_parser.rb | 2 +- spec/fixtures/api_v3_request_without_backtrace.json | 28 ++++++++++++++++++++++++++++ spec/lib/airbrake_api/v3/notice_parser_spec.rb | 13 +++++++++++++ 3 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 spec/fixtures/api_v3_request_without_backtrace.json diff --git a/lib/airbrake_api/v3/notice_parser.rb b/lib/airbrake_api/v3/notice_parser.rb index a91e62f..4c385ba 100644 --- a/lib/airbrake_api/v3/notice_parser.rb +++ b/lib/airbrake_api/v3/notice_parser.rb @@ -32,7 +32,7 @@ module AirbrakeApi end def backtrace - error['backtrace'].map do |backtrace_line| + (error['backtrace'] || []).map do |backtrace_line| { method: backtrace_line['function'], file: backtrace_line['file'], diff --git a/spec/fixtures/api_v3_request_without_backtrace.json b/spec/fixtures/api_v3_request_without_backtrace.json new file mode 100644 index 0000000..1ede3ad --- /dev/null +++ b/spec/fixtures/api_v3_request_without_backtrace.json @@ -0,0 +1,28 @@ +{ + "notifier":{"name":"airbrake-js-v8","version":"0.3.10","url":"https://github.com/airbrake/airbrake-js"}, + "errors":[ + { + "type":"Error", + "message":"Error: TestError", + "backtrace":null + } + ], + "context":{ + "language":"JavaScript", + "sourceMapEnabled":true, + "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", + "url":"http://localhost:3000/kontakt", + "userId":1,"userUsername":"john", + "userName":"John Doe", + "userUsername": "john", + "userEmail":"john.doe@example.org", + "version":"1.0", + "component":"ContactsController", + "action":"show" + }, + "params":{"returnTo":"dashboard"}, + "environment":{"navigator_vendor":"Google Inc."}, + "session":{"isAdmin":true}, + "key":"a3969bfbf65f073921e", + "project_id":"a3969bfbf65f073921e" +} \ No newline at end of file diff --git a/spec/lib/airbrake_api/v3/notice_parser_spec.rb b/spec/lib/airbrake_api/v3/notice_parser_spec.rb index 97bc60f..53bcaf1 100644 --- a/spec/lib/airbrake_api/v3/notice_parser_spec.rb +++ b/spec/lib/airbrake_api/v3/notice_parser_spec.rb @@ -36,6 +36,19 @@ describe AirbrakeApi::V3::NoticeParser do expect(report).to be_valid end + it 'parses JSON payload with missing backtrace' do + json = Rails.root.join('spec', 'fixtures', 'api_v3_request_without_backtrace.json').read + params = JSON.parse(json) + params['key'] = app.api_key + + report = AirbrakeApi::V3::NoticeParser.new(params).report + notice = report.generate_notice! + + expect(report.error_class).to eq('Error') + expect(report.message).to eq('Error: TestError') + expect(report.backtrace.lines.size).to eq(0) + end + def build_params(options = {}) json = Rails.root.join('spec', 'fixtures', 'api_v3_request.json').read data = JSON.parse(json) -- libgit2 0.21.2