diff --git a/test/exercise/rackup/inatra.rb b/test/exercise/rackup/inatra.rb index a04045d9..cbb42f67 100644 --- a/test/exercise/rackup/inatra.rb +++ b/test/exercise/rackup/inatra.rb @@ -1,9 +1,29 @@ module Inatra + @routes = {} + class << self - def routes + def routes(&block) + instance_eval(&block) + end + + def method_missing(missing_method_name, *args, &block) + if args.length == 1 + @routes[missing_method_name.to_s.upcase] ||= {} + @routes[missing_method_name.to_s.upcase][args[0]] = block + else + super + end + end + + def respond_to_missing?(method_name, *_args) + @routes.include?(method_name.to_s.upcase) end def call(env) + request_method = env['REQUEST_METHOD'] + path = env['PATH_INFO'] + func = @routes[request_method][path] + func ? func.call : [404, {}, ['Not Found']] end end end diff --git a/test/exercise/rackup/my_app.rb b/test/exercise/rackup/my_app.rb index 7c3d8ccf..d9ba5b10 100644 --- a/test/exercise/rackup/my_app.rb +++ b/test/exercise/rackup/my_app.rb @@ -2,4 +2,12 @@ get '/hello' do [200, {}, ['Hello World']] end + + get '/ping' do + [200, {}, ['PONG']] + end + + post '/bye' do + [200, {}, ['Bye Bye']] + end end diff --git a/test/exercise/rackup/test.rb b/test/exercise/rackup/test.rb index abc99cb4..e0f8b34b 100644 --- a/test/exercise/rackup/test.rb +++ b/test/exercise/rackup/test.rb @@ -5,12 +5,31 @@ require_relative './my_app' class RackTest < Test::Unit::TestCase + def setup + @browser = Rack::Test::Session.new(Rack::MockSession.new(Inatra)) + end + def test_it_says_hello_world - omit do - browser = Rack::Test::Session.new(Rack::MockSession.new(Inatra)) - browser.get '/hello' - assert browser.last_response.ok? - assert_equal 'Hello World', browser.last_response.body - end + @browser.get '/hello' + assert @browser.last_response.ok? + assert_equal 'Hello World', @browser.last_response.body + end + + def test_it_pongs + @browser.get '/ping' + assert @browser.last_response.ok? + assert_equal 'PONG', @browser.last_response.body + end + + def test_it_says_bye + @browser.post '/bye' + assert @browser.last_response.ok? + assert_equal 'Bye Bye', @browser.last_response.body + end + + def test_it_handles_404 + @browser.get '/missing_method' + assert @browser.last_response.not_found? + assert_equal 'Not Found', @browser.last_response.body end end