test/helper.rb in airbrake-3.1.6 vs test/helper.rb in airbrake-3.1.7

- old
+ new

@@ -1,30 +1,149 @@ -require 'simplecov' -SimpleCov.start require 'test/unit' require 'rubygems' $LOAD_PATH << File.expand_path(File.join(File.dirname(__FILE__), "..", "lib")) require 'thread' require 'shoulda' require 'mocha' +require 'abstract_controller' require 'action_controller' -require 'action_controller/test_process' +require 'action_dispatch' +require 'active_support/dependencies' +require 'active_model' require 'active_record' -require 'active_support' +require 'active_support/core_ext/kernel/reporting' + require 'nokogiri' require 'rack' require 'bourne' require 'sham_rack' +require 'json-schema' require "airbrake" begin require 'redgreen'; rescue LoadError; end +# Show backtraces for deprecated behavior for quicker cleanup. +ActiveSupport::Deprecation.debug = true + +FIXTURE_LOAD_PATH = File.join(File.dirname(__FILE__), 'fixtures') +FIXTURES = Pathname.new(FIXTURE_LOAD_PATH) + +SharedTestRoutes = ActionDispatch::Routing::RouteSet.new + +class RoutedRackApp + attr_reader :routes + + def initialize(routes, &blk) + @routes = routes + @stack = ActionDispatch::MiddlewareStack.new(&blk).build(@routes) + end + + def call(env) + @stack.call(env) + end +end + +class ActionDispatch::IntegrationTest < ActiveSupport::TestCase + setup do + @routes = SharedTestRoutes + end +end + +class ActionController::IntegrationTest < ActiveSupport::TestCase + def self.build_app(routes = nil) + RoutedRackApp.new(routes || ActionDispatch::Routing::RouteSet.new) do |middleware| + middleware.use "ActionDispatch::Callbacks" + middleware.use "ActionDispatch::ParamsParser" + middleware.use "ActionDispatch::Cookies" + middleware.use "ActionDispatch::Flash" + middleware.use "ActionDispatch::Head" + yield(middleware) if block_given? + end + end + + self.app = build_app + + # Stub Rails dispatcher so it does not get controller references and + # simply return the controller#action as Rack::Body. + class StubDispatcher < ::ActionDispatch::Routing::RouteSet::Dispatcher + protected + def controller_reference(controller_param) + controller_param + end + + def dispatch(controller, action, env) + [200, {'Content-Type' => 'text/html'}, ["#{controller}##{action}"]] + end + end + + def self.stub_controllers + old_dispatcher = ActionDispatch::Routing::RouteSet::Dispatcher + ActionDispatch::Routing::RouteSet.module_eval { remove_const :Dispatcher } + ActionDispatch::Routing::RouteSet.module_eval { const_set :Dispatcher, StubDispatcher } + yield ActionDispatch::Routing::RouteSet.new + ensure + ActionDispatch::Routing::RouteSet.module_eval { remove_const :Dispatcher } + ActionDispatch::Routing::RouteSet.module_eval { const_set :Dispatcher, old_dispatcher } + end + + def with_routing(&block) + temporary_routes = ActionDispatch::Routing::RouteSet.new + old_app, self.class.app = self.class.app, self.class.build_app(temporary_routes) + old_routes = SharedTestRoutes + silence_warnings { Object.const_set(:SharedTestRoutes, temporary_routes) } + + yield temporary_routes + ensure + self.class.app = old_app + silence_warnings { Object.const_set(:SharedTestRoutes, old_routes) } + end + + def with_autoload_path(path) + path = File.join(File.dirname(__FILE__), "fixtures", path) + if ActiveSupport::Dependencies.autoload_paths.include?(path) + yield + else + begin + ActiveSupport::Dependencies.autoload_paths << path + yield + ensure + ActiveSupport::Dependencies.autoload_paths.reject! {|p| p == path} + ActiveSupport::Dependencies.clear + end + end + end +end + +module ActionController + class Base + include ActionController::Testing + end + + Base.view_paths = FIXTURE_LOAD_PATH + + class TestCase + include ActionDispatch::TestProcess + + setup do + @routes = SharedTestRoutes + end + end +end + +# This stub emulates the Railtie including the URL helpers from a Rails application +module ActionController + class Base + include SharedTestRoutes.url_helpers + end +end + + module TestMethods def rescue_action e raise e end @@ -54,45 +173,10 @@ render :text => "Success" end end class Test::Unit::TestCase - def request(action = nil, method = :get, user_agent = nil, params = {}) - @request = ActionController::TestRequest.new - @request.action = action ? action.to_s : "" - - if user_agent - if @request.respond_to?(:user_agent=) - @request.user_agent = user_agent - else - @request.env["HTTP_USER_AGENT"] = user_agent - end - end - @request.query_parameters = @request.query_parameters.merge(params) - @response = ActionController::TestResponse.new - @controller.process(@request, @response) - end - - # Borrowed from ActiveSupport 2.3.2 - def assert_difference(expression, difference = 1, message = nil, &block) - b = block.send(:binding) - exps = Array.wrap(expression) - before = exps.map { |e| eval(e, b) } - - yield - - exps.each_with_index do |e, i| - error = "#{e.inspect} didn't change by #{difference}" - error = "#{message}.\n#{error}" if message - assert_equal(before[i] + difference, eval(e, b), error) - end - end - - def assert_no_difference(expression, message = nil, &block) - assert_difference expression, 0, message, &block - end - def stub_sender stub('sender', :send_to_airbrake => nil) end def stub_sender! @@ -107,14 +191,10 @@ stub_notice.tap do |notice| Airbrake::Notice.stubs(:new => notice) end end - def create_dummy - Airbrake::DummySender.new - end - def reset_config Airbrake.configuration = nil Airbrake.configure do |config| config.api_key = 'abc123' end @@ -185,12 +265,10 @@ def assert_not_logged(expected) assert_received(Airbrake, :write_verbose_log) do |expect| expect.with {|actual| actual =~ expected }.never end end - - end module DefinesConstants def setup @defined_constants = [] @@ -237,17 +315,9 @@ end def send_to_airbrake(data) @collected << data end -end - -class FakeLogger - def info(*args); end - def debug(*args); end - def warn(*args); end - def error(*args); end - def fatal(*args); end end class BacktracedException < Exception attr_accessor :backtrace def initialize(opts)