require File.dirname(__FILE__) + '/helper' describe 'Sinatra::Helpers' do describe '#status' do setup do mock_app { get '/' do status 207 nil end } end it 'sets the response status code' do get '/' assert_equal 207, response.status end end describe '#body' do it 'takes a block for defered body generation' do mock_app { get '/' do body { 'Hello World' } end } get '/' assert_equal 'Hello World', body end it 'takes a String, Array, or other object responding to #each' do mock_app { get '/' do body 'Hello World' end } get '/' assert_equal 'Hello World', body end end describe '#redirect' do it 'uses a 302 when only a path is given' do mock_app { get '/' do redirect '/foo' fail 'redirect should halt' end } get '/' assert_equal 302, status assert_equal '', body assert_equal '/foo', response['Location'] end it 'uses the code given when specified' do mock_app { get '/' do redirect '/foo', 301 fail 'redirect should halt' end } get '/' assert_equal 301, status assert_equal '', body assert_equal '/foo', response['Location'] end end describe '#error' do it 'sets a status code and halts' do mock_app { get '/' do error 501 fail 'error should halt' end } get '/' assert_equal 501, status assert_equal '', body end it 'takes an optional body' do mock_app { get '/' do error 501, 'FAIL' fail 'error should halt' end } get '/' assert_equal 501, status assert_equal 'FAIL', body end it 'uses a 500 status code when first argument is a body' do mock_app { get '/' do error 'FAIL' fail 'error should halt' end } get '/' assert_equal 500, status assert_equal 'FAIL', body end end describe '#not_found' do it 'halts with a 404 status' do mock_app { get '/' do not_found fail 'not_found should halt' end } get '/' assert_equal 404, status assert_equal '', body end end describe '#session' do it 'uses the existing rack.session' do mock_app { get '/' do session[:foo] end } get '/', :env => { 'rack.session' => { :foo => 'bar' } } assert_equal 'bar', body end it 'creates a new session when none provided' do mock_app { get '/' do assert session.empty? session[:foo] = 'bar' 'Hi' end } get '/' assert_equal 'Hi', body end end describe '#media_type' do include Sinatra::Helpers it "looks up media types in Rack's MIME registry" do Rack::Mime::MIME_TYPES['.foo'] = 'application/foo' assert_equal 'application/foo', media_type('foo') assert_equal 'application/foo', media_type('.foo') assert_equal 'application/foo', media_type(:foo) end it 'returns nil when given nil' do assert media_type(nil).nil? end it 'returns nil when media type not registered' do assert media_type(:bizzle).nil? end it 'returns the argument when given a media type string' do assert_equal 'text/plain', media_type('text/plain') end end describe '#content_type' do it 'sets the Content-Type header' do mock_app { get '/' do content_type 'text/plain' 'Hello World' end } get '/' assert_equal 'text/plain', response['Content-Type'] assert_equal 'Hello World', body end it 'takes media type parameters (like charset=)' do mock_app { get '/' do content_type 'text/html', :charset => 'utf-8' "