require 'rubygems' require_gem 'actionpack' require 'test/unit' require 'mod_rewrite' class RewriteTests < Test::Unit::TestCase def setup @rs = ::ActionController::Routing::RouteSet.new @expected = {:controller => 'content', :action => 'show', :id => '10'} end def assert_recognize uri, params={} ENV['REQUEST_URI'] = nil @request = ActionController::CgiRequest.new(CGI.new) @request.env['REQUEST_URI'] = uri @request.env['REQUEST_METHOD'] = 'GET' @rs.recognize!(@request) assert_equal(@expected.update(params).stringify_keys, @request.parameters) end def test_no_rewrite @rs.draw {|map| map.connect ':controller/:action/:id' } assert_recognize '/content/show/10?foo=bar', :foo => 'bar' end def test_simple_rewrite @rs.draw {|map| map.rewrite /\.(\w+)$/, '?flav=\1' map.connect ':controller/:action/:id' } assert_recognize '/content/show/10.html', :flav => 'html' end def test_unmatched_rewrite @rs.draw {|map| map.rewrite /\.(\w+)$/, '?flav=\1' map.connect ':controller/:action/:id' } assert_recognize '/content/show/10', {} end def test_restful_action @rs.draw {|map| map.rewrite {|request| request.query_parameters.update("action"=>request.method.to_s) } map.connect ':controller/:id' } assert_recognize '/content/10', :action => 'get' end def test_multiple_actions @rs.draw {|map| map.rewrite /\.(\w+)$/, '?flav=\1' map.rewrite {|request| request.query_parameters.update("action"=>request.method.to_s) } map.connect ':controller/:id' } assert_recognize '/content/10.html', :action => 'get', :flav => 'html' end end # test scaffolding module Object::Controllers def self.const_available?(*args) const_defined?(*args) end class ContentController def self.controller_path() 'content' end end end