1
0
Fork 0
mirror of https://github.com/sinatra/sinatra synced 2023-03-27 23:18:01 -04:00
sinatra/test/test_test.rb
2009-04-25 08:00:54 -07:00

144 lines
3.4 KiB
Ruby

require 'yaml'
require File.dirname(__FILE__) + '/helper'
class TestTest < Test::Unit::TestCase
def request
YAML.load(body)
end
def request_body
request['test.body']
end
def request_params
YAML.load(request['test.params'])
end
setup do
mock_app {
%w[get head post put delete].each { |verb|
send(verb, '/') do
redirect '/redirected' if params[:redirect]
env.update('test.body' => request.body.read)
env.update('test.params' => params.to_yaml)
env.to_yaml
end
}
get '/redirected' do
"you've been redirected"
end
}
end
it 'allows GET/HEAD/POST/PUT/DELETE' do
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'])
head '/'
assert_equal('', response.body)
assert response.headers['Content-Length'].to_i > 0
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
get '/', :redirect => true
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' => 'bar'} }
assert_equal({'foo' => 'bar'}, request['rack.session'])
get '/', :env => { :cookies => 'foo' }
assert_equal 'foo', request['HTTP_COOKIE']
get '/', :env => { :content_type => 'text/plain' }
assert_equal 'text/plain', request['CONTENT_TYPE']
end
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 '/'
browser.post '/', {}, :session => { 'foo' => 'bar' }
assert_equal 'bar', browser.response.body
end
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
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
def test_TestHarness
session = Sinatra::TestHarness.new(@app)
response = session.get('/')
assert_equal 200, response.status
end
end