2017-07-23 11:36:41 -04:00
# frozen_string_literal: true
2016-08-06 12:50:17 -04:00
require " abstract_unit "
2004-11-23 20:04:44 -05:00
2016-05-31 10:36:22 -04:00
class Workshop
extend ActiveModel :: Naming
include ActiveModel :: Conversion
attr_accessor :id
def initialize ( id )
@id = id
end
def persisted?
id . present?
end
def to_s
id . to_s
end
end
2010-04-03 05:30:06 -04:00
class UrlHelperTest < ActiveSupport :: TestCase
# In a few cases, the helper proxies to 'controller'
# or request.
#
# In those cases, we'll set up a simple mock
2011-05-01 05:14:38 -04:00
attr_accessor :controller , :request
2010-04-03 05:30:06 -04:00
2017-05-31 05:16:20 -04:00
cattr_accessor :request_forgery , default : false
2012-01-18 17:30:04 -05:00
2010-04-03 05:30:06 -04:00
routes = ActionDispatch :: Routing :: RouteSet . new
routes . draw do
2012-04-24 23:32:09 -04:00
get " / " = > " foo # bar "
get " /other " = > " foo # other "
get " /article/:id " = > " foo # article " , :as = > :article
2013-08-01 09:43:45 -04:00
get " /category/:category " = > " foo # category "
2017-06-19 18:01:20 -04:00
scope :engine do
get " / " = > " foo # bar "
end
2010-04-03 05:30:06 -04:00
end
2012-06-21 12:39:35 -04:00
include ActionView :: Helpers :: UrlHelper
2010-04-03 05:30:06 -04:00
include routes . url_helpers
2010-12-06 22:27:55 -05:00
include ActionView :: Helpers :: JavaScriptHelper
2013-10-11 07:12:30 -04:00
include Rails :: Dom :: Testing :: Assertions :: DomAssertions
2010-04-03 05:30:06 -04:00
include ActionView :: Context
include RenderERBUtils
2011-05-23 02:38:10 -04:00
setup :_prepare_context
2012-01-21 16:26:17 -05:00
def hash_for ( options = { } )
2012-10-06 21:00:06 -04:00
{ controller : " foo " , action : " bar " } . merge! ( options )
2010-04-03 05:30:06 -04:00
end
alias url_hash hash_for
2010-06-29 13:55:57 -04:00
def test_url_for_does_not_escape_urls
2012-10-06 21:00:06 -04:00
assert_equal " /?a=b&c=d " , url_for ( hash_for ( a : :b , c : :d ) )
2007-06-05 00:29:19 -04:00
end
2015-08-14 18:19:56 -04:00
def test_url_for_does_not_include_empty_hashes
assert_equal " / " , url_for ( hash_for ( a : { } ) )
end
2008-07-19 14:06:43 -04:00
def test_url_for_with_back
2016-08-06 12:50:17 -04:00
referer = " http://www.example.com/referer "
2012-10-06 21:00:06 -04:00
@controller = Struct . new ( :request ) . new ( Struct . new ( :env ) . new ( " HTTP_REFERER " = > referer ) )
2010-04-03 05:30:06 -04:00
2016-08-06 12:50:17 -04:00
assert_equal " http://www.example.com/referer " , url_for ( :back )
2008-07-19 14:06:43 -04:00
end
def test_url_for_with_back_and_no_referer
2010-04-03 05:30:06 -04:00
@controller = Struct . new ( :request ) . new ( Struct . new ( :env ) . new ( { } ) )
2016-08-06 12:50:17 -04:00
assert_equal " javascript:history.back() " , url_for ( :back )
2008-07-19 14:06:43 -04:00
end
2015-11-03 20:17:10 -05:00
def test_url_for_with_back_and_no_controller
@controller = nil
2016-08-06 12:50:17 -04:00
assert_equal " javascript:history.back() " , url_for ( :back )
2015-11-03 20:17:10 -05:00
end
def test_url_for_with_back_and_javascript_referer
2016-08-06 12:50:17 -04:00
referer = " javascript:alert(document.cookie) "
2015-11-03 20:17:10 -05:00
@controller = Struct . new ( :request ) . new ( Struct . new ( :env ) . new ( " HTTP_REFERER " = > referer ) )
2016-08-06 12:50:17 -04:00
assert_equal " javascript:history.back() " , url_for ( :back )
2015-11-03 20:17:10 -05:00
end
def test_url_for_with_invalid_referer
2016-08-06 12:50:17 -04:00
referer = " THIS IS NOT A URL "
2015-11-03 20:17:10 -05:00
@controller = Struct . new ( :request ) . new ( Struct . new ( :env ) . new ( " HTTP_REFERER " = > referer ) )
2016-08-06 12:50:17 -04:00
assert_equal " javascript:history.back() " , url_for ( :back )
2015-11-03 20:17:10 -05:00
end
2018-06-27 19:17:10 -04:00
def test_url_for_with_array_defaults_to_only_path_true
assert_equal " /other " , url_for ( [ :other , { controller : " foo " } ] )
end
def test_url_for_with_array_and_only_path_set_to_false
default_url_options [ :host ] = " http://example.com "
assert_equal " http://example.com/other " , url_for ( [ :other , { controller : " foo " , only_path : false } ] )
end
2014-09-23 20:38:23 -04:00
def test_to_form_params_with_hash
assert_equal (
2017-12-02 13:45:10 -05:00
[ { name : " name " , value : " David " } , { name : " nationality " , value : " Danish " } ] ,
2016-08-06 12:50:17 -04:00
to_form_params ( name : " David " , nationality : " Danish " )
2014-09-23 20:38:23 -04:00
)
end
2017-12-02 13:45:10 -05:00
def test_to_form_params_with_hash_having_symbol_and_string_keys
assert_equal (
[ { name : " name " , value : " David " } , { name : " nationality " , value : " Danish " } ] ,
to_form_params ( " name " = > " David " , :nationality = > " Danish " )
)
end
2014-09-23 20:38:23 -04:00
def test_to_form_params_with_nested_hash
assert_equal (
2016-08-06 12:50:17 -04:00
[ { name : " country[name] " , value : " Denmark " } ] ,
to_form_params ( country : { name : " Denmark " } )
2014-09-23 20:38:23 -04:00
)
end
def test_to_form_params_with_array_nested_in_hash
assert_equal (
2016-08-06 12:50:17 -04:00
[ { name : " countries[] " , value : " Denmark " } , { name : " countries[] " , value : " Sweden " } ] ,
to_form_params ( countries : [ " Denmark " , " Sweden " ] )
2014-09-23 20:38:23 -04:00
)
end
def test_to_form_params_with_namespace
assert_equal (
2016-08-06 12:50:17 -04:00
[ { name : " country[name] " , value : " Denmark " } ] ,
2016-08-16 03:30:11 -04:00
to_form_params ( { name : " Denmark " } , " country " )
2014-09-23 20:38:23 -04:00
)
end
2018-12-26 14:10:37 -05:00
def test_button_to_without_protect_against_forgery_method
self . class . undef_method ( :protect_against_forgery? )
assert_dom_equal (
%{ <form method="post" action="http://www.example.com" class="button_to"><input type="submit" value="Hello" /></form> } ,
button_to ( " Hello " , " http://www.example.com " )
)
ensure
self . class . define_method ( :protect_against_forgery? ) { request_forgery }
end
2005-06-16 02:17:51 -04:00
def test_button_to_with_straight_url
2014-04-17 15:15:43 -04:00
assert_dom_equal %{ <form method="post" action="http://www.example.com" class="button_to"><input type="submit" value="Hello" /></form> } , button_to ( " Hello " , " http://www.example.com " )
2005-06-16 02:17:51 -04:00
end
2014-02-02 11:27:18 -05:00
def test_button_to_with_path
assert_dom_equal (
2014-04-17 15:15:43 -04:00
%{ <form method="post" action="/article/Hello" class="button_to"><input type="submit" value="Hello" /></form> } ,
2016-01-20 01:55:06 -05:00
button_to ( " Hello " , article_path ( " Hello " ) )
2014-02-02 11:27:18 -05:00
)
end
2012-01-18 17:30:04 -05:00
def test_button_to_with_straight_url_and_request_forgery
self . request_forgery = true
assert_dom_equal (
2014-04-17 15:15:43 -04:00
%{ <form method="post" action="http://www.example.com" class="button_to"><input type="submit" value="Hello" /><input name="form_token" type="hidden" value="secret" /></form> } ,
2012-01-18 17:30:04 -05:00
button_to ( " Hello " , " http://www.example.com " )
)
ensure
self . request_forgery = false
end
2010-11-19 13:25:21 -05:00
def test_button_to_with_form_class
2016-08-06 12:50:17 -04:00
assert_dom_equal %{ <form method="post" action="http://www.example.com" class="custom-class"><input type="submit" value="Hello" /></form> } , button_to ( " Hello " , " http://www.example.com " , form_class : " custom-class " )
2010-11-19 13:25:21 -05:00
end
2011-02-01 16:17:13 -05:00
def test_button_to_with_form_class_escapes
2016-08-06 12:50:17 -04:00
assert_dom_equal %{ <form method="post" action="http://www.example.com" class="<script>evil_js</script>"><input type="submit" value="Hello" /></form> } , button_to ( " Hello " , " http://www.example.com " , form_class : " <script>evil_js</script> " )
2011-02-01 16:17:13 -05:00
end
2005-10-13 18:44:45 -04:00
def test_button_to_with_query
2014-04-17 15:15:43 -04:00
assert_dom_equal %{ <form method="post" action="http://www.example.com/q1=v1&q2=v2" class="button_to"><input type="submit" value="Hello" /></form> } , button_to ( " Hello " , " http://www.example.com/q1=v1&q2=v2 " )
2005-10-13 18:44:45 -04:00
end
2010-06-29 18:12:48 -04:00
def test_button_to_with_html_safe_URL
2016-01-20 01:55:06 -05:00
assert_dom_equal %{ <form method="post" action="http://www.example.com/q1=v1&q2=v2" class="button_to"><input type="submit" value="Hello" /></form> } , button_to ( " Hello " , raw ( " http://www.example.com/q1=v1&q2=v2 " ) )
2006-10-18 12:42:19 -04:00
end
2005-10-13 18:44:45 -04:00
def test_button_to_with_query_and_no_name
2014-04-17 15:15:43 -04:00
assert_dom_equal %{ <form method="post" action="http://www.example.com?q1=v1&q2=v2" class="button_to"><input type="submit" value="http://www.example.com?q1=v1&q2=v2" /></form> } , button_to ( nil , " http://www.example.com?q1=v1&q2=v2 " )
2005-10-13 18:44:45 -04:00
end
2005-06-16 02:17:51 -04:00
def test_button_to_with_javascript_confirm
2005-09-20 03:54:55 -04:00
assert_dom_equal (
2014-04-17 15:15:43 -04:00
%{ <form method="post" action="http://www.example.com" class="button_to"><input data-confirm="Are you sure?" type="submit" value="Hello" /></form> } ,
2012-10-06 21:00:06 -04:00
button_to ( " Hello " , " http://www.example.com " , data : { confirm : " Are you sure? " } )
2005-06-16 02:17:51 -04:00
)
end
2010-10-11 03:02:53 -04:00
def test_button_to_with_javascript_disable_with
assert_dom_equal (
2014-04-17 15:15:43 -04:00
%{ <form method="post" action="http://www.example.com" class="button_to"><input data-disable-with="Greeting..." type="submit" value="Hello" /></form> } ,
2012-10-06 21:00:06 -04:00
button_to ( " Hello " , " http://www.example.com " , data : { disable_with : " Greeting... " } )
2010-10-11 03:02:53 -04:00
)
end
2011-09-28 13:40:15 -04:00
def test_button_to_with_remote_and_form_options
2012-10-06 21:00:06 -04:00
assert_dom_equal (
2014-04-17 15:15:43 -04:00
%{ <form method="post" action="http://www.example.com" class="custom-class" data-remote="true" data-type="json"><input type="submit" value="Hello" /></form> } ,
2012-10-06 21:00:06 -04:00
button_to ( " Hello " , " http://www.example.com " , remote : true , form : { class : " custom-class " , " data-type " = > " json " } )
)
2011-09-28 13:40:15 -04:00
end
2012-01-14 15:28:09 -05:00
2010-01-31 15:40:40 -05:00
def test_button_to_with_remote_and_javascript_confirm
assert_dom_equal (
2014-04-17 15:15:43 -04:00
%{ <form method="post" action="http://www.example.com" class="button_to" data-remote="true"><input data-confirm="Are you sure?" type="submit" value="Hello" /></form> } ,
2012-10-06 21:00:06 -04:00
button_to ( " Hello " , " http://www.example.com " , remote : true , data : { confirm : " Are you sure? " } )
2010-01-31 15:40:40 -05:00
)
end
2012-07-21 15:19:40 -04:00
def test_button_to_with_remote_and_javascript_disable_with
assert_dom_equal (
2014-04-17 15:15:43 -04:00
%{ <form method="post" action="http://www.example.com" class="button_to" data-remote="true"><input data-disable-with="Greeting..." type="submit" value="Hello" /></form> } ,
2012-10-06 21:00:06 -04:00
button_to ( " Hello " , " http://www.example.com " , remote : true , data : { disable_with : " Greeting... " } )
2012-07-21 15:19:40 -04:00
)
end
2010-04-14 20:44:28 -04:00
def test_button_to_with_remote_false
assert_dom_equal (
2014-04-17 15:15:43 -04:00
%{ <form method="post" action="http://www.example.com" class="button_to"><input type="submit" value="Hello" /></form> } ,
2012-10-06 21:00:06 -04:00
button_to ( " Hello " , " http://www.example.com " , remote : false )
2010-04-14 20:44:28 -04:00
)
end
2005-06-16 02:17:51 -04:00
def test_button_to_enabled_disabled
2005-09-20 03:54:55 -04:00
assert_dom_equal (
2014-04-17 15:15:43 -04:00
%{ <form method="post" action="http://www.example.com" class="button_to"><input type="submit" value="Hello" /></form> } ,
2012-10-06 21:00:06 -04:00
button_to ( " Hello " , " http://www.example.com " , disabled : false )
2005-06-16 02:17:51 -04:00
)
2005-09-20 03:54:55 -04:00
assert_dom_equal (
2014-04-17 15:15:43 -04:00
%{ <form method="post" action="http://www.example.com" class="button_to"><input disabled="disabled" type="submit" value="Hello" /></form> } ,
2012-10-06 21:00:06 -04:00
button_to ( " Hello " , " http://www.example.com " , disabled : true )
2005-06-16 02:17:51 -04:00
)
end
2007-03-13 01:12:59 -04:00
2006-09-03 11:59:18 -04:00
def test_button_to_with_method_delete
assert_dom_equal (
2014-04-17 15:15:43 -04:00
%{ <form method="post" action="http://www.example.com" class="button_to"><input type="hidden" name="_method" value="delete" /><input type="submit" value="Hello" /></form> } ,
2012-10-06 21:00:06 -04:00
button_to ( " Hello " , " http://www.example.com " , method : :delete )
2006-09-03 11:59:18 -04:00
)
end
2007-03-13 01:12:59 -04:00
2006-09-03 11:59:18 -04:00
def test_button_to_with_method_get
assert_dom_equal (
2014-04-17 15:15:43 -04:00
%{ <form method="get" action="http://www.example.com" class="button_to"><input type="submit" value="Hello" /></form> } ,
2012-10-06 21:00:06 -04:00
button_to ( " Hello " , " http://www.example.com " , method : :get )
2006-09-03 11:59:18 -04:00
)
end
2005-06-16 02:17:51 -04:00
2012-05-30 16:15:15 -04:00
def test_button_to_with_block
assert_dom_equal (
2014-04-17 15:15:43 -04:00
%{ <form method="post" action="http://www.example.com" class="button_to"><button type="submit"><span>Hello</span></button></form> } ,
2016-08-06 12:50:17 -04:00
button_to ( " http://www.example.com " ) { content_tag ( :span , " Hello " ) }
2012-05-30 16:15:15 -04:00
)
end
2013-05-05 07:32:00 -04:00
def test_button_to_with_params
assert_dom_equal (
2014-09-23 20:38:23 -04:00
%{ <form action="http://www.example.com" class="button_to" method="post"><input type="submit" value="Hello" /><input type="hidden" name="baz" value="quux" /><input type="hidden" name="foo" value="bar" /></form> } ,
button_to ( " Hello " , " http://www.example.com " , params : { foo : :bar , baz : " quux " } )
)
end
2016-10-17 21:16:54 -04:00
class FakeParams
2016-10-22 00:01:56 -04:00
def initialize ( permitted = true )
@permitted = permitted
end
2016-10-17 21:16:54 -04:00
def permitted?
2016-10-22 00:01:56 -04:00
@permitted
2016-10-17 21:16:54 -04:00
end
def to_h
2017-04-17 18:55:21 -04:00
if permitted?
{ foo : :bar , baz : " quux " }
else
raise ArgumentError
end
2016-10-17 21:16:54 -04:00
end
end
2017-01-03 20:36:24 -05:00
def test_button_to_with_permitted_strong_params
2016-10-17 21:16:54 -04:00
assert_dom_equal (
%{ <form action="http://www.example.com" class="button_to" method="post"><input type="submit" value="Hello" /><input type="hidden" name="baz" value="quux" /><input type="hidden" name="foo" value="bar" /></form> } ,
button_to ( " Hello " , " http://www.example.com " , params : FakeParams . new )
)
end
2017-01-03 20:36:24 -05:00
def test_button_to_with_unpermitted_strong_params
2016-10-22 00:01:56 -04:00
assert_raises ( ArgumentError ) do
button_to ( " Hello " , " http://www.example.com " , params : FakeParams . new ( false ) )
end
end
2014-09-23 20:38:23 -04:00
def test_button_to_with_nested_hash_params
assert_dom_equal (
%{ <form action="http://www.example.com" class="button_to" method="post"><input type="submit" value="Hello" /><input type="hidden" name="foo[bar]" value="baz" /></form> } ,
2016-08-06 12:50:17 -04:00
button_to ( " Hello " , " http://www.example.com " , params : { foo : { bar : " baz " } } )
2014-09-23 20:38:23 -04:00
)
end
def test_button_to_with_nested_array_params
assert_dom_equal (
%{ <form action="http://www.example.com" class="button_to" method="post"><input type="submit" value="Hello" /><input type="hidden" name="foo[]" value="bar" /></form> } ,
2016-08-06 12:50:17 -04:00
button_to ( " Hello " , " http://www.example.com " , params : { foo : [ " bar " ] } )
2013-05-05 07:32:00 -04:00
)
end
2004-11-23 20:04:44 -05:00
def test_link_tag_with_straight_url
2012-10-06 21:00:06 -04:00
assert_dom_equal %{ <a href="http://www.example.com">Hello</a> } , link_to ( " Hello " , " http://www.example.com " )
2004-11-23 20:04:44 -05:00
end
2008-06-20 01:03:27 -04:00
2007-09-22 13:19:26 -04:00
def test_link_tag_without_host_option
2016-08-06 12:50:17 -04:00
assert_dom_equal ( %{ <a href="/">Test Link</a> } , link_to ( " Test Link " , url_hash ) )
2007-09-22 13:19:26 -04:00
end
def test_link_tag_with_host_option
2012-10-06 21:00:06 -04:00
hash = hash_for ( host : " www.example.com " )
expected = %{ <a href="http://www.example.com/">Test Link</a> }
2016-08-06 12:50:17 -04:00
assert_dom_equal ( expected , link_to ( " Test Link " , hash ) )
2007-09-22 13:19:26 -04:00
end
2005-03-06 06:50:41 -05:00
2005-10-13 18:44:45 -04:00
def test_link_tag_with_query
2010-04-03 05:30:06 -04:00
expected = %{ <a href="http://www.example.com?q1=v1&q2=v2">Hello</a> }
2010-06-29 20:41:27 -04:00
assert_dom_equal expected , link_to ( " Hello " , " http://www.example.com?q1=v1&q2=v2 " )
2005-10-13 18:44:45 -04:00
end
def test_link_tag_with_query_and_no_name
2010-04-03 05:30:06 -04:00
expected = %{ <a href="http://www.example.com?q1=v1&q2=v2">http://www.example.com?q1=v1&q2=v2</a> }
2010-06-29 20:41:27 -04:00
assert_dom_equal expected , link_to ( nil , " http://www.example.com?q1=v1&q2=v2 " )
2006-03-18 17:36:52 -05:00
end
2007-10-16 01:06:55 -04:00
def test_link_tag_with_back
2016-08-16 03:30:11 -04:00
env = { " HTTP_REFERER " = > " http://www.example.com/referer " }
2010-04-03 05:30:06 -04:00
@controller = Struct . new ( :request ) . new ( Struct . new ( :env ) . new ( env ) )
expected = %{ <a href=" #{ env [ " HTTP_REFERER " ] } ">go back</a> }
2016-08-06 12:50:17 -04:00
assert_dom_equal expected , link_to ( " go back " , :back )
2007-10-16 01:06:55 -04:00
end
def test_link_tag_with_back_and_no_referer
2010-04-03 05:30:06 -04:00
@controller = Struct . new ( :request ) . new ( Struct . new ( :env ) . new ( { } ) )
2016-08-06 12:50:17 -04:00
link = link_to ( " go back " , :back )
2010-04-03 05:30:06 -04:00
assert_dom_equal %{ <a href="javascript:history.back()">go back</a> } , link
2007-10-07 23:30:29 -04:00
end
2006-03-18 17:36:52 -05:00
def test_link_tag_with_img
2016-01-20 01:55:06 -05:00
link = link_to ( raw ( " <img src='/favicon.jpg' /> " ) , " / " )
2010-04-03 05:30:06 -04:00
expected = %{ <a href="/"><img src='/favicon.jpg' /></a> }
assert_dom_equal expected , link
2006-03-18 17:36:52 -05:00
end
def test_link_with_nil_html_options
2010-04-03 05:30:06 -04:00
link = link_to ( " Hello " , url_hash , nil )
assert_dom_equal %{ <a href="/">Hello</a> } , link
2005-10-13 18:44:45 -04:00
end
2005-09-08 13:54:16 -04:00
def test_link_tag_with_custom_onclick
2012-10-06 21:00:06 -04:00
link = link_to ( " Hello " , " http://www.example.com " , onclick : " alert('yay!') " )
2012-09-03 05:42:24 -04:00
expected = %{ <a href="http://www.example.com" onclick="alert(& # 39;yay!& # 39;)">Hello</a> }
2010-04-03 05:30:06 -04:00
assert_dom_equal expected , link
2005-09-08 13:54:16 -04:00
end
2007-03-13 01:12:59 -04:00
2004-11-23 20:04:44 -05:00
def test_link_tag_with_javascript_confirm
2005-09-20 03:54:55 -04:00
assert_dom_equal (
2012-10-06 21:00:06 -04:00
%{ <a href="http://www.example.com" data-confirm="Are you sure?">Hello</a> } ,
link_to ( " Hello " , " http://www.example.com " , data : { confirm : " Are you sure? " } )
2004-11-23 20:04:44 -05:00
)
2005-09-20 03:54:55 -04:00
assert_dom_equal (
2012-10-06 21:00:06 -04:00
%{ <a href="http://www.example.com" data-confirm="You cant possibly be sure, can you?">Hello</a> } ,
link_to ( " Hello " , " http://www.example.com " , data : { confirm : " You cant possibly be sure, can you? " } )
2005-03-06 07:07:13 -05:00
)
2005-09-20 03:54:55 -04:00
assert_dom_equal (
2012-10-06 21:00:06 -04:00
%{ <a href="http://www.example.com" data-confirm="You cant possibly be sure, \n can you?">Hello</a> } ,
link_to ( " Hello " , " http://www.example.com " , data : { confirm : " You cant possibly be sure, \n can you? " } )
2005-08-14 04:43:07 -04:00
)
2004-11-23 20:04:44 -05:00
end
2005-03-06 06:50:41 -05:00
2010-01-30 20:44:35 -05:00
def test_link_to_with_remote
assert_dom_equal (
2012-10-06 21:00:06 -04:00
%{ <a href="http://www.example.com" data-remote="true">Hello</a> } ,
link_to ( " Hello " , " http://www.example.com " , remote : true )
2010-01-30 20:44:35 -05:00
)
end
2010-04-14 20:44:28 -04:00
def test_link_to_with_remote_false
assert_dom_equal (
2012-10-06 21:00:06 -04:00
%{ <a href="http://www.example.com">Hello</a> } ,
link_to ( " Hello " , " http://www.example.com " , remote : false )
2010-04-14 20:44:28 -04:00
)
end
2010-01-30 20:44:35 -05:00
2012-10-06 16:58:27 -04:00
def test_link_to_with_symbolic_remote_in_non_html_options
assert_dom_equal (
2012-10-06 21:00:06 -04:00
%{ <a href="/" data-remote="true">Hello</a> } ,
link_to ( " Hello " , hash_for ( remote : true ) , { } )
2012-10-06 16:58:27 -04:00
)
end
def test_link_to_with_string_remote_in_non_html_options
assert_dom_equal (
2012-10-06 21:00:06 -04:00
%{ <a href="/" data-remote="true">Hello</a> } ,
2016-08-06 12:50:17 -04:00
link_to ( " Hello " , hash_for ( " remote " = > true ) , { } )
2012-10-06 16:58:27 -04:00
)
end
2005-09-07 08:56:33 -04:00
def test_link_tag_using_post_javascript
2005-09-20 03:54:55 -04:00
assert_dom_equal (
2012-10-06 21:00:06 -04:00
%{ <a href="http://www.example.com" data-method="post" rel="nofollow">Hello</a> } ,
link_to ( " Hello " , " http://www.example.com " , method : :post )
2005-09-07 08:56:33 -04:00
)
end
2006-05-27 20:33:53 -04:00
def test_link_tag_using_delete_javascript
assert_dom_equal (
2012-10-06 21:00:06 -04:00
%{ <a href="http://www.example.com" rel="nofollow" data-method="delete">Destroy</a> } ,
link_to ( " Destroy " , " http://www.example.com " , method : :delete )
2006-05-27 20:33:53 -04:00
)
end
2007-03-13 01:12:59 -04:00
2007-06-23 13:11:01 -04:00
def test_link_tag_using_delete_javascript_and_href
assert_dom_equal (
2012-10-06 21:00:06 -04:00
%{ <a href=" \# " rel="nofollow" data-method="delete">Destroy</a> } ,
2016-08-06 12:50:17 -04:00
link_to ( " Destroy " , " http://www.example.com " , method : :delete , href : " # " )
2007-06-23 13:11:01 -04:00
)
end
2011-06-21 10:49:10 -04:00
def test_link_tag_using_post_javascript_and_rel
assert_dom_equal (
2012-10-06 21:00:06 -04:00
%{ <a href="http://www.example.com" data-method="post" rel="example nofollow">Hello</a> } ,
2016-08-06 12:50:17 -04:00
link_to ( " Hello " , " http://www.example.com " , method : :post , rel : " example " )
2011-06-21 10:49:10 -04:00
)
end
2005-09-07 08:56:33 -04:00
def test_link_tag_using_post_javascript_and_confirm
2005-09-20 03:54:55 -04:00
assert_dom_equal (
2012-10-06 21:00:06 -04:00
%{ <a href="http://www.example.com" data-method="post" rel="nofollow" data-confirm="Are you serious?">Hello</a> } ,
link_to ( " Hello " , " http://www.example.com " , method : :post , data : { confirm : " Are you serious? " } )
2007-03-13 01:12:59 -04:00
)
2005-09-07 08:56:33 -04:00
end
2007-03-13 01:12:59 -04:00
2009-03-16 11:20:15 -04:00
def test_link_tag_using_delete_javascript_and_href_and_confirm
assert_dom_equal (
2012-10-06 21:00:06 -04:00
%{ <a href=" \# " rel="nofollow" data-confirm="Are you serious?" data-method="delete">Destroy</a> } ,
2016-08-06 12:50:17 -04:00
link_to ( " Destroy " , " http://www.example.com " , method : :delete , href : " # " , data : { confirm : " Are you serious? " } )
2009-03-16 11:20:15 -04:00
)
end
2012-05-31 08:18:14 -04:00
def test_link_tag_with_block
2012-10-06 21:00:06 -04:00
assert_dom_equal %{ <a href="/"><span>Example site</span></a> } ,
2016-08-06 12:50:17 -04:00
link_to ( " / " ) { content_tag ( :span , " Example site " ) }
2012-05-31 08:18:14 -04:00
end
def test_link_tag_with_block_and_html_options
2012-10-06 21:00:06 -04:00
assert_dom_equal %{ <a class="special" href="/"><span>Example site</span></a> } ,
2016-08-06 12:50:17 -04:00
link_to ( " / " , class : " special " ) { content_tag ( :span , " Example site " ) }
2012-05-31 08:18:14 -04:00
end
2013-07-07 10:14:34 -04:00
def test_link_tag_using_block_and_hash
assert_dom_equal (
%{ <a href="/"><span>Example site</span></a> } ,
2016-08-06 12:50:17 -04:00
link_to ( url_hash ) { content_tag ( :span , " Example site " ) }
2013-07-07 10:14:34 -04:00
)
end
2008-06-20 01:03:27 -04:00
def test_link_tag_using_block_in_erb
2010-04-03 05:30:06 -04:00
out = render_erb %{ <%= link_to('/') do %>Example site<% end %> }
assert_equal '<a href="/">Example site</a>' , out
2008-06-17 15:01:37 -04:00
end
2008-06-20 01:03:27 -04:00
2011-06-12 10:03:24 -04:00
def test_link_tag_with_html_safe_string
assert_dom_equal (
2012-10-06 21:00:06 -04:00
%{ <a href="/article/Gerd_M%C3%BCller">Gerd Müller</a> } ,
2016-01-20 01:55:06 -05:00
link_to ( " Gerd Müller " , article_path ( " Gerd_Müller " ) )
2011-06-12 10:03:24 -04:00
)
end
2012-05-31 08:18:14 -04:00
def test_link_tag_escapes_content
2012-10-06 21:00:06 -04:00
assert_dom_equal %{ <a href="/">Malicious <script>content</script></a> } ,
2012-05-31 08:18:14 -04:00
link_to ( " Malicious <script>content</script> " , " / " )
end
def test_link_tag_does_not_escape_html_safe_content
2012-10-06 21:00:06 -04:00
assert_dom_equal %{ <a href="/">Malicious <script>content</script></a> } ,
2016-01-20 01:55:06 -05:00
link_to ( raw ( " Malicious <script>content</script> " ) , " / " )
2012-05-31 08:18:14 -04:00
end
2005-03-06 09:06:33 -05:00
def test_link_to_unless
2010-04-03 05:30:06 -04:00
assert_equal " Showing " , link_to_unless ( true , " Showing " , url_hash )
assert_dom_equal %{ <a href="/">Listing</a> } ,
link_to_unless ( false , " Listing " , url_hash )
assert_equal " <strong>Showing</strong> " ,
link_to_unless ( true , " Showing " , url_hash ) { | name |
2016-01-20 01:55:06 -05:00
raw " <strong> #{ name } </strong> "
2010-04-03 05:30:06 -04:00
}
assert_equal " test " ,
link_to_unless ( true , " Showing " , url_hash ) {
" test "
}
2013-06-16 22:12:28 -04:00
assert_equal %{ <b>Showing</b> } , link_to_unless ( true , " <b>Showing</b> " , url_hash )
assert_equal %{ <a href="/"><b>Showing</b></a> } , link_to_unless ( false , " <b>Showing</b> " , url_hash )
2016-01-20 01:55:06 -05:00
assert_equal %{ <b>Showing</b> } , link_to_unless ( true , raw ( " <b>Showing</b> " ) , url_hash )
assert_equal %{ <a href="/"><b>Showing</b></a> } , link_to_unless ( false , raw ( " <b>Showing</b> " ) , url_hash )
2005-03-06 09:06:33 -05:00
end
2007-03-13 01:12:59 -04:00
2005-03-06 09:06:33 -05:00
def test_link_to_if
2010-04-03 05:30:06 -04:00
assert_equal " Showing " , link_to_if ( false , " Showing " , url_hash )
assert_dom_equal %{ <a href="/">Listing</a> } , link_to_if ( true , " Listing " , url_hash )
end
2015-05-01 05:10:31 -04:00
def test_link_to_if_with_block
assert_equal " Fallback " , link_to_if ( false , " Showing " , url_hash ) { " Fallback " }
assert_dom_equal %{ <a href="/">Listing</a> } , link_to_if ( true , " Listing " , url_hash ) { " Fallback " }
end
2011-09-02 10:20:10 -04:00
def request_for_url ( url , opts = { } )
env = Rack :: MockRequest . env_for ( " http://www.example.com #{ url } " , opts )
2010-04-03 05:30:06 -04:00
ActionDispatch :: Request . new ( env )
2005-03-06 09:06:33 -05:00
end
2013-01-28 15:18:57 -05:00
def test_current_page_with_http_head_method
2016-08-06 13:36:34 -04:00
@request = request_for_url ( " / " , method : :head )
2013-01-28 15:18:57 -05:00
assert current_page? ( url_hash )
assert current_page? ( " http://www.example.com/ " )
end
2009-02-05 14:37:57 -05:00
def test_current_page_with_simple_url
2010-04-03 05:30:06 -04:00
@request = request_for_url ( " / " )
assert current_page? ( url_hash )
assert current_page? ( " http://www.example.com/ " )
2009-02-05 14:37:57 -05:00
end
2009-10-19 23:40:28 -04:00
2009-02-05 14:37:57 -05:00
def test_current_page_ignoring_params
2010-04-03 05:30:06 -04:00
@request = request_for_url ( " /?order=desc&page=1 " )
assert current_page? ( url_hash )
assert current_page? ( " http://www.example.com/ " )
2009-02-05 14:37:57 -05:00
end
2009-10-19 23:40:28 -04:00
2017-01-02 11:26:05 -05:00
def test_current_page_considering_params
@request = request_for_url ( " /?order=desc&page=1 " )
2018-04-17 18:21:34 -04:00
assert_not current_page? ( url_hash , check_parameters : true )
assert_not current_page? ( url_hash . merge ( check_parameters : true ) )
assert_not current_page? ( ActionController :: Parameters . new ( url_hash . merge ( check_parameters : true ) ) . permit! )
assert_not current_page? ( " http://www.example.com/ " , check_parameters : true )
2017-01-02 11:26:05 -05:00
end
2017-04-23 22:20:55 -04:00
def test_current_page_considering_params_when_options_does_not_respond_to_to_hash
@request = request_for_url ( " /?order=desc&page=1 " )
2018-04-17 18:21:34 -04:00
assert_not current_page? ( :back , check_parameters : false )
2017-04-23 22:20:55 -04:00
end
2009-02-05 14:37:57 -05:00
def test_current_page_with_params_that_match
2010-04-03 05:30:06 -04:00
@request = request_for_url ( " /?order=desc&page=1 " )
2012-10-06 21:00:06 -04:00
assert current_page? ( hash_for ( order : " desc " , page : " 1 " ) )
2010-06-29 13:55:57 -04:00
assert current_page? ( " http://www.example.com/?order=desc&page=1 " )
2009-02-05 14:37:57 -05:00
end
2009-10-19 23:40:28 -04:00
2017-06-19 18:01:20 -04:00
def test_current_page_with_scope_that_match
@request = request_for_url ( " /engine/ " )
2011-09-02 10:20:10 -04:00
2017-06-19 18:01:20 -04:00
assert current_page? ( " /engine " )
2011-09-02 10:20:10 -04:00
end
2013-08-01 09:43:45 -04:00
def test_current_page_with_escaped_params
@request = request_for_url ( " /category/administra%c3%a7%c3%a3o " )
2019-09-05 02:46:58 -04:00
assert current_page? ( { controller : " foo " , action : " category " , category : " administração " } )
2013-08-01 09:43:45 -04:00
end
2013-08-01 16:59:25 -04:00
def test_current_page_with_escaped_params_with_different_encoding
@request = request_for_url ( " / " )
2018-05-17 04:32:27 -04:00
@request . stub ( :path , ( + " /category/administra%c3%a7%c3%a3o " ) . force_encoding ( Encoding :: ASCII_8BIT ) ) do
2019-09-05 02:46:58 -04:00
assert current_page? ( { controller : " foo " , action : " category " , category : " administração " } )
2013-08-01 16:59:25 -04:00
assert current_page? ( " http://www.example.com/category/administra%c3%a7%c3%a3o " )
end
end
2013-08-01 09:43:45 -04:00
def test_current_page_with_double_escaped_params
@request = request_for_url ( " /category/administra%c3%a7%c3%a3o?callback_url=http%3a%2f%2fexample.com%2ffoo " )
2019-09-05 02:46:58 -04:00
assert current_page? ( { controller : " foo " , action : " category " , category : " administração " , callback_url : " http://example.com/foo " } )
2013-08-01 09:43:45 -04:00
end
2016-06-24 23:29:39 -04:00
def test_current_page_with_trailing_slash
@request = request_for_url ( " /posts " )
assert current_page? ( " /posts/ " )
end
2017-06-19 18:01:20 -04:00
def test_current_page_with_not_get_verb
@request = request_for_url ( " /events " , method : :post )
2018-04-17 18:21:34 -04:00
assert_not current_page? ( " /events " )
2017-06-19 18:01:20 -04:00
end
2006-10-22 19:54:41 -04:00
def test_link_unless_current
2010-04-03 05:30:06 -04:00
@request = request_for_url ( " / " )
assert_equal " Showing " ,
link_to_unless_current ( " Showing " , url_hash )
assert_equal " Showing " ,
link_to_unless_current ( " Showing " , " http://www.example.com/ " )
@request = request_for_url ( " /?order=desc " )
assert_equal " Showing " ,
link_to_unless_current ( " Showing " , url_hash )
assert_equal " Showing " ,
link_to_unless_current ( " Showing " , " http://www.example.com/ " )
@request = request_for_url ( " /?order=desc&page=1 " )
assert_equal " Showing " ,
2016-08-06 12:50:17 -04:00
link_to_unless_current ( " Showing " , hash_for ( order : " desc " , page : " 1 " ) )
2010-04-03 05:30:06 -04:00
assert_equal " Showing " ,
link_to_unless_current ( " Showing " , " http://www.example.com/?order=desc&page=1 " )
@request = request_for_url ( " /?order=desc " )
assert_equal %{ <a href="/?order=asc">Showing</a> } ,
2012-10-06 21:00:06 -04:00
link_to_unless_current ( " Showing " , hash_for ( order : :asc ) )
2010-04-03 05:30:06 -04:00
assert_equal %{ <a href="http://www.example.com/?order=asc">Showing</a> } ,
link_to_unless_current ( " Showing " , " http://www.example.com/?order=asc " )
@request = request_for_url ( " /?order=desc " )
2010-06-27 04:16:46 -04:00
assert_equal %{ <a href="/?order=desc&page=2 \" >Showing</a> } ,
2012-10-06 21:00:06 -04:00
link_to_unless_current ( " Showing " , hash_for ( order : " desc " , page : 2 ) )
2010-04-03 05:30:06 -04:00
assert_equal %{ <a href="http://www.example.com/?order=desc&page=2">Showing</a> } ,
link_to_unless_current ( " Showing " , " http://www.example.com/?order=desc&page=2 " )
@request = request_for_url ( " /show " )
assert_equal %{ <a href="/">Listing</a> } ,
link_to_unless_current ( " Listing " , url_hash )
assert_equal %{ <a href="http://www.example.com/">Listing</a> } ,
link_to_unless_current ( " Listing " , " http://www.example.com/ " )
2004-11-23 20:04:44 -05:00
end
2007-01-12 02:02:38 -05:00
2015-05-01 05:10:31 -04:00
def test_link_to_unless_with_block
2015-05-05 03:21:55 -04:00
assert_dom_equal %{ <a href="/">Showing</a> } , link_to_unless ( false , " Showing " , url_hash ) { " Fallback " }
assert_equal " Fallback " , link_to_unless ( true , " Listing " , url_hash ) { " Fallback " }
2015-05-01 05:10:31 -04:00
end
2004-11-23 20:04:44 -05:00
def test_mail_to
2012-10-06 21:00:06 -04:00
assert_dom_equal %{ <a href="mailto:david@loudthinking.com">david@loudthinking.com</a> } , mail_to ( " david@loudthinking.com " )
assert_dom_equal %{ <a href="mailto:david@loudthinking.com">David Heinemeier Hansson</a> } , mail_to ( " david@loudthinking.com " , " David Heinemeier Hansson " )
2005-09-20 03:54:55 -04:00
assert_dom_equal (
2012-10-06 21:00:06 -04:00
%{ <a class="admin" href="mailto:david@loudthinking.com">David Heinemeier Hansson</a> } ,
2004-11-23 20:04:44 -05:00
mail_to ( " david@loudthinking.com " , " David Heinemeier Hansson " , " class " = > " admin " )
)
2005-03-06 06:50:41 -05:00
assert_equal mail_to ( " david@loudthinking.com " , " David Heinemeier Hansson " , " class " = > " admin " ) ,
2012-10-06 21:00:06 -04:00
mail_to ( " david@loudthinking.com " , " David Heinemeier Hansson " , class : " admin " )
2004-11-23 20:04:44 -05:00
end
2005-03-06 06:50:41 -05:00
2015-07-23 16:36:13 -04:00
def test_mail_to_with_special_characters
assert_dom_equal (
2017-05-19 07:19:46 -04:00
%{ <a href="mailto:%23%21%24%25%26%27%2A%2B-%2F%3D%3F%5E_%60%7B%7D%7C@example.org"> # !$%&& # 39;*+-/=?^_` { } |@example.org</a> } ,
mail_to ( " # !$%&'*+-/=?^_`{}|@example.org " )
2015-07-23 16:36:13 -04:00
)
end
2019-07-26 17:25:23 -04:00
def test_mail_to_with_options
2005-09-20 03:54:55 -04:00
assert_dom_equal (
2014-12-20 18:50:09 -05:00
%{ <a href="mailto:me@example.com?cc=ccaddress%40example.com&bcc=bccaddress%40example.com&body=This%20is%20the%20body%20of%20the%20message.&subject=This%20is%20an%20example%20email&reply-to=foo%40bar.com">My email</a> } ,
mail_to ( " me@example.com " , " My email " , cc : " ccaddress@example.com " , bcc : " bccaddress@example.com " , subject : " This is an example email " , body : " This is the body of the message. " , reply_to : " foo@bar.com " )
2005-04-02 03:16:57 -05:00
)
2014-09-12 15:27:53 -04:00
assert_dom_equal (
%{ <a href="mailto:me@example.com?body=This%20is%20the%20body%20of%20the%20message.&subject=This%20is%20an%20example%20email">My email</a> } ,
2016-08-06 12:50:17 -04:00
mail_to ( " me@example.com " , " My email " , cc : " " , bcc : " " , subject : " This is an example email " , body : " This is the body of the message. " )
2014-09-12 15:27:53 -04:00
)
2005-04-02 03:16:57 -05:00
end
2007-03-13 01:12:59 -04:00
2006-03-19 12:03:02 -05:00
def test_mail_to_with_img
2012-10-06 21:00:06 -04:00
assert_dom_equal %{ <a href="mailto:feedback@example.com"><img src="/feedback.png" /></a> } ,
2016-08-06 12:50:17 -04:00
mail_to ( " feedback@example.com " , raw ( '<img src="/feedback.png" />' ) )
2006-03-19 12:03:02 -05:00
end
2005-03-09 08:53:47 -05:00
2015-11-03 14:43:30 -05:00
def test_mail_to_with_html_safe_string
assert_dom_equal (
%{ <a href="mailto:david@loudthinking.com">david@loudthinking.com</a> } ,
2016-01-20 01:55:06 -05:00
mail_to ( raw ( " david@loudthinking.com " ) )
2015-11-03 14:43:30 -05:00
)
end
def test_mail_to_with_nil
assert_dom_equal (
%{ <a href="mailto:"></a> } ,
mail_to ( nil )
)
end
2011-07-12 19:41:46 -04:00
def test_mail_to_returns_html_safe_string
2018-01-25 18:14:09 -05:00
assert_predicate mail_to ( " david@loudthinking.com " ) , :html_safe?
2011-07-12 19:41:46 -04:00
end
2013-04-03 00:12:48 -04:00
def test_mail_to_with_block
assert_dom_equal %{ <a href="mailto:me@example.com"><span>Email me</span></a> } ,
2016-08-06 12:50:17 -04:00
mail_to ( " me@example.com " ) { content_tag ( :span , " Email me " ) }
2013-04-03 00:12:48 -04:00
end
2013-04-04 20:25:44 -04:00
def test_mail_to_with_block_and_options
2013-04-03 00:12:48 -04:00
assert_dom_equal %{ <a class="special" href="mailto:me@example.com?cc=ccaddress%40example.com"><span>Email me</span></a> } ,
2016-08-06 12:50:17 -04:00
mail_to ( " me@example.com " , cc : " ccaddress@example.com " , class : " special " ) { content_tag ( :span , " Email me " ) }
2013-04-03 00:12:48 -04:00
end
2013-04-04 20:25:44 -04:00
def test_mail_to_does_not_modify_html_options_hash
2016-08-06 12:50:17 -04:00
options = { class : " special " }
mail_to " me@example.com " , " ME! " , options
assert_equal ( { class : " special " } , options )
2013-04-04 20:25:44 -04:00
end
2019-06-18 13:10:16 -04:00
def test_sms_to
assert_dom_equal %{ <a href="sms:15155555785;">15155555785</a> } , sms_to ( " 15155555785 " )
assert_dom_equal %{ <a href="sms:15155555785;">Jim Jones</a> } , sms_to ( " 15155555785 " , " Jim Jones " )
assert_dom_equal (
%{ <a class="admin" href="sms:15155555785;">Jim Jones</a> } ,
sms_to ( " 15155555785 " , " Jim Jones " , " class " = > " admin " )
)
assert_equal sms_to ( " 15155555785 " , " Jim Jones " , " class " = > " admin " ) ,
sms_to ( " 15155555785 " , " Jim Jones " , class : " admin " )
end
def test_sms_to_with_options
assert_dom_equal (
%{ <a class="simple-class" href="sms:15155555785;?&body=Hello%20from%20Jim">Text me</a> } ,
sms_to ( " 15155555785 " , " Text me " , class : " simple-class " , body : " Hello from Jim " )
)
assert_dom_equal (
%{ <a href="sms:15155555785;?&body=This%20is%20the%20body%20of%20the%20message.">Text me</a> } ,
sms_to ( " 15155555785 " , " Text me " , body : " This is the body of the message. " )
)
end
2019-07-26 15:11:28 -04:00
def test_sms_to_with_img
2019-06-18 13:10:16 -04:00
assert_dom_equal %{ <a href="sms:15155555785;"><img src="/feedback.png" /></a> } ,
sms_to ( " 15155555785 " , raw ( '<img src="/feedback.png" />' ) )
end
2019-07-26 15:11:28 -04:00
def test_sms_to_with_html_safe_string
2019-06-18 13:10:16 -04:00
assert_dom_equal (
%{ <a href="sms:1%2B5155555785;">1+5155555785</a> } ,
sms_to ( raw ( " 1+5155555785 " ) )
)
end
2019-07-26 15:11:28 -04:00
def test_sms_to_with_nil
2019-06-18 13:10:16 -04:00
assert_dom_equal (
%{ <a href="sms:;"></a> } ,
sms_to ( nil )
)
end
2019-07-26 15:11:28 -04:00
def test_sms_to_returns_html_safe_string
2019-06-18 13:10:16 -04:00
assert_predicate sms_to ( " 15155555785 " ) , :html_safe?
end
2019-07-26 15:11:28 -04:00
def test_sms_to_with_block
2019-06-18 13:10:16 -04:00
assert_dom_equal %{ <a href="sms:15155555785;"><span>Text me</span></a> } ,
sms_to ( " 15155555785 " ) { content_tag ( :span , " Text me " ) }
end
2019-07-26 15:11:28 -04:00
def test_sms_to_with_block_and_options
2019-06-18 13:10:16 -04:00
assert_dom_equal %{ <a class="special" href="sms:15155555785;?&body=Hello%20from%20Jim"><span>Text me</span></a> } ,
sms_to ( " 15155555785 " , body : " Hello from Jim " , class : " special " ) { content_tag ( :span , " Text me " ) }
end
2019-07-26 15:11:28 -04:00
def test_sms_to_does_not_modify_html_options_hash
2019-06-18 13:10:16 -04:00
options = { class : " special " }
sms_to " 15155555785 " , " ME! " , options
assert_equal ( { class : " special " } , options )
end
2019-07-26 14:54:57 -04:00
def test_phone_to
assert_dom_equal %{ <a href="tel:1234567890">1234567890</a> } ,
phone_to ( " 1234567890 " )
assert_dom_equal %{ <a href="tel:1234567890">Bob</a> } ,
phone_to ( " 1234567890 " , " Bob " )
assert_dom_equal (
%{ <a class="phoner" href="tel:1234567890">Bob</a> } ,
phone_to ( " 1234567890 " , " Bob " , " class " = > " phoner " )
)
assert_equal phone_to ( " 1234567890 " , " Bob " , " class " = > " admin " ) ,
phone_to ( " 1234567890 " , " Bob " , class : " admin " )
end
def test_phone_to_with_options
assert_dom_equal (
%{ <a class="example-class" href="tel:+011234567890">Phone</a> } ,
phone_to ( " 1234567890 " , " Phone " , class : " example-class " , country_code : " 01 " )
)
assert_dom_equal (
%{ <a href="tel:+011234567890">Phone</a> } ,
phone_to ( " 1234567890 " , " Phone " , country_code : " 01 " )
)
end
2019-07-26 17:25:23 -04:00
def test_phone_to_with_img
2019-07-26 14:54:57 -04:00
assert_dom_equal %{ <a href="tel:1234567890"><img src="/feedback.png" /></a> } ,
phone_to ( " 1234567890 " , raw ( '<img src="/feedback.png" />' ) )
end
2019-07-26 17:25:23 -04:00
def test_phone_to_with_html_safe_string
2019-07-26 14:54:57 -04:00
assert_dom_equal (
%{ <a href="tel:1%2B234567890">1+234567890</a> } ,
phone_to ( raw ( " 1+234567890 " ) )
)
end
2019-07-26 17:25:23 -04:00
def test_phone_to_with_nil
2019-07-26 14:54:57 -04:00
assert_dom_equal (
%{ <a href="tel:"></a> } ,
phone_to ( nil )
)
end
2019-07-26 17:25:23 -04:00
def test_phone_to_returns_html_safe_string
2019-07-26 14:54:57 -04:00
assert_predicate phone_to ( " 1234567890 " ) , :html_safe?
end
2019-07-26 17:25:23 -04:00
def test_phone_to_with_block
2019-07-26 14:54:57 -04:00
assert_dom_equal %{ <a href="tel:1234567890"><span>Phone</span></a> } ,
phone_to ( " 1234567890 " ) { content_tag ( :span , " Phone " ) }
end
2019-07-26 17:25:23 -04:00
def test_phone_to_with_block_and_options
2019-07-26 14:54:57 -04:00
assert_dom_equal %{ <a class="special" href="tel:+011234567890"><span>Phone</span></a> } ,
phone_to ( " 1234567890 " , country_code : " 01 " , class : " special " ) { content_tag ( :span , " Phone " ) }
end
2019-07-26 17:25:23 -04:00
def test_phone_to_does_not_modify_html_options_hash
2019-07-26 14:54:57 -04:00
options = { class : " special " }
phone_to " 1234567890 " , " ME! " , options
assert_equal ( { class : " special " } , options )
end
2007-09-28 11:55:45 -04:00
def protect_against_forgery?
2016-08-07 19:05:28 -04:00
request_forgery
2012-01-18 17:30:04 -05:00
end
2019-09-14 02:54:22 -04:00
def form_authenticity_token ( ** )
2012-01-18 17:30:04 -05:00
" secret "
end
def request_forgery_protection_token
" form_token "
2007-09-22 22:32:55 -04:00
end
2004-12-22 17:50:44 -05:00
end
2006-10-20 14:00:20 -04:00
2009-11-23 22:50:21 -05:00
class UrlHelperControllerTest < ActionController :: TestCase
class UrlHelperController < ActionController :: Base
2018-09-24 17:49:26 -04:00
ROUTES = test_routes do
2016-08-06 12:50:17 -04:00
get " url_helper_controller_test/url_helper/show/:id " ,
to : " url_helper_controller_test/url_helper # show " ,
2012-10-06 21:00:06 -04:00
as : :show
2010-07-03 03:14:17 -04:00
2016-08-06 12:50:17 -04:00
get " url_helper_controller_test/url_helper/profile/:name " ,
to : " url_helper_controller_test/url_helper # show " ,
2012-10-06 21:00:06 -04:00
as : :profile
2010-07-03 03:14:17 -04:00
2016-08-06 12:50:17 -04:00
get " url_helper_controller_test/url_helper/show_named_route " ,
to : " url_helper_controller_test/url_helper # show_named_route " ,
2012-10-06 21:00:06 -04:00
as : :show_named_route
2010-04-03 05:30:06 -04:00
2016-03-12 18:59:31 -05:00
ActiveSupport :: Deprecation . silence do
get " /:controller(/:action(/:id)) "
end
2010-06-27 03:03:39 -04:00
2016-08-06 12:50:17 -04:00
get " url_helper_controller_test/url_helper/normalize_recall_params " ,
2012-10-06 21:00:06 -04:00
to : UrlHelperController . action ( :normalize_recall ) ,
as : :normalize_recall_params
2010-10-26 09:27:18 -04:00
2016-08-06 12:50:17 -04:00
get " /url_helper_controller_test/url_helper/override_url_helper/default " ,
to : " url_helper_controller_test/url_helper # override_url_helper " ,
2012-10-06 21:00:06 -04:00
as : :override_url_helper
2010-04-03 05:30:06 -04:00
end
2010-07-03 03:14:17 -04:00
def show
if params [ :name ]
2016-08-06 12:50:17 -04:00
render inline : " ok "
2010-07-03 03:14:17 -04:00
else
redirect_to profile_path ( params [ :id ] )
end
end
2009-11-23 22:50:21 -05:00
def show_url_for
2012-10-06 21:00:06 -04:00
render inline : " <%= url_for controller: 'url_helper_controller_test/url_helper', action: 'show_url_for' %> "
2009-11-23 22:50:21 -05:00
end
2007-03-13 01:12:59 -04:00
2009-11-23 22:50:21 -05:00
def show_named_route
2012-10-06 21:00:06 -04:00
render inline : " <%= show_named_route_ #{ params [ :kind ] } %> "
2009-11-23 22:50:21 -05:00
end
2006-10-20 14:00:20 -04:00
2009-11-23 22:50:21 -05:00
def nil_url_for
2016-08-06 12:50:17 -04:00
render inline : " <%= url_for(nil) %> "
2009-11-23 22:50:21 -05:00
end
2008-06-23 08:51:38 -04:00
2010-06-27 03:03:39 -04:00
def normalize_recall_params
2016-08-06 12:50:17 -04:00
render inline : " <%= normalize_recall_params_path %> "
2010-06-27 03:03:39 -04:00
end
def recall_params_not_changed
2016-08-06 12:50:17 -04:00
render inline : " <%= url_for(action: :show_url_for) %> "
2010-06-27 03:03:39 -04:00
end
2010-10-26 09:27:18 -04:00
def override_url_helper
2016-08-06 12:50:17 -04:00
render inline : " <%= override_url_helper_path %> "
2010-10-26 09:27:18 -04:00
end
def override_url_helper_path
2016-08-06 12:50:17 -04:00
" /url_helper_controller_test/url_helper/override_url_helper/override "
2010-10-26 09:27:18 -04:00
end
helper_method :override_url_helper_path
2006-10-20 14:00:20 -04:00
end
2018-09-24 17:49:26 -04:00
def setup
super
@routes = UrlHelperController :: ROUTES
end
2009-11-23 22:50:21 -05:00
tests UrlHelperController
2007-03-13 01:12:59 -04:00
2006-10-20 14:00:20 -04:00
def test_url_for_shows_only_path
get :show_url_for
2016-08-06 12:50:17 -04:00
assert_equal " /url_helper_controller_test/url_helper/show_url_for " , @response . body
2006-10-20 14:00:20 -04:00
end
2007-03-13 01:12:59 -04:00
2008-06-23 08:51:38 -04:00
def test_named_route_url_shows_host_and_path
2016-08-06 12:50:17 -04:00
get :show_named_route , params : { kind : " url " }
assert_equal " http://test.host/url_helper_controller_test/url_helper/show_named_route " ,
2010-04-03 05:30:06 -04:00
@response . body
2006-10-20 14:00:20 -04:00
end
2007-03-13 01:12:59 -04:00
2006-10-20 14:00:20 -04:00
def test_named_route_path_shows_only_path
2016-08-06 12:50:17 -04:00
get :show_named_route , params : { kind : " path " }
assert_equal " /url_helper_controller_test/url_helper/show_named_route " , @response . body
2006-10-20 14:00:20 -04:00
end
2007-03-13 01:12:59 -04:00
2008-06-23 08:51:38 -04:00
def test_url_for_nil_returns_current_path
get :nil_url_for
2016-08-06 12:50:17 -04:00
assert_equal " /url_helper_controller_test/url_helper/nil_url_for " , @response . body
2008-06-23 08:51:38 -04:00
end
2008-11-01 13:50:16 -04:00
def test_named_route_should_show_host_and_path_using_controller_default_url_options
class << @controller
2012-04-08 22:42:02 -04:00
def default_url_options
2016-08-06 12:50:17 -04:00
{ host : " testtwo.host " }
2008-11-01 13:50:16 -04:00
end
end
2016-08-06 12:50:17 -04:00
get :show_named_route , params : { kind : " url " }
assert_equal " http://testtwo.host/url_helper_controller_test/url_helper/show_named_route " , @response . body
2008-11-01 13:50:16 -04:00
end
2010-06-27 03:03:39 -04:00
2010-07-03 03:14:17 -04:00
def test_recall_params_should_be_normalized
2010-06-27 03:03:39 -04:00
get :normalize_recall_params
2016-08-06 12:50:17 -04:00
assert_equal " /url_helper_controller_test/url_helper/normalize_recall_params " , @response . body
2010-06-27 03:03:39 -04:00
end
2010-07-03 03:14:17 -04:00
def test_recall_params_should_not_be_changed
2010-06-27 03:03:39 -04:00
get :recall_params_not_changed
2016-08-06 12:50:17 -04:00
assert_equal " /url_helper_controller_test/url_helper/show_url_for " , @response . body
2010-06-27 03:03:39 -04:00
end
2010-07-03 03:14:17 -04:00
def test_recall_params_should_normalize_id
2016-08-06 12:50:17 -04:00
get :show , params : { id : " 123 " }
2010-07-03 03:14:17 -04:00
assert_equal 302 , @response . status
2016-08-06 12:50:17 -04:00
assert_equal " http://test.host/url_helper_controller_test/url_helper/profile/123 " , @response . location
2010-07-03 03:14:17 -04:00
2016-08-06 12:50:17 -04:00
get :show , params : { name : " 123 " }
assert_equal " ok " , @response . body
2010-07-03 03:14:17 -04:00
end
2010-10-26 09:27:18 -04:00
2013-03-30 14:17:08 -04:00
def test_url_helper_can_be_overridden
2010-10-26 09:27:18 -04:00
get :override_url_helper
2016-08-06 12:50:17 -04:00
assert_equal " /url_helper_controller_test/url_helper/override_url_helper/override " , @response . body
2010-10-26 09:27:18 -04:00
end
2006-10-20 14:00:20 -04:00
end
2007-01-12 02:02:38 -05:00
2009-09-06 23:29:29 -04:00
class TasksController < ActionController :: Base
2018-09-24 17:49:26 -04:00
ROUTES = test_routes do
2010-04-03 05:30:06 -04:00
resources :tasks
end
2009-09-06 23:29:29 -04:00
def index
render_default
end
2007-01-12 02:02:38 -05:00
2009-09-06 23:29:29 -04:00
def show
render_default
end
2007-01-12 02:02:38 -05:00
2016-12-23 09:19:23 -05:00
private
2009-09-06 23:29:29 -04:00
def render_default
2017-01-12 03:39:16 -05:00
render inline : " <%= link_to_unless_current('tasks', tasks_path) %> \n " \
2012-10-06 21:00:06 -04:00
" <%= link_to_unless_current('tasks', tasks_url) %> "
2009-09-06 23:29:29 -04:00
end
end
2007-01-12 02:02:38 -05:00
2009-09-24 00:03:24 -04:00
class LinkToUnlessCurrentWithControllerTest < ActionController :: TestCase
2010-04-03 05:30:06 -04:00
tests TasksController
2007-01-12 02:02:38 -05:00
2018-09-24 17:49:26 -04:00
def setup
super
@routes = TasksController :: ROUTES
end
2007-01-12 02:02:38 -05:00
def test_link_to_unless_current_to_current
2010-04-03 05:30:06 -04:00
get :index
assert_equal " tasks \n tasks " , @response . body
2007-01-12 02:02:38 -05:00
end
def test_link_to_unless_current_shows_link
2015-01-31 11:24:33 -05:00
get :show , params : { id : 1 }
2012-10-06 21:00:06 -04:00
assert_equal %{ <a href="/tasks">tasks</a> \n } +
%{ <a href=" #{ @request . protocol } #{ @request . host_with_port } /tasks">tasks</a> } ,
2010-04-03 05:30:06 -04:00
@response . body
2007-01-12 02:02:38 -05:00
end
end
2007-05-12 17:12:31 -04:00
2007-06-05 15:10:59 -04:00
class Session
2009-07-21 01:51:57 -04:00
extend ActiveModel :: Naming
include ActiveModel :: Conversion
2010-02-21 05:09:21 -05:00
attr_accessor :id , :workshop_id
2007-06-05 15:10:59 -04:00
2010-02-21 05:09:21 -05:00
def initialize ( id )
@id = id
2007-06-05 15:10:59 -04:00
end
2010-02-21 05:09:21 -05:00
def persisted?
id . present?
2007-06-05 15:10:59 -04:00
end
def to_s
id . to_s
end
end
2009-09-06 23:29:29 -04:00
class WorkshopsController < ActionController :: Base
2018-09-24 17:49:26 -04:00
ROUTES = test_routes do
2010-04-03 05:30:06 -04:00
resources :workshops do
resources :sessions
end
end
2009-09-06 23:29:29 -04:00
def index
2010-02-21 05:09:21 -05:00
@workshop = Workshop . new ( nil )
2012-10-06 21:00:06 -04:00
render inline : " <%= url_for(@workshop) %> \n <%= link_to('Workshop', @workshop) %> "
2007-05-12 17:12:31 -04:00
end
2009-09-06 23:29:29 -04:00
def show
2010-02-21 05:09:21 -05:00
@workshop = Workshop . new ( params [ :id ] )
2012-10-06 21:00:06 -04:00
render inline : " <%= url_for(@workshop) %> \n <%= link_to('Workshop', @workshop) %> "
2009-09-06 23:29:29 -04:00
end
2017-04-23 22:20:55 -04:00
def edit
@workshop = Workshop . new ( params [ :id ] )
render inline : " <%= current_page?(@workshop) %> "
end
2009-09-06 23:29:29 -04:00
end
2007-06-05 15:10:59 -04:00
2009-09-06 23:29:29 -04:00
class SessionsController < ActionController :: Base
2018-09-24 17:49:26 -04:00
ROUTES = test_routes do
2010-04-03 05:30:06 -04:00
resources :workshops do
resources :sessions
end
end
2009-09-06 23:29:29 -04:00
def index
2010-02-21 05:09:21 -05:00
@workshop = Workshop . new ( params [ :workshop_id ] )
@session = Session . new ( nil )
2012-10-06 21:00:06 -04:00
render inline : " <%= url_for([@workshop, @session]) %> \n <%= link_to('Session', [@workshop, @session]) %> "
2009-09-06 23:29:29 -04:00
end
2007-06-05 15:10:59 -04:00
2009-09-06 23:29:29 -04:00
def show
2010-02-21 05:09:21 -05:00
@workshop = Workshop . new ( params [ :workshop_id ] )
@session = Session . new ( params [ :id ] )
2012-10-06 21:00:06 -04:00
render inline : " <%= url_for([@workshop, @session]) %> \n <%= link_to('Session', [@workshop, @session]) %> "
2007-06-05 15:10:59 -04:00
end
2015-09-04 15:23:29 -04:00
def edit
@workshop = Workshop . new ( params [ :workshop_id ] )
@session = Session . new ( params [ :id ] )
@url = [ @workshop , @session , format : params [ :format ] ]
render inline : " <%= url_for(@url) %> \n <%= link_to('Session', @url) %> "
end
2009-09-06 23:29:29 -04:00
end
2009-09-24 00:03:24 -04:00
class PolymorphicControllerTest < ActionController :: TestCase
2018-09-24 17:49:26 -04:00
def setup
super
@routes = WorkshopsController :: ROUTES
end
2007-05-12 17:12:31 -04:00
def test_new_resource
2007-06-05 15:10:59 -04:00
@controller = WorkshopsController . new
2010-04-03 05:30:06 -04:00
get :index
2012-10-06 21:00:06 -04:00
assert_equal %{ /workshops \n <a href="/workshops">Workshop</a> } , @response . body
2007-05-12 17:12:31 -04:00
end
def test_existing_resource
2007-06-05 15:10:59 -04:00
@controller = WorkshopsController . new
2015-01-31 11:24:33 -05:00
get :show , params : { id : 1 }
2012-10-06 21:00:06 -04:00
assert_equal %{ /workshops/1 \n <a href="/workshops/1">Workshop</a> } , @response . body
2007-05-12 17:12:31 -04:00
end
2018-09-24 17:49:26 -04:00
def test_current_page_when_options_does_not_respond_to_to_hash
@controller = WorkshopsController . new
get :edit , params : { id : 1 }
assert_equal " false " , @response . body
end
end
class PolymorphicSessionsControllerTest < ActionController :: TestCase
def setup
super
@routes = SessionsController :: ROUTES
end
2007-06-05 15:10:59 -04:00
def test_new_nested_resource
@controller = SessionsController . new
2015-01-31 11:24:33 -05:00
get :index , params : { workshop_id : 1 }
2012-10-06 21:00:06 -04:00
assert_equal %{ /workshops/1/sessions \n <a href="/workshops/1/sessions">Session</a> } , @response . body
2007-06-05 15:10:59 -04:00
end
2010-08-14 01:13:00 -04:00
2007-06-05 15:10:59 -04:00
def test_existing_nested_resource
@controller = SessionsController . new
2010-08-14 01:13:00 -04:00
2015-01-31 11:24:33 -05:00
get :show , params : { workshop_id : 1 , id : 1 }
2012-10-06 21:00:06 -04:00
assert_equal %{ /workshops/1/sessions/1 \n <a href="/workshops/1/sessions/1">Session</a> } , @response . body
2007-06-05 15:10:59 -04:00
end
2015-09-04 15:23:29 -04:00
def test_existing_nested_resource_with_params
@controller = SessionsController . new
get :edit , params : { workshop_id : 1 , id : 1 , format : " json " }
assert_equal %{ /workshops/1/sessions/1.json \n <a href="/workshops/1/sessions/1.json">Session</a> } , @response . body
end
2007-06-05 15:10:59 -04:00
end