spec/spec_helper.rb in flail-0.0.3 vs spec/spec_helper.rb in flail-0.0.4

- old
+ new

@@ -1,11 +1,112 @@ require 'rubygems' require 'bundler' Bundler.setup require 'rspec' -require 'flail' +require 'rr' RSpec.configure do |config| config.mock_with :rr end +require 'action_controller' +require 'action_controller/test_process' +require 'active_record' +require 'active_support' +require 'rack' +require 'sham_rack' + +require 'flail' +require 'flail/rails/controller_methods' +require 'flail/rails/rescue_action' + +class FlailArmory + + module ClassMethods + def define_constant(name, value) + @defined_constants ||= [] + Object.const_set(name, value) + @defined_constants << name + end + + def build_controller_class(&definition) + Class.new(ActionController::Base).tap do |klass| + klass.__send__(:include, Flail::Rails::ControllerMethods) + klass.__send__(:include, Flail::Rails::RescueAction) + klass.class_eval(&definition) if definition + + klass.class_eval do + def rescue_action_in_public_without_flail(*args) + end + end + define_constant('FlailTestController', klass) + end + end + + def process_action(options = {}, &action) + options[:request] ||= ActionController::TestRequest.new + options[:response] ||= ActionController::TestResponse.new + + klass = build_controller_class do + cattr_accessor :local + define_method(:index, &action) + + def local_request? + local + end + end + + if options[:user_agent] + if options[:request].respond_to?(:user_agent=) + options[:request].user_agent = options[:user_agent] + else + options[:request].env["HTTP_USER_AGENT"] = options[:user_agent] + end + end + + klass.consider_all_requests_local = options[:all_local] + klass.local = options[:local] + + controller = klass.new + options[:request].query_parameters = options[:request].query_parameters.merge(options[:params] || {}) + options[:request].session = ActionController::TestSession.new(options[:session] || {}) + + options[:request].env['REQUEST_URI'] = options[:request].request_uri + controller.process(options[:request], options[:response]) + controller + end + + def process_action_with_error(options = {}) + process_action(options) do + raise "Hello" + end + end + + def setup + Flail.configure do + handle do |payload| + FlailArmory.payload = ActiveSupport::JSON.decode(payload) + end + end + define_constant('RAILS_ROOT', '/path/to/rails/root') + end + + def payload=(value) + @payload = value + end + + def payload + @payload + end + + def raid + @defined_constants.each do |constant| + Object.__send__(:remove_const, constant) + end + + @payload = nil + @defined_constants = [] + end + end + extend ClassMethods +end