Skip to content

Instantly share code, notes, and snippets.

@travisp
Created October 18, 2017 13:56
Show Gist options
  • Save travisp/5899c8e0fd4e7e447e501c61b6c13e8f to your computer and use it in GitHub Desktop.
Save travisp/5899c8e0fd4e7e447e501c61b6c13e8f to your computer and use it in GitHub Desktop.
# frozen_string_literal: true
begin
require "bundler/inline"
rescue LoadError => e
$stderr.puts "Bundler version 1.10 or later is required. Please update your Bundler"
raise e
end
gemfile(true) do
source "https://rubygems.org"
# Activate the gem you are reporting the issue against.
gem "rails", "5.0.6"
gem "sentry-raven", require: 'sentry-raven-without-integrations'
gem 'grape'
end
require 'raven/transports/dummy'
Raven.configure do |config|
config.dsn = "dummy://12345:67890@sentry.localdomain/sentry/42"
end
require "rack/test"
require "action_controller/railtie"
require 'raven/integrations/rack'
class RescuableError < StandardError
end
class API < Grape::API
insert_before 0, Raven::Rack
before do
Raven.extra_context({test: 'mycontext'})
end
rescue_from :all do |e|
if e.is_a? RescuableError
puts "rescuing"
Raven.capture_exception(e)
Rack::Response.new({ error: 'An error occurred' }.to_json, 500, { "Content-type" => "application/json" })
else
puts "not rescuing"
raise e
end
end
get :hello do
{ hello: 'world' }
end
get :unrescuable_exception do
raise "Do not rescue this"
end
get :rescuable_exception do
raise RescuableError.new("Rescue This")
end
end
class TestApp < Rails::Application
config.root = __dir__
config.session_store :cookie_store, key: "cookie_store_key"
secrets.secret_token = "secret_token"
secrets.secret_key_base = "secret_key_base"
config.consider_all_requests_local = true
config.logger = Logger.new($stdout)
Rails.logger = config.logger
routes.append do
mount API => '/'
end
end
TestApp.initialize!
require "minitest/autorun"
# Ensure backward compatibility with Minitest 4
Minitest::Test = MiniTest::Unit::TestCase unless defined?(Minitest::Test)
class BugTest < Minitest::Test
include Rack::Test::Methods
def test_captures_rescuable_exception
get "/rescuable_exception"
refute last_response.ok?
assert_equal true, valid_json?(last_response.body)
expected = { "error" => "An error occurred" }
assert_equal expected, JSON.parse(last_response.body)
assert_equal 1, Raven.client.transport.events.size
Raven.client.transport.events = []
end
def test_captures_unrescuable_exception
get "/unrescuable_exception"
refute last_response.ok?
assert_equal false, valid_json?(last_response.body)
assert_equal 1, Raven.client.transport.events.size
Raven.client.transport.events = []
end
def test_hello
get "/hello"
assert last_response.ok?
end
private
def valid_json?(json)
JSON.parse(json)
return true
rescue JSON::ParserError => e
return false
end
def app
Rails.application
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment