diff options
Diffstat (limited to 'spec/services/error_tracking/collect_error_service_spec.rb')
-rw-r--r-- | spec/services/error_tracking/collect_error_service_spec.rb | 41 |
1 files changed, 37 insertions, 4 deletions
diff --git a/spec/services/error_tracking/collect_error_service_spec.rb b/spec/services/error_tracking/collect_error_service_spec.rb index 52d095148c8..2b16612dac3 100644 --- a/spec/services/error_tracking/collect_error_service_spec.rb +++ b/spec/services/error_tracking/collect_error_service_spec.rb @@ -4,8 +4,9 @@ require 'spec_helper' RSpec.describe ErrorTracking::CollectErrorService do let_it_be(:project) { create(:project) } - let_it_be(:parsed_event_file) { 'error_tracking/parsed_event.json' } - let_it_be(:parsed_event) { Gitlab::Json.parse(fixture_file(parsed_event_file)) } + + let(:parsed_event_file) { 'error_tracking/parsed_event.json' } + let(:parsed_event) { parse_valid_event(parsed_event_file) } subject { described_class.new(project, nil, event: parsed_event) } @@ -43,7 +44,7 @@ RSpec.describe ErrorTracking::CollectErrorService do end context 'python sdk event' do - let(:parsed_event) { Gitlab::Json.parse(fixture_file('error_tracking/python_event.json')) } + let(:parsed_event_file) { 'error_tracking/python_event.json' } it 'creates a valid event' do expect { subject.execute }.to change { ErrorTracking::ErrorEvent.count }.by(1) @@ -75,7 +76,7 @@ RSpec.describe ErrorTracking::CollectErrorService do end context 'go payload' do - let(:parsed_event) { Gitlab::Json.parse(fixture_file('error_tracking/go_parsed_event.json')) } + let(:parsed_event_file) { 'error_tracking/go_parsed_event.json' } it 'has correct values set' do subject.execute @@ -92,6 +93,38 @@ RSpec.describe ErrorTracking::CollectErrorService do expect(event.environment).to eq 'Accumulate' expect(event.payload).to eq parsed_event end + + context 'with two exceptions' do + let(:parsed_event_file) { 'error_tracking/go_two_exception_event.json' } + + it 'reports using second exception', :aggregate_failures do + subject.execute + + event = ErrorTracking::ErrorEvent.last + error = event.error + + expect(error.name).to eq '*url.Error' + expect(error.description).to eq(%(Get \"foobar\": unsupported protocol scheme \"\")) + expect(error.platform).to eq 'go' + expect(error.actor).to eq('main(main)') + + expect(event.description).to eq(%(Get \"foobar\": unsupported protocol scheme \"\")) + expect(event.payload).to eq parsed_event + end + end end end + + private + + def parse_valid_event(parsed_event_file) + parsed_event = Gitlab::Json.parse(fixture_file(parsed_event_file)) + + validator = ErrorTracking::Collector::PayloadValidator.new + # This a precondition for all specs to verify that + # submitted JSON payload is valid. + expect(validator).to be_valid(parsed_event) + + parsed_event + end end |