2008-01-05 13:32:06 +00:00
|
|
|
require 'abstract_unit'
|
2007-06-07 21:35:01 +00:00
|
|
|
|
|
|
|
class Article
|
|
|
|
attr_reader :id
|
|
|
|
def save; @id = 1 end
|
|
|
|
def new_record?; @id.nil? end
|
|
|
|
def name
|
2008-01-27 01:18:47 +00:00
|
|
|
model = self.class.name.downcase
|
|
|
|
@id.nil? ? "new #{model}" : "#{model} ##{@id}"
|
2007-06-07 21:35:01 +00:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2008-02-16 03:08:05 +00:00
|
|
|
class Response < Article
|
2007-06-07 21:35:01 +00:00
|
|
|
def post_id; 1 end
|
|
|
|
end
|
|
|
|
|
2008-01-27 01:18:47 +00:00
|
|
|
class Tag < Article
|
2008-02-16 03:08:05 +00:00
|
|
|
def response_id; 1 end
|
2008-01-27 01:18:47 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
# TODO: test nested models
|
2008-02-16 03:08:05 +00:00
|
|
|
class Response::Nested < Response; end
|
2007-06-07 21:35:01 +00:00
|
|
|
|
2008-01-27 01:18:47 +00:00
|
|
|
uses_mocha 'polymorphic URL helpers' do
|
2008-11-07 20:42:34 +00:00
|
|
|
class PolymorphicRoutesTest < ActiveSupport::TestCase
|
2008-01-27 01:18:47 +00:00
|
|
|
include ActionController::PolymorphicRoutes
|
|
|
|
|
|
|
|
def setup
|
|
|
|
@article = Article.new
|
2008-02-16 03:08:05 +00:00
|
|
|
@response = Response.new
|
2008-01-27 01:18:47 +00:00
|
|
|
end
|
2007-07-19 13:42:11 +00:00
|
|
|
|
2008-01-27 01:18:47 +00:00
|
|
|
def test_with_record
|
|
|
|
@article.save
|
|
|
|
expects(:article_url).with(@article)
|
|
|
|
polymorphic_url(@article)
|
|
|
|
end
|
2007-06-07 21:35:01 +00:00
|
|
|
|
2008-01-27 01:18:47 +00:00
|
|
|
def test_with_new_record
|
|
|
|
expects(:articles_url).with()
|
|
|
|
@article.expects(:new_record?).returns(true)
|
|
|
|
polymorphic_url(@article)
|
|
|
|
end
|
2007-06-07 21:35:01 +00:00
|
|
|
|
2008-01-27 01:18:47 +00:00
|
|
|
def test_with_record_and_action
|
|
|
|
expects(:new_article_url).with()
|
|
|
|
@article.expects(:new_record?).never
|
|
|
|
polymorphic_url(@article, :action => 'new')
|
|
|
|
end
|
2007-06-07 21:35:01 +00:00
|
|
|
|
2008-01-27 01:18:47 +00:00
|
|
|
def test_url_helper_prefixed_with_new
|
|
|
|
expects(:new_article_url).with()
|
|
|
|
new_polymorphic_url(@article)
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_url_helper_prefixed_with_edit
|
|
|
|
@article.save
|
|
|
|
expects(:edit_article_url).with(@article)
|
|
|
|
edit_polymorphic_url(@article)
|
|
|
|
end
|
|
|
|
|
2008-08-21 17:26:05 +00:00
|
|
|
def test_url_helper_prefixed_with_edit_with_url_options
|
|
|
|
@article.save
|
|
|
|
expects(:edit_article_url).with(@article, :param1 => '10')
|
|
|
|
edit_polymorphic_url(@article, :param1 => '10')
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_url_helper_with_url_options
|
|
|
|
@article.save
|
|
|
|
expects(:article_url).with(@article, :param1 => '10')
|
|
|
|
polymorphic_url(@article, :param1 => '10')
|
|
|
|
end
|
|
|
|
|
2008-12-01 01:03:38 +00:00
|
|
|
def test_formatted_url_helper_is_deprecated
|
|
|
|
expects(:articles_url).with(:format => :pdf)
|
|
|
|
assert_deprecated do
|
|
|
|
formatted_polymorphic_url([@article, :pdf])
|
|
|
|
end
|
2008-01-27 01:18:47 +00:00
|
|
|
end
|
|
|
|
|
2008-04-11 17:34:44 +00:00
|
|
|
def test_format_option
|
2008-01-27 01:18:47 +00:00
|
|
|
@article.save
|
2008-12-01 01:03:38 +00:00
|
|
|
expects(:article_url).with(@article, :format => :pdf)
|
2008-01-27 01:18:47 +00:00
|
|
|
polymorphic_url(@article, :format => :pdf)
|
|
|
|
end
|
|
|
|
|
2008-08-21 17:26:05 +00:00
|
|
|
def test_format_option_with_url_options
|
|
|
|
@article.save
|
2008-12-01 01:03:38 +00:00
|
|
|
expects(:article_url).with(@article, :format => :pdf, :param1 => '10')
|
2008-08-21 17:26:05 +00:00
|
|
|
polymorphic_url(@article, :format => :pdf, :param1 => '10')
|
|
|
|
end
|
|
|
|
|
2008-04-11 17:34:44 +00:00
|
|
|
def test_id_and_format_option
|
|
|
|
@article.save
|
|
|
|
expects(:article_url).with(:id => @article, :format => :pdf)
|
|
|
|
polymorphic_url(:id => @article, :format => :pdf)
|
|
|
|
end
|
|
|
|
|
2008-01-27 01:18:47 +00:00
|
|
|
def test_with_nested
|
2008-02-16 03:08:05 +00:00
|
|
|
@response.save
|
|
|
|
expects(:article_response_url).with(@article, @response)
|
|
|
|
polymorphic_url([@article, @response])
|
2008-01-27 01:18:47 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
def test_with_nested_unsaved
|
2008-02-16 03:08:05 +00:00
|
|
|
expects(:article_responses_url).with(@article)
|
|
|
|
polymorphic_url([@article, @response])
|
2008-01-27 01:18:47 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
def test_new_with_array_and_namespace
|
|
|
|
expects(:new_admin_article_url).with()
|
|
|
|
polymorphic_url([:admin, @article], :action => 'new')
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_unsaved_with_array_and_namespace
|
|
|
|
expects(:admin_articles_url).with()
|
|
|
|
polymorphic_url([:admin, @article])
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_nested_unsaved_with_array_and_namespace
|
|
|
|
@article.save
|
|
|
|
expects(:admin_article_url).with(@article)
|
|
|
|
polymorphic_url([:admin, @article])
|
2008-02-16 03:08:05 +00:00
|
|
|
expects(:admin_article_responses_url).with(@article)
|
|
|
|
polymorphic_url([:admin, @article, @response])
|
2008-01-27 01:18:47 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
def test_nested_with_array_and_namespace
|
2008-02-16 03:08:05 +00:00
|
|
|
@response.save
|
|
|
|
expects(:admin_article_response_url).with(@article, @response)
|
|
|
|
polymorphic_url([:admin, @article, @response])
|
2008-01-27 01:18:47 +00:00
|
|
|
|
|
|
|
# a ridiculously long named route tests correct ordering of namespaces and nesting:
|
|
|
|
@tag = Tag.new
|
|
|
|
@tag.save
|
2008-02-16 03:08:05 +00:00
|
|
|
expects(:site_admin_article_response_tag_url).with(@article, @response, @tag)
|
|
|
|
polymorphic_url([:site, :admin, @article, @response, @tag])
|
2008-01-27 01:18:47 +00:00
|
|
|
end
|
|
|
|
|
2008-06-20 19:21:04 +00:00
|
|
|
def test_nesting_with_array_ending_in_singleton_resource
|
|
|
|
expects(:article_response_url).with(@article)
|
|
|
|
polymorphic_url([@article, :response])
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_nesting_with_array_containing_singleton_resource
|
|
|
|
@tag = Tag.new
|
|
|
|
@tag.save
|
|
|
|
expects(:article_response_tag_url).with(@article, @tag)
|
|
|
|
polymorphic_url([@article, :response, @tag])
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_nesting_with_array_containing_namespace_and_singleton_resource
|
|
|
|
@tag = Tag.new
|
|
|
|
@tag.save
|
|
|
|
expects(:admin_article_response_tag_url).with(@article, @tag)
|
|
|
|
polymorphic_url([:admin, @article, :response, @tag])
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_nesting_with_array_containing_singleton_resource_and_format
|
|
|
|
@tag = Tag.new
|
|
|
|
@tag.save
|
2008-12-01 01:03:38 +00:00
|
|
|
expects(:article_response_tag_url).with(@article, @tag, :format => :pdf)
|
|
|
|
polymorphic_url([@article, :response, @tag], :format => :pdf)
|
2008-06-20 19:21:04 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
def test_nesting_with_array_containing_singleton_resource_and_format_option
|
|
|
|
@tag = Tag.new
|
|
|
|
@tag.save
|
2008-12-01 01:03:38 +00:00
|
|
|
expects(:article_response_tag_url).with(@article, @tag, :format => :pdf)
|
2008-06-20 19:21:04 +00:00
|
|
|
polymorphic_url([@article, :response, @tag], :format => :pdf)
|
|
|
|
end
|
|
|
|
|
2008-11-03 05:09:07 +00:00
|
|
|
def test_nesting_with_array_containing_nil
|
|
|
|
expects(:article_response_url).with(@article)
|
|
|
|
polymorphic_url([@article, nil, :response])
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_with_array_containing_single_object
|
|
|
|
@article.save
|
|
|
|
expects(:article_url).with(@article)
|
|
|
|
polymorphic_url([nil, @article])
|
|
|
|
end
|
|
|
|
|
2008-11-16 08:51:39 +00:00
|
|
|
def test_with_array_containing_single_name
|
|
|
|
@article.save
|
|
|
|
expects(:articles_url)
|
|
|
|
polymorphic_url([:articles])
|
|
|
|
end
|
|
|
|
|
2008-01-27 01:18:47 +00:00
|
|
|
# TODO: Needs to be updated to correctly know about whether the object is in a hash or not
|
|
|
|
def xtest_with_hash
|
|
|
|
expects(:article_url).with(@article)
|
|
|
|
@article.save
|
|
|
|
polymorphic_url(:id => @article)
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_polymorphic_path_accepts_options
|
|
|
|
expects(:new_article_path).with()
|
|
|
|
polymorphic_path(@article, :action => :new)
|
|
|
|
end
|
2007-06-28 22:27:59 +00:00
|
|
|
|
2008-03-17 23:45:42 +00:00
|
|
|
def test_polymorphic_path_does_not_modify_arguments
|
|
|
|
expects(:admin_article_responses_url).with(@article)
|
|
|
|
path = [:admin, @article, @response]
|
|
|
|
assert_no_difference 'path.size' do
|
|
|
|
polymorphic_url(path)
|
|
|
|
end
|
|
|
|
end
|
2007-07-19 13:42:11 +00:00
|
|
|
end
|
2007-06-07 21:35:01 +00:00
|
|
|
end
|