1
0
Fork 0
mirror of https://github.com/sinatra/sinatra synced 2023-03-27 23:18:01 -04:00
sinatra/compat/application_test.rb

263 lines
5.1 KiB
Ruby
Raw Normal View History

2007-11-28 00:55:05 -05:00
require File.dirname(__FILE__) + '/helper'
require 'uri'
2008-02-24 21:30:04 -05:00
class TesterWithEach
def each
yield 'foo'
yield 'bar'
yield 'baz'
end
end
2007-11-28 03:10:12 -05:00
context "An app returns" do
2007-11-28 01:52:52 -05:00
setup do
2008-02-24 21:30:04 -05:00
Sinatra.application = nil
2007-11-28 01:52:52 -05:00
end
2007-11-28 01:52:52 -05:00
specify "404 if no events found" do
request = Rack::MockRequest.new(@app)
2008-02-24 21:30:04 -05:00
get_it '/'
should.be.not_found
body.should.equal '<h1>Not Found</h1>'
2007-11-28 01:52:52 -05:00
end
2007-11-28 01:52:52 -05:00
specify "200 if success" do
2008-02-24 21:30:04 -05:00
get '/' do
2007-11-28 01:52:52 -05:00
'Hello World'
end
2008-02-24 21:30:04 -05:00
get_it '/'
should.be.ok
body.should.equal 'Hello World'
2007-11-28 01:52:52 -05:00
end
2007-11-28 03:10:12 -05:00
specify "an objects result from each if it has it" do
2008-02-24 21:30:04 -05:00
get '/' do
2007-11-28 03:10:12 -05:00
TesterWithEach.new
end
2008-02-24 21:30:04 -05:00
get_it '/'
should.be.ok
body.should.equal 'foobarbaz'
2007-11-28 03:10:12 -05:00
end
specify "404 if NotFound is raised" do
get '/' do
raise Sinatra::NotFound
end
get_it '/'
should.be.not_found
end
2007-11-28 03:10:12 -05:00
end
context "Application#configure blocks" do
setup do
Sinatra.application = nil
end
specify "run when no environment specified" do
ref = false
configure { ref = true }
ref.should.equal true
end
specify "run when matching environment specified" do
ref = false
configure(:test) { ref = true }
ref.should.equal true
end
specify "do not run when no matching environment specified" do
configure(:foo) { flunk "block should not have been executed" }
configure(:development, :production, :foo) { flunk "block should not have been executed" }
end
specify "accept multiple environments" do
ref = false
configure(:foo, :test, :bar) { ref = true }
ref.should.equal true
end
end
2007-11-28 03:10:12 -05:00
context "Events in an app" do
2007-11-28 03:10:12 -05:00
setup do
2008-02-24 21:30:04 -05:00
Sinatra.application = nil
2007-11-28 03:10:12 -05:00
end
2007-11-28 03:10:12 -05:00
specify "evaluate in a clean context" do
2008-02-24 21:30:04 -05:00
helpers do
2007-11-28 02:24:13 -05:00
def foo
'foo'
end
end
2008-02-24 21:30:04 -05:00
get '/foo' do
2007-11-28 02:24:13 -05:00
foo
end
2008-02-24 21:30:04 -05:00
get_it '/foo'
should.be.ok
body.should.equal 'foo'
2007-11-28 02:24:13 -05:00
end
2007-11-28 03:10:12 -05:00
specify "get access to request, response, and params" do
2008-02-24 21:30:04 -05:00
get '/:foo' do
params["foo"] + params["bar"]
2007-11-28 02:47:48 -05:00
end
2008-02-24 21:30:04 -05:00
get_it '/foo?bar=baz'
should.be.ok
body.should.equal 'foobaz'
2007-11-28 02:47:48 -05:00
end
2008-01-11 20:01:00 -05:00
specify "can filters by agent" do
2008-02-24 21:30:04 -05:00
get '/', :agent => /Windows/ do
2008-01-11 20:01:00 -05:00
request.env['HTTP_USER_AGENT']
end
get_it '/', :env => { :agent => 'Windows' }
2008-02-24 21:30:04 -05:00
should.be.ok
body.should.equal 'Windows'
2008-01-11 20:01:00 -05:00
get_it '/', :env => { :agent => 'Mac' }
2008-02-24 21:30:04 -05:00
should.not.be.ok
2008-01-11 20:01:00 -05:00
end
2008-03-24 21:04:51 -04:00
specify "can use regex to get parts of user-agent" do
2008-03-24 21:04:51 -04:00
get '/', :agent => /Windows (NT)/ do
params[:agent].first
end
get_it '/', :env => { :agent => 'Windows NT' }
2008-03-24 21:04:51 -04:00
body.should.equal 'NT'
end
specify "can deal with spaces in paths" do
path = '/path with spaces'
get path do
"Look ma, a path with spaces!"
end
get_it URI.encode(path)
body.should.equal "Look ma, a path with spaces!"
end
specify "route based on host" do
get '/' do
'asdf'
end
get_it '/'
assert ok?
assert_equal('asdf', body)
get '/foo', :host => 'foo.sinatrarb.com' do
'in foo!'
end
get '/foo', :host => 'bar.sinatrarb.com' do
'in bar!'
end
get_it '/foo', {}, 'HTTP_HOST' => 'foo.sinatrarb.com'
assert ok?
assert_equal 'in foo!', body
get_it '/foo', {}, 'HTTP_HOST' => 'bar.sinatrarb.com'
assert ok?
assert_equal 'in bar!', body
get_it '/foo'
assert not_found?
end
2007-11-28 01:52:52 -05:00
end
2007-11-28 03:10:12 -05:00
context "Options in an app" do
setup do
Sinatra.application = nil
@app = Sinatra::application
end
specify "can be set singly on app" do
@app.set :foo, 1234
@app.options.foo.should.equal 1234
end
specify "can be set singly from top-level" do
set_option :foo, 1234
@app.options.foo.should.equal 1234
end
specify "can be set multiply on app" do
@app.options.foo.should.be.nil
@app.set :foo => 1234,
:bar => 'hello, world'
@app.options.foo.should.equal 1234
@app.options.bar.should.equal 'hello, world'
end
specify "can be set multiply from top-level" do
@app.options.foo.should.be.nil
set_options :foo => 1234,
:bar => 'hello, world'
@app.options.foo.should.equal 1234
@app.options.bar.should.equal 'hello, world'
end
specify "can be enabled on app" do
@app.options.foo.should.be.nil
@app.enable :sessions, :foo, :bar
@app.options.sessions.should.equal true
@app.options.foo.should.equal true
@app.options.bar.should.equal true
end
specify "can be enabled from top-level" do
@app.options.foo.should.be.nil
enable :sessions, :foo, :bar
@app.options.sessions.should.equal true
@app.options.foo.should.equal true
@app.options.bar.should.equal true
end
specify "can be disabled on app" do
@app.options.foo.should.be.nil
@app.disable :sessions, :foo, :bar
@app.options.sessions.should.equal false
@app.options.foo.should.equal false
@app.options.bar.should.equal false
end
specify "can be enabled from top-level" do
@app.options.foo.should.be.nil
disable :sessions, :foo, :bar
@app.options.sessions.should.equal false
@app.options.foo.should.equal false
@app.options.bar.should.equal false
end
end