From 0aa2cc73083a4f09e164b2802484eb57f2ea0abd Mon Sep 17 00:00:00 2001 From: Konstantin Haase Date: Thu, 24 Mar 2011 08:45:47 +0100 Subject: [PATCH] rewrite sinatra-test-helpers --- sinatra-contrib/lib/sinatra/test_helpers.rb | 79 +++++++++++++++++++++ sinatra-contrib/spec/spec_helper.rb | 5 -- 2 files changed, 79 insertions(+), 5 deletions(-) create mode 100644 sinatra-contrib/lib/sinatra/test_helpers.rb diff --git a/sinatra-contrib/lib/sinatra/test_helpers.rb b/sinatra-contrib/lib/sinatra/test_helpers.rb new file mode 100644 index 00000000..c7454ca0 --- /dev/null +++ b/sinatra-contrib/lib/sinatra/test_helpers.rb @@ -0,0 +1,79 @@ +require 'sinatra/base' +require 'rack/test' +require 'rack' +require 'forwardable' + +module Sinatra + Base.set :environment, :test + + module TestHelpers + class Session < Rack::Test::Session + def global_env + @global_env ||= {} + end + + private + + def default_env + super.merge global_env + end + end + + include Rack::Test::Methods + extend Forwardable + + def_delegators :last_response, :body, :headers, :status, :errors + def_delegators :app, :configure, :set, :enable, :disable, :use, :helpers, :register + def_delegators :current_session, :env_for + + def mock_app(base = Sinatra::Base, &block) + @app = Sinatra.new(base, &block) + end + + def app=(base) + @app = base + end + + alias set_app app= + + def app + @app ||= Class.new Sinatra::Base + Rack::Lint.new @app + end + + unless method_defined? :options + def options(uri, params = {}, env = {}, &block) + env = env_for(uri, env.merge(:method => "OPTIONS", :params => params)) + current_session.send(:process_request, uri, env, &block) + end + end + + unless method_defined? :patch + def patch(uri, params = {}, env = {}, &block) + env = env_for(uri, env.merge(:method => "PATCH", :params => params)) + current_session.send(:process_request, uri, env, &block) + end + end + + def last_request? + last_request + true + rescue Rack::Test::Error + false + end + + def session + return {} unless last_request? + raise Rack::Test:Error, "session not enabled for app" unless last_env["rack.session"] or app.session? + last_request.session + end + + def last_env + last_request.env + end + + def build_rack_test_session(name) # :nodoc: + Session.new rack_mock_session(name) + end + end +end diff --git a/sinatra-contrib/spec/spec_helper.rb b/sinatra-contrib/spec/spec_helper.rb index 13e9ca10..cfd75b6d 100644 --- a/sinatra-contrib/spec/spec_helper.rb +++ b/sinatra-contrib/spec/spec_helper.rb @@ -1,8 +1,3 @@ -require 'forwardable' - -module TestHelpers -end - require 'sinatra/contrib' RSpec.configure do |config|