diff options
Diffstat (limited to 'actionpack/test')
-rw-r--r-- | actionpack/test/dispatch/routing/custom_url_helpers_test.rb (renamed from actionpack/test/dispatch/routing/direct_url_helpers_test.rb) | 110 |
1 files changed, 75 insertions, 35 deletions
diff --git a/actionpack/test/dispatch/routing/direct_url_helpers_test.rb b/actionpack/test/dispatch/routing/custom_url_helpers_test.rb index 9bdda60742..6d230a2557 100644 --- a/actionpack/test/dispatch/routing/direct_url_helpers_test.rb +++ b/actionpack/test/dispatch/routing/custom_url_helpers_test.rb @@ -1,6 +1,6 @@ require "abstract_unit" -class TestDirectUrlHelpers < ActionDispatch::IntegrationTest +class TestCustomUrlHelpers < ActionDispatch::IntegrationTest class Linkable attr_reader :id @@ -53,6 +53,21 @@ class TestDirectUrlHelpers < ActionDispatch::IntegrationTest end end + class Page + attr_reader :id + + def self.name + super.demodulize + end + + def initialize(id) + @id = id + end + end + + class CategoryPage < Page; end + class ProductPage < Page; end + Routes = ActionDispatch::Routing::RouteSet.new Routes.draw do default_url_options host: "www.example.com" @@ -62,6 +77,7 @@ class TestDirectUrlHelpers < ActionDispatch::IntegrationTest get "/posts/:id", to: "posts#show", as: :post get "/profile", to: "users#profile", as: :profile get "/media/:id", to: "media#show", as: :media + get "/pages/:id", to: "pages#show", as: :page resources :categories, :collections, :products @@ -80,10 +96,11 @@ class TestDirectUrlHelpers < ActionDispatch::IntegrationTest direct(:options) { |options| [:products, options] } direct(:defaults, size: 10) { |options| [:products, options] } - direct(class: "Article") { |article| [:post, { id: article.id }] } - direct(class: "Basket") { |basket| [:basket] } - direct(class: "User", anchor: "details") { |user, options| [:profile, options] } - direct(class: "Video") { |video| [:media, { id: video.id }] } + resolve("Article") { |article| [:post, { id: article.id }] } + resolve("Basket") { |basket| [:basket] } + resolve("User", anchor: "details") { |user, options| [:profile, options] } + resolve("Video") { |video| [:media, { id: video.id }] } + resolve(%w[Page CategoryPage ProductPage]) { |page| [:page, { id: page.id }] } end APP = build_app Routes @@ -102,6 +119,9 @@ class TestDirectUrlHelpers < ActionDispatch::IntegrationTest @user = User.new @video = Video.new("4") @article = Article.new("5") + @page = Page.new("6") + @category_page = CategoryPage.new("7") + @product_page = ProductPage.new("8") @path_params = { "controller" => "pages", "action" => "index" } @unsafe_params = ActionController::Parameters.new(@path_params) @safe_params = ActionController::Parameters.new(@path_params).permit(:controller, :action) @@ -142,23 +162,6 @@ class TestDirectUrlHelpers < ActionDispatch::IntegrationTest assert_equal "/products?size=10", Routes.url_helpers.defaults_path assert_equal "/products?size=20", defaults_path(size: 20) assert_equal "/products?size=20", Routes.url_helpers.defaults_path(size: 20) - - assert_equal "/basket", polymorphic_path(@basket) - assert_equal "/basket", Routes.url_helpers.polymorphic_path(@basket) - - assert_equal "/profile#details", polymorphic_path(@user) - assert_equal "/profile#details", Routes.url_helpers.polymorphic_path(@user) - - assert_equal "/profile#password", polymorphic_path(@user, anchor: "password") - assert_equal "/profile#password", Routes.url_helpers.polymorphic_path(@user, anchor: "password") - - assert_equal "/media/4", polymorphic_path(@video) - assert_equal "/media/4", Routes.url_helpers.polymorphic_path(@video) - assert_equal "/media/4", ActionDispatch::Routing::PolymorphicRoutes::HelperMethodBuilder.path.handle_model_call(self, @video) - - assert_equal "/posts/5", polymorphic_path(@article) - assert_equal "/posts/5", Routes.url_helpers.polymorphic_path(@article) - assert_equal "/posts/5", ActionDispatch::Routing::PolymorphicRoutes::HelperMethodBuilder.path.handle_model_call(self, @article) end def test_direct_urls @@ -196,7 +199,40 @@ class TestDirectUrlHelpers < ActionDispatch::IntegrationTest assert_equal "http://www.example.com/products?size=10", Routes.url_helpers.defaults_url assert_equal "http://www.example.com/products?size=20", defaults_url(size: 20) assert_equal "http://www.example.com/products?size=20", Routes.url_helpers.defaults_url(size: 20) + end + def test_resolve_paths + assert_equal "/basket", polymorphic_path(@basket) + assert_equal "/basket", Routes.url_helpers.polymorphic_path(@basket) + + assert_equal "/profile#details", polymorphic_path(@user) + assert_equal "/profile#details", Routes.url_helpers.polymorphic_path(@user) + + assert_equal "/profile#password", polymorphic_path(@user, anchor: "password") + assert_equal "/profile#password", Routes.url_helpers.polymorphic_path(@user, anchor: "password") + + assert_equal "/media/4", polymorphic_path(@video) + assert_equal "/media/4", Routes.url_helpers.polymorphic_path(@video) + assert_equal "/media/4", ActionDispatch::Routing::PolymorphicRoutes::HelperMethodBuilder.path.handle_model_call(self, @video) + + assert_equal "/posts/5", polymorphic_path(@article) + assert_equal "/posts/5", Routes.url_helpers.polymorphic_path(@article) + assert_equal "/posts/5", ActionDispatch::Routing::PolymorphicRoutes::HelperMethodBuilder.path.handle_model_call(self, @article) + + assert_equal "/pages/6", polymorphic_path(@page) + assert_equal "/pages/6", Routes.url_helpers.polymorphic_path(@page) + assert_equal "/pages/6", ActionDispatch::Routing::PolymorphicRoutes::HelperMethodBuilder.path.handle_model_call(self, @page) + + assert_equal "/pages/7", polymorphic_path(@category_page) + assert_equal "/pages/7", Routes.url_helpers.polymorphic_path(@category_page) + assert_equal "/pages/7", ActionDispatch::Routing::PolymorphicRoutes::HelperMethodBuilder.path.handle_model_call(self, @category_page) + + assert_equal "/pages/8", polymorphic_path(@product_page) + assert_equal "/pages/8", Routes.url_helpers.polymorphic_path(@product_page) + assert_equal "/pages/8", ActionDispatch::Routing::PolymorphicRoutes::HelperMethodBuilder.path.handle_model_call(self, @product_page) + end + + def test_resolve_urls assert_equal "http://www.example.com/basket", polymorphic_url(@basket) assert_equal "http://www.example.com/basket", Routes.url_helpers.polymorphic_url(@basket) assert_equal "http://www.example.com/basket", polymorphic_url(@basket) @@ -215,35 +251,39 @@ class TestDirectUrlHelpers < ActionDispatch::IntegrationTest assert_equal "http://www.example.com/posts/5", polymorphic_url(@article) assert_equal "http://www.example.com/posts/5", Routes.url_helpers.polymorphic_url(@article) assert_equal "http://www.example.com/posts/5", ActionDispatch::Routing::PolymorphicRoutes::HelperMethodBuilder.url.handle_model_call(self, @article) - end - def test_raises_argument_error - routes = ActionDispatch::Routing::RouteSet.new + assert_equal "http://www.example.com/pages/6", polymorphic_url(@page) + assert_equal "http://www.example.com/pages/6", Routes.url_helpers.polymorphic_url(@page) + assert_equal "http://www.example.com/pages/6", ActionDispatch::Routing::PolymorphicRoutes::HelperMethodBuilder.url.handle_model_call(self, @page) - assert_raises ArgumentError do - routes.draw do - direct(1) { "http://www.rubyonrails.org" } - end - end + assert_equal "http://www.example.com/pages/7", polymorphic_url(@category_page) + assert_equal "http://www.example.com/pages/7", Routes.url_helpers.polymorphic_url(@category_page) + assert_equal "http://www.example.com/pages/7", ActionDispatch::Routing::PolymorphicRoutes::HelperMethodBuilder.url.handle_model_call(self, @category_page) + + assert_equal "http://www.example.com/pages/8", polymorphic_url(@product_page) + assert_equal "http://www.example.com/pages/8", Routes.url_helpers.polymorphic_url(@product_page) + assert_equal "http://www.example.com/pages/8", ActionDispatch::Routing::PolymorphicRoutes::HelperMethodBuilder.url.handle_model_call(self, @product_page) end - def test_missing_class_raises_argument_error + def test_defining_direct_inside_a_scope_raises_runtime_error routes = ActionDispatch::Routing::RouteSet.new - assert_raises ArgumentError do + assert_raises RuntimeError do routes.draw do - direct(fragment: "core") { "http://www.rubyonrails.org" } + namespace :admin do + direct(:rubyonrails) { "http://www.rubyonrails.org" } + end end end end - def test_defining_inside_a_scope_raises_runtime_error + def test_defining_resolve_inside_a_scope_raises_runtime_error routes = ActionDispatch::Routing::RouteSet.new assert_raises RuntimeError do routes.draw do namespace :admin do - direct(:rubyonrails) { "http://www.rubyonrails.org" } + resolve("User") { "/profile" } end end end |