aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/test/dispatch/routing
diff options
context:
space:
mode:
authorAndrew White <andrew.white@unboxed.co>2017-02-21 15:29:10 +0000
committerAndrew White <andrew.white@unboxed.co>2017-02-21 15:30:48 +0000
commitd7c1e62c2cd2969b991bc4a1150b02b27f6d6e3f (patch)
tree184406df10d1e8ebabc4970b15c8bbf113955c39 /actionpack/test/dispatch/routing
parentfbda6b9837e3ce41dc59de0e791c972ba6d49ba3 (diff)
downloadrails-d7c1e62c2cd2969b991bc4a1150b02b27f6d6e3f.tar.gz
rails-d7c1e62c2cd2969b991bc4a1150b02b27f6d6e3f.tar.bz2
rails-d7c1e62c2cd2969b991bc4a1150b02b27f6d6e3f.zip
Split direct method into two
Use a separate method called `resolve` for the custom polymorphic mapping to clarify the API.
Diffstat (limited to 'actionpack/test/dispatch/routing')
-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