test/sinatra/test_base.rb in jellyfish-0.6.0 vs test/sinatra/test_base.rb in jellyfish-0.8.0

- old
+ new

@@ -3,76 +3,82 @@ # stolen from sinatra describe 'Sinatra base_test.rb' do behaves_like :jellyfish - class TestApp - include Jellyfish - get '/' do - 'Hello World' - end - end - - def app - @app ||= TestApp.new - end - should 'process requests with #call' do + app = Class.new{ + include Jellyfish + get '/' do + 'Hello World' + end + }.new app.respond_to?(:call).should.eq true - status, _, body = get('/') + status, _, body = get('/', app) status.should.eq 200 body .should.eq ['Hello World'] end - class TestApp - get '/state' do - @foo ||= 'new' - body = "Foo: #{@foo}" - @foo = 'discard' - body - end - end - should 'not maintain state between requests' do + app = Class.new{ + include Jellyfish + get '/state' do + @foo ||= 'new' + body = "Foo: #{@foo}" + @foo = 'discard' + body + end + }.new + 2.times do - status, _, body = get('/state') + status, _, body = get('/state', app) status.should.eq 200 body .should.eq ['Foo: new'] end end describe 'Jellyfish as a Rack middleware' do behaves_like :jellyfish - class TestMiddleware - include Jellyfish + def app + @app ||= Class.new{ + include Jellyfish + get '/' do + 'Hello from middleware' + end + + get '/low-level-forward' do + status, headers, body = jellyfish.app.call(env) + self.status status + self.headers headers + body + end + + get '/explicit-forward' do + headers_merge 'X-Middleware' => 'true' + status, headers, _ = jellyfish.app.call(env) + self.status status + self.headers headers + 'Hello after explicit forward' + end + }.new(inner_app) end def inner_app @inner_app ||= lambda{ |env| [210, {'X-Downstream' => 'true'}, ['Hello from downstream']] } end - def app - @app ||= TestMiddleware.new(inner_app) - end - should 'create a middleware that responds to #call with .new' do app.respond_to?(:call).should.eq true end should 'expose the downstream app' do app.app.object_id.should.eq inner_app.object_id end - class TestMiddleware - get '/' do - 'Hello from middleware' - end - end - should 'intercept requests' do status, _, body = get('/') status.should.eq 200 body .should.eq ['Hello from middleware'] end @@ -82,33 +88,14 @@ status .should.eq 210 headers['X-Downstream'].should.eq 'true' body .should.eq ['Hello from downstream'] end - class TestMiddleware - get '/low-level-forward' do - status, headers, body = jellyfish.app.call(env) - self.status status - self.headers headers - body - end - end - should 'call the downstream app directly and return result' do status, headers, body = get('/low-level-forward') status .should.eq 210 headers['X-Downstream'].should.eq 'true' body .should.eq ['Hello from downstream'] - end - - class TestMiddleware - get '/explicit-forward' do - headers_merge 'X-Middleware' => 'true' - status, headers, _ = jellyfish.app.call(env) - self.status status - self.headers headers - 'Hello after explicit forward' - end end should 'forward the request and integrate the response' do status, headers, body = get('/explicit-forward', Rack::ContentLength.new(app))