1 require File.dirname(__FILE__) + '/helper'
3 context "Looking up a request" do
6 @app = Sinatra::Application.new
9 specify "returns what's at the end" do
10 block = Proc.new { 'Hello' }
11 @app.define_event(:get, '/', &block)
14 'REQUEST_METHOD' => 'GET',
18 result.should.not.be.nil
19 result.block.should.be block
22 specify "takes params in path" do
23 block = Proc.new { 'Hello' }
24 @app.define_event(:get, '/:foo', &block)
27 'REQUEST_METHOD' => 'GET',
31 result.should.not.be.nil
32 result.block.should.be block
33 result.params.should.equal :foo => 'bar'
38 context "An app returns" do
41 @app = Sinatra::Application.new
44 specify "404 if no events found" do
45 request = Rack::MockRequest.new(@app)
46 result = request.get('/')
47 result.should.be.not_found
48 result.body.should.equal '<h1>Not Found</h1>'
51 specify "200 if success" do
52 @app.define_event(:get, '/') do
56 request = Rack::MockRequest.new(@app)
57 result = request.get('/')
59 result.body.should.equal 'Hello World'
62 specify "an objects result from each if it has it" do
72 @app.define_event(:get, '/') do
76 request = Rack::MockRequest.new(@app)
77 result = request.get('/')
79 result.body.should.equal 'foobarbaz'
83 specify "the body set if set before the last" do
85 @app.define_event(:get, '/') do
90 request = Rack::MockRequest.new(@app)
91 result = request.get('/')
93 result.body.should.equal 'Blake'
99 context "Events in an app" do
102 @app = Sinatra::Application.new
105 specify "evaluate in a clean context" do
106 Sinatra::EventContext.class_eval do
112 @app.define_event(:get, '/foo') do
116 request = Rack::MockRequest.new(@app)
117 result = request.get('/foo')
119 result.body.should.equal 'foo'
122 specify "get access to request, response, and params" do
123 @app.define_event(:get, '/:foo') do
124 params[:foo] + params[:bar]
127 request = Rack::MockRequest.new(@app)
128 result = request.get('/foo?bar=baz')
130 result.body.should.equal 'foobaz'
133 specify "can filters by agent" do
135 @app.define_event(:get, '/', :agent => /Windows/) do
136 request.env['HTTP_USER_AGENT']
139 Rack::MockRequest::DEFAULT_ENV.merge!('HTTP_USER_AGENT' => 'Windows')
141 request = Rack::MockRequest.new(@app)
142 result = request.get('/')
144 result.body.should.equal 'Windows'
146 Rack::MockRequest::DEFAULT_ENV.merge!('HTTP_USER_AGENT' => 'Mac')
148 request = Rack::MockRequest.new(@app)
149 result = request.get('/')
150 result.should.not.be.ok
152 Rack::MockRequest::DEFAULT_ENV.delete('HTTP_USER_AGENT')