File: test_helpers.rb

package info (click to toggle)
ruby-sinatra-contrib 1.4.2-1
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 552 kB
  • ctags: 365
  • sloc: ruby: 4,604; makefile: 2
file content (87 lines) | stat: -rw-r--r-- 1,988 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
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
    attr_accessor :settings

    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_delegators :rack_mock_session, :cookie_jar

    def mock_app(base = Sinatra::Base, &block)
      inner = nil
      @app  = Sinatra.new(base) do
        inner = self
        class_eval(&block)
      end
      @settings = inner
      app
    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