diff options
author | Andrew White <andrew.white@unboxed.co> | 2017-03-17 21:30:29 +0000 |
---|---|---|
committer | Andrew White <andrew.white@unboxed.co> | 2017-03-17 21:30:29 +0000 |
commit | fd16e1a92feed73df70e140880cc17b6e482c846 (patch) | |
tree | 2e6282c4ba42aab31f18b05f616b7f8e9268cb5e /actionview/test | |
parent | bac40b9cc8bae5a88743dba01bdee24ef8a2d579 (diff) | |
download | rails-fd16e1a92feed73df70e140880cc17b6e482c846.tar.gz rails-fd16e1a92feed73df70e140880cc17b6e482c846.tar.bz2 rails-fd16e1a92feed73df70e140880cc17b6e482c846.zip |
Always use original url_for when generating direct routes
Action View overrides `url_for` in the view context to render paths by
default when using `url_for` and this means that direct route helpers
don't get the full url when called with the url suffix. To fix this
always call the original `url_for`.
Diffstat (limited to 'actionview/test')
-rw-r--r-- | actionview/test/activerecord/polymorphic_routes_test.rb | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/actionview/test/activerecord/polymorphic_routes_test.rb b/actionview/test/activerecord/polymorphic_routes_test.rb index e99c769dc2..b2e0fb08c4 100644 --- a/actionview/test/activerecord/polymorphic_routes_test.rb +++ b/actionview/test/activerecord/polymorphic_routes_test.rb @@ -730,3 +730,49 @@ class PolymorphicPathRoutesTest < PolymorphicRoutesTest assert_equal url.sub(/http:\/\/#{host}/, ""), url_for(args) end end + +class DirectRoutesTest < ActionView::TestCase + class Linkable + attr_reader :id + + def self.name + super.demodulize + end + + def initialize(id) + @id = id + end + + def linkable_type + self.class.name.underscore + end + end + + class Category < Linkable; end + class Collection < Linkable; end + class Product < Linkable; end + + Routes = ActionDispatch::Routing::RouteSet.new + Routes.draw do + resources :categories, :collections, :products + direct(:linkable) { |linkable| [:"#{linkable.linkable_type}", { id: linkable.id }] } + end + + include Routes.url_helpers + + def setup + @category = Category.new("1") + @collection = Collection.new("2") + @product = Product.new("3") + end + + def test_direct_routes + assert_equal "/categories/1", linkable_path(@category) + assert_equal "/collections/2", linkable_path(@collection) + assert_equal "/products/3", linkable_path(@product) + + assert_equal "http://test.host/categories/1", linkable_url(@category) + assert_equal "http://test.host/collections/2", linkable_url(@collection) + assert_equal "http://test.host/products/3", linkable_url(@product) + end +end |