2009-02-22 06:29:54 +00:00
|
|
|
require 'yaml'
|
2009-01-18 13:23:00 +00:00
|
|
|
require File.dirname(__FILE__) + '/helper'
|
|
|
|
|
2009-01-28 21:53:40 +00:00
|
|
|
describe 'Sinatra::Test' do
|
|
|
|
def request
|
|
|
|
YAML.load(body)
|
|
|
|
end
|
|
|
|
|
|
|
|
def request_body
|
|
|
|
request['test.body']
|
|
|
|
end
|
|
|
|
|
|
|
|
def request_params
|
|
|
|
YAML.load(request['test.params'])
|
|
|
|
end
|
|
|
|
|
|
|
|
before do
|
2009-01-18 13:23:00 +00:00
|
|
|
mock_app {
|
2009-01-28 21:53:40 +00:00
|
|
|
%w[get head post put delete].each { |verb|
|
|
|
|
send(verb, '/') do
|
2009-02-22 13:13:32 +00:00
|
|
|
redirect '/redirected' if params[:redirect]
|
2009-01-28 21:53:40 +00:00
|
|
|
env.update('test.body' => request.body.read)
|
|
|
|
env.update('test.params' => params.to_yaml)
|
|
|
|
env.to_yaml
|
|
|
|
end
|
|
|
|
}
|
|
|
|
|
2009-02-22 13:13:32 +00:00
|
|
|
get '/redirected' do
|
2009-01-28 21:53:40 +00:00
|
|
|
"you've been redirected"
|
2009-01-18 13:23:00 +00:00
|
|
|
end
|
|
|
|
}
|
2009-01-28 21:53:40 +00:00
|
|
|
end
|
2009-01-18 13:23:00 +00:00
|
|
|
|
2009-02-22 13:13:59 +00:00
|
|
|
it 'allows GET/HEAD/POST/PUT/DELETE' do
|
2009-01-28 21:53:40 +00:00
|
|
|
get '/'
|
|
|
|
assert_equal('GET', request['REQUEST_METHOD'])
|
|
|
|
|
|
|
|
post '/'
|
|
|
|
assert_equal('POST', request['REQUEST_METHOD'])
|
|
|
|
|
|
|
|
put '/'
|
|
|
|
assert_equal('PUT', request['REQUEST_METHOD'])
|
|
|
|
|
|
|
|
delete '/'
|
|
|
|
assert_equal('DELETE', request['REQUEST_METHOD'])
|
2009-02-22 13:13:59 +00:00
|
|
|
|
|
|
|
head '/'
|
2009-02-25 17:52:52 +00:00
|
|
|
assert_equal('596', response.headers['Content-Length'])
|
|
|
|
assert_equal('', response.body)
|
2009-01-28 21:53:40 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
it 'allows to specify a body' do
|
|
|
|
post '/', '42'
|
|
|
|
assert_equal '42', request_body
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'allows to specify params' do
|
|
|
|
get '/', :foo => 'bar'
|
|
|
|
assert_equal 'bar', request_params['foo']
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'supports nested params' do
|
|
|
|
get '/', :foo => { :x => 'y', :chunky => 'bacon' }
|
|
|
|
assert_equal "y", request_params['foo']['x']
|
|
|
|
assert_equal "bacon", request_params['foo']['chunky']
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'provides easy access to response status and body' do
|
|
|
|
get '/'
|
|
|
|
assert_equal 200, status
|
|
|
|
assert body =~ /^---/
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'delegates methods to @response' do
|
|
|
|
get '/'
|
|
|
|
assert ok?
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'follows redirect' do
|
2009-02-22 13:13:32 +00:00
|
|
|
get '/', :redirect => true
|
2009-01-28 21:53:40 +00:00
|
|
|
follow!
|
|
|
|
assert_equal "you've been redirected", body
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'provides sugar for common HTTP headers' do
|
|
|
|
get '/', :env => { :accept => 'text/plain' }
|
|
|
|
assert_equal 'text/plain', request['HTTP_ACCEPT']
|
|
|
|
|
|
|
|
get '/', :env => { :agent => 'TATFT' }
|
|
|
|
assert_equal 'TATFT', request['HTTP_USER_AGENT']
|
|
|
|
|
|
|
|
get '/', :env => { :host => '1.2.3.4' }
|
|
|
|
assert_equal '1.2.3.4', request['HTTP_HOST']
|
|
|
|
|
|
|
|
get '/', :env => { :session => 'foo' }
|
2009-02-27 06:37:53 +00:00
|
|
|
assert_equal 'foo', request['rack.session']
|
2009-01-28 21:53:40 +00:00
|
|
|
|
|
|
|
get '/', :env => { :cookies => 'foo' }
|
|
|
|
assert_equal 'foo', request['HTTP_COOKIE']
|
|
|
|
|
|
|
|
get '/', :env => { :content_type => 'text/plain' }
|
|
|
|
assert_equal 'text/plain', request['CONTENT_TYPE']
|
|
|
|
end
|
2009-01-18 13:23:00 +00:00
|
|
|
|
2009-02-26 00:36:58 +00:00
|
|
|
it 'allow to test session easily' do
|
|
|
|
app = mock_app(Sinatra::Default) {
|
|
|
|
get '/' do
|
|
|
|
session['foo'] = 'bar'
|
|
|
|
200
|
|
|
|
end
|
|
|
|
|
|
|
|
post '/' do
|
|
|
|
assert_equal 'bar', session['foo']
|
|
|
|
session['foo'] || "blah"
|
|
|
|
end
|
|
|
|
}
|
|
|
|
|
|
|
|
browser = Sinatra::TestHarness.new(app)
|
|
|
|
browser.get '/'
|
2009-02-27 06:37:53 +00:00
|
|
|
browser.post '/', {}, :session => { 'foo' => 'bar' }
|
2009-02-26 00:36:58 +00:00
|
|
|
assert_equal 'bar', browser.response.body
|
|
|
|
end
|
|
|
|
|
2009-02-24 06:22:36 +00:00
|
|
|
it 'yields the request object to the block before invoking the application' do
|
|
|
|
called = false
|
|
|
|
get '/' do |req|
|
|
|
|
called = true
|
|
|
|
assert req.kind_of?(Rack::MockRequest)
|
|
|
|
end
|
|
|
|
assert called
|
|
|
|
end
|
|
|
|
|
2009-03-02 00:43:23 +00:00
|
|
|
it 'sets the environment to :test on include' do
|
|
|
|
Sinatra::Default.set(:environment, :production)
|
|
|
|
Class.new { include Sinatra::Test }
|
|
|
|
assert_equal :test, Sinatra::Default.environment
|
|
|
|
end
|
|
|
|
|
2009-01-28 21:53:40 +00:00
|
|
|
def test_TestHarness
|
|
|
|
session = Sinatra::TestHarness.new(@app)
|
|
|
|
response = session.get('/')
|
|
|
|
assert_equal 200, response.status
|
2009-01-18 13:23:00 +00:00
|
|
|
end
|
|
|
|
end
|