From 6a611e1e95ceec43473d2310678bfd6156899b7a Mon Sep 17 00:00:00 2001 From: Michael Koziarski Date: Wed, 28 Nov 2007 04:11:37 +0000 Subject: Make sure the optimisation code for routes doesn't get used if :host, :anchor or :port are provided in the hash arguments. [pager, Koz] Closes #10292 git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@8227 5ecf4fe2-1ee6-0310-87b1-e25e094e27de --- actionpack/test/controller/routing_test.rb | 50 +++++++++++++++++++++++++++--- 1 file changed, 45 insertions(+), 5 deletions(-) (limited to 'actionpack/test/controller/routing_test.rb') diff --git a/actionpack/test/controller/routing_test.rb b/actionpack/test/controller/routing_test.rb index 8be709a7f4..e784244c88 100644 --- a/actionpack/test/controller/routing_test.rb +++ b/actionpack/test/controller/routing_test.rb @@ -218,13 +218,12 @@ class LegacyRouteSetTests < Test::Unit::TestCase x.send(:user_path, 3, :bar=>"foo") end - def test_optimized_named_route_with_host + def test_optimised_named_route_with_host rs.add_named_route :pages, 'pages', :controller => 'content', :action => 'show_page', :host => 'foo.com' x = setup_for_named_route x.expects(:url_for).with(:host => 'foo.com', :only_path => false, :controller => 'content', :action => 'show_page', :use_route => :pages).once x.send(:pages_url) - end - + end end def setup_for_named_route @@ -936,8 +935,16 @@ uses_mocha 'RouteTest' do def url_for(options) only_path = options.delete(:only_path) + + port = options.delete(:port) || 80 + port_string = port == 80 ? '' : ":#{port}" + + host = options.delete(:host) || "named.route.test" + anchor = "##{options.delete(:anchor)}" if options.key?(:anchor) + path = routes.generate(options) - only_path ? path : "http://named.route.test#{path}" + + only_path ? "#{path}#{anchor}" : "http://#{host}#{port_string}#{path}#{anchor}" end def request @@ -1553,7 +1560,40 @@ class RouteSetTest < Test::Unit::TestCase assert_equal '/admin/users', set.generate(controller.send(:hash_for_users_url), {:controller => 'users', :action => 'index'}) end - def test_namd_route_url_method_with_ordered_parameters + def test_named_route_url_method_with_anchor + controller = setup_named_route_test + + assert_equal "http://named.route.test/people/5#location", controller.send(:show_url, :id => 5, :anchor => 'location') + assert_equal "/people/5#location", controller.send(:show_path, :id => 5, :anchor => 'location') + + assert_equal "http://named.route.test/people#location", controller.send(:index_url, :anchor => 'location') + assert_equal "/people#location", controller.send(:index_path, :anchor => 'location') + + assert_equal "http://named.route.test/admin/users#location", controller.send(:users_url, :anchor => 'location') + assert_equal '/admin/users#location', controller.send(:users_path, :anchor => 'location') + + assert_equal "http://named.route.test/people/go/7/hello/joe/5#location", + controller.send(:multi_url, 7, "hello", 5, :anchor => 'location') + + assert_equal "http://named.route.test/people/go/7/hello/joe/5?baz=bar#location", + controller.send(:multi_url, 7, "hello", 5, :baz => "bar", :anchor => 'location') + + assert_equal "http://named.route.test/people?baz=bar#location", + controller.send(:index_url, :baz => "bar", :anchor => 'location') + end + + def test_named_route_url_method_with_port + controller = setup_named_route_test + assert_equal "http://named.route.test:8080/people/5", controller.send(:show_url, 5, :port=>8080) + end + + def test_named_route_url_method_with_host + controller = setup_named_route_test + assert_equal "http://some.example.com/people/5", controller.send(:show_url, 5, :host=>"some.example.com") + end + + + def test_named_route_url_method_with_ordered_parameters controller = setup_named_route_test assert_equal "http://named.route.test/people/go/7/hello/joe/5", controller.send(:multi_url, 7, "hello", 5) -- cgit v1.2.3