mirror of
https://github.com/sinatra/sinatra
synced 2023-03-27 23:18:01 -04:00
c00a25ee41
* Adds test/helper.rb and moves mock_app and other code specific to testing the framework out of Sinatra::Test. * Do not require test/unit. The sinatra/test/unit, sinatra/test/spec, and sinatra/test/rspec files can be used to choose the framework. * Add Sinatra::TestHarness, which should act similar to the Rack::Session proposal here: http://gist.github.com/41270 * Update the README with information on using the different test frameworks.
59 lines
1.4 KiB
Ruby
59 lines
1.4 KiB
Ruby
require File.dirname(__FILE__) + '/helper'
|
|
|
|
describe "Middleware" do
|
|
before do
|
|
@app = mock_app(Sinatra::Default) {
|
|
get '/*' do
|
|
response.headers['X-Tests'] = env['test.ran'].join(', ')
|
|
env['PATH_INFO']
|
|
end
|
|
}
|
|
end
|
|
|
|
class MockMiddleware < Struct.new(:app)
|
|
def call(env)
|
|
(env['test.ran'] ||= []) << self.class.to_s
|
|
app.call(env)
|
|
end
|
|
end
|
|
|
|
class UpcaseMiddleware < MockMiddleware
|
|
def call(env)
|
|
env['PATH_INFO'] = env['PATH_INFO'].upcase
|
|
super
|
|
end
|
|
end
|
|
|
|
it "is added with Sinatra::Application.use" do
|
|
@app.use UpcaseMiddleware
|
|
get '/hello-world'
|
|
response.should.be.ok
|
|
body.should.equal '/HELLO-WORLD'
|
|
end
|
|
|
|
class DowncaseMiddleware < MockMiddleware
|
|
def call(env)
|
|
env['PATH_INFO'] = env['PATH_INFO'].downcase
|
|
super
|
|
end
|
|
end
|
|
|
|
specify "runs in the order defined" do
|
|
@app.use UpcaseMiddleware
|
|
@app.use DowncaseMiddleware
|
|
get '/Foo'
|
|
body.should.equal "/foo"
|
|
response['X-Tests'].should.equal "UpcaseMiddleware, DowncaseMiddleware"
|
|
end
|
|
|
|
specify "resets the prebuilt pipeline when new middleware is added" do
|
|
@app.use UpcaseMiddleware
|
|
get '/Foo'
|
|
body.should.equal "/FOO"
|
|
@app.use DowncaseMiddleware
|
|
get '/Foo'
|
|
body.should.equal '/foo'
|
|
response['X-Tests'].should.equal "UpcaseMiddleware, DowncaseMiddleware"
|
|
end
|
|
|
|
end
|