|  | 
|  | 1 | +# frozen_string_literal: true | 
|  | 2 | + | 
|  | 3 | +RSpec.describe Sentry do | 
|  | 4 | +  let(:client) { Sentry.get_current_client } | 
|  | 5 | +  let(:transport) { Sentry.get_current_client.transport } | 
|  | 6 | +  let(:error) { StandardError.new("test error") } | 
|  | 7 | + | 
|  | 8 | +  before do | 
|  | 9 | +    perform_basic_setup | 
|  | 10 | + | 
|  | 11 | +    setup_sentry_test do |config| | 
|  | 12 | +      config.dsn = dsn | 
|  | 13 | +      config.transport.transport_class = Sentry::DebugTransport | 
|  | 14 | +      config.debug = true | 
|  | 15 | +    end | 
|  | 16 | +  end | 
|  | 17 | + | 
|  | 18 | +  after do | 
|  | 19 | +    teardown_sentry_test | 
|  | 20 | +  end | 
|  | 21 | + | 
|  | 22 | +  context "with local DSN for testing" do | 
|  | 23 | +    let(:dsn) { Sentry::TestHelper::DUMMY_DSN } | 
|  | 24 | + | 
|  | 25 | +    describe ".capture_exception with debug transport" do | 
|  | 26 | +      it "logs envelope data and stores an event internally" do | 
|  | 27 | +        Sentry.capture_exception(error) | 
|  | 28 | + | 
|  | 29 | +        expect(transport.events.count).to be(1) | 
|  | 30 | +        expect(transport.backend.events.count).to be(1) | 
|  | 31 | +        expect(transport.backend.envelopes.count).to be(1) | 
|  | 32 | + | 
|  | 33 | +        event = transport.logged_envelopes.last | 
|  | 34 | +        item = event["items"].first | 
|  | 35 | +        payload = item["payload"] | 
|  | 36 | + | 
|  | 37 | +        expect(payload["exception"]["values"].first["value"]).to include("test error") | 
|  | 38 | +      end | 
|  | 39 | +    end | 
|  | 40 | +  end | 
|  | 41 | + | 
|  | 42 | +  context "with a real DSN for testing" do | 
|  | 43 | +    let(:dsn) { Sentry::TestHelper::REAL_DSN } | 
|  | 44 | + | 
|  | 45 | +    describe ".capture_exception with debug transport" do | 
|  | 46 | +      it "sends an event and logs envelope" do | 
|  | 47 | +        stub_request(:post, "https://getsentry.io/project/api/42/envelope/") | 
|  | 48 | +          .to_return(status: 200, body: "", headers: {}) | 
|  | 49 | + | 
|  | 50 | +        Sentry.capture_exception(error) | 
|  | 51 | + | 
|  | 52 | +        expect(transport.logged_envelopes.count).to be(1) | 
|  | 53 | + | 
|  | 54 | +        event = transport.logged_envelopes.last | 
|  | 55 | +        item = event["items"].first | 
|  | 56 | +        payload = item["payload"] | 
|  | 57 | + | 
|  | 58 | +        expect(payload["exception"]["values"].first["value"]).to include("test error") | 
|  | 59 | +      end | 
|  | 60 | +    end | 
|  | 61 | +  end | 
|  | 62 | +end | 
0 commit comments