2008-08-23 23:06:54 +00:00
# encoding: utf-8
2007-12-21 11:51:17 +00:00
require 'abstract_unit'
2010-03-03 08:03:56 +00:00
require 'active_support/ordered_options'
2009-09-13 22:28:44 +00:00
require 'controller/fake_controllers'
2004-11-24 01:04:44 +00:00
2010-04-03 09:30:06 +00: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
attr_accessor :controller , :request
routes = ActionDispatch :: Routing :: RouteSet . new
routes . draw do
match " / " = > " foo # bar "
match " /other " = > " foo # other "
end
include routes . url_helpers
include ActionView :: Helpers :: UrlHelper
include ActionDispatch :: Assertions :: DomAssertions
include ActionView :: Context
include RenderERBUtils
# self.default_url_options = {:host => "www.example.com"}
# TODO: This shouldn't be needed (see template.rb:53)
def assigns
{ }
end
2010-03-03 08:03:56 +00:00
2010-04-03 09:30:06 +00:00
def abcd ( hash = { } )
hash_for ( :a = > :b , :c = > :d ) . merge ( hash )
2004-11-24 01:04:44 +00:00
end
2007-03-13 05:12:59 +00:00
2010-04-03 09:30:06 +00:00
def hash_for ( opts = { } )
{ :controller = > " foo " , :action = > " bar " } . merge ( opts )
end
alias url_hash hash_for
2006-03-18 22:36:52 +00:00
def test_url_for_escapes_urls
2010-04-03 09:30:06 +00:00
assert_equal " /?a=b&c=d " , url_for ( abcd )
assert_equal " /?a=b&c=d " , url_for ( abcd ( :escape = > true ) )
assert_equal " /?a=b&c=d " , url_for ( abcd ( :escape = > false ) )
2006-03-18 22:36:52 +00:00
end
2009-10-20 03:40:28 +00:00
2009-10-14 20:58:35 +00:00
def test_url_for_escaping_is_safety_aware
2010-04-03 09:30:06 +00:00
assert url_for ( abcd ( :escape = > true ) ) . html_safe? , " escaped urls should be html_safe? "
assert ! url_for ( abcd ( :escape = > false ) ) . html_safe? , " non-escaped urls should not be html_safe? "
2009-10-14 20:58:35 +00:00
end
2006-10-20 18:00:20 +00:00
2007-06-05 04:29:19 +00:00
def test_url_for_escapes_url_once
2010-04-03 09:30:06 +00:00
assert_equal " /?a=b&c=d " , url_for ( " /?a=b&c=d " )
2007-06-05 04:29:19 +00:00
end
2008-07-19 18:06:43 +00:00
def test_url_for_with_back
2010-04-03 09:30:06 +00:00
referer = 'http://www.example.com/referer'
@controller = Struct . new ( :request ) . new ( Struct . new ( :env ) . new ( { " HTTP_REFERER " = > referer } ) )
2008-07-19 18:06:43 +00:00
assert_equal 'http://www.example.com/referer' , url_for ( :back )
end
def test_url_for_with_back_and_no_referer
2010-04-03 09:30:06 +00:00
@controller = Struct . new ( :request ) . new ( Struct . new ( :env ) . new ( { } ) )
2008-07-19 18:06:43 +00:00
assert_equal 'javascript:history.back()' , url_for ( :back )
end
2009-10-07 18:49:38 +00:00
def test_url_for_from_hash_doesnt_escape_ampersand
2010-04-03 09:30:06 +00:00
path = url_for ( hash_for ( :foo = > :bar , :baz = > :quux ) )
assert_equal '/?baz=quux&foo=bar' , sort_query_string_params ( path )
2009-10-07 18:49:38 +00:00
end
2004-11-24 01:04:44 +00:00
# todo: missing test cases
2005-06-16 06:17:51 +00:00
def test_button_to_with_straight_url
2010-04-08 19:17:46 +00:00
assert_dom_equal " <form method= \" post \" action= \" http://www.example.com \" class= \" button_to \" ><div><input type= \" submit \" value= \" Hello \" /></div></form> " , button_to ( " Hello " , " http://www.example.com " )
2005-06-16 06:17:51 +00:00
end
2005-10-13 22:44:45 +00:00
def test_button_to_with_query
2010-04-08 19:17:46 +00:00
assert_dom_equal " <form method= \" post \" action= \" http://www.example.com/q1=v1&q2=v2 \" class= \" button_to \" ><div><input type= \" submit \" value= \" Hello \" /></div></form> " , button_to ( " Hello " , " http://www.example.com/q1=v1&q2=v2 " )
2005-10-13 22:44:45 +00:00
end
2006-10-18 16:42:19 +00:00
def test_button_to_with_escaped_query
2010-04-08 19:17:46 +00:00
assert_dom_equal " <form method= \" post \" action= \" http://www.example.com/q1=v1&q2=v2 \" class= \" button_to \" ><div><input type= \" submit \" value= \" Hello \" /></div></form> " , button_to ( " Hello " , " http://www.example.com/q1=v1&q2=v2 " )
2006-10-18 16:42:19 +00:00
end
2005-10-13 22:44:45 +00:00
def test_button_to_with_query_and_no_name
2010-04-08 19:17:46 +00:00
assert_dom_equal " <form method= \" post \" action= \" http://www.example.com?q1=v1&q2=v2 \" class= \" button_to \" ><div><input type= \" submit \" value= \" http://www.example.com?q1=v1&q2=v2 \" /></div></form> " , button_to ( nil , " http://www.example.com?q1=v1&q2=v2 " )
2005-10-13 22:44:45 +00:00
end
2005-06-16 06:17:51 +00:00
def test_button_to_with_javascript_confirm
2005-09-20 07:54:55 +00:00
assert_dom_equal (
2010-04-08 19:17:46 +00:00
" <form method= \" post \" action= \" http://www.example.com \" class= \" button_to \" ><div><input data-confirm= \" Are you sure? \" type= \" submit \" value= \" Hello \" /></div></form> " ,
2005-06-16 06:17:51 +00:00
button_to ( " Hello " , " http://www.example.com " , :confirm = > " Are you sure? " )
)
end
2010-01-31 20:40:40 +00:00
def test_button_to_with_remote_and_javascript_confirm
assert_dom_equal (
2010-04-08 19:17:46 +00:00
" <form method= \" post \" action= \" http://www.example.com \" class= \" button_to \" data-remote= \" true \" ><div><input data-confirm= \" Are you sure? \" type= \" submit \" value= \" Hello \" /></div></form> " ,
2010-01-31 20:40:40 +00:00
button_to ( " Hello " , " http://www.example.com " , :remote = > true , :confirm = > " Are you sure? " )
)
end
2010-04-15 00:44:28 +00:00
def test_button_to_with_remote_false
assert_dom_equal (
" <form method= \" post \" action= \" http://www.example.com \" class= \" button_to \" ><div><input type= \" submit \" value= \" Hello \" /></div></form> " ,
button_to ( " Hello " , " http://www.example.com " , :remote = > false )
)
end
2005-06-16 06:17:51 +00:00
def test_button_to_enabled_disabled
2005-09-20 07:54:55 +00:00
assert_dom_equal (
2010-04-08 19:17:46 +00:00
" <form method= \" post \" action= \" http://www.example.com \" class= \" button_to \" ><div><input type= \" submit \" value= \" Hello \" /></div></form> " ,
2005-06-16 06:17:51 +00:00
button_to ( " Hello " , " http://www.example.com " , :disabled = > false )
)
2005-09-20 07:54:55 +00:00
assert_dom_equal (
2010-04-08 19:17:46 +00:00
" <form method= \" post \" action= \" http://www.example.com \" class= \" button_to \" ><div><input disabled= \" disabled \" type= \" submit \" value= \" Hello \" /></div></form> " ,
2005-06-16 06:17:51 +00:00
button_to ( " Hello " , " http://www.example.com " , :disabled = > true )
)
end
2007-03-13 05:12:59 +00:00
2006-09-03 15:59:18 +00:00
def test_button_to_with_method_delete
assert_dom_equal (
2010-04-08 19:17:46 +00:00
" <form method= \" post \" action= \" http://www.example.com \" class= \" button_to \" ><div><input type= \" hidden \" name= \" _method \" value= \" delete \" /><input type= \" submit \" value= \" Hello \" /></div></form> " ,
2006-09-03 15:59:18 +00:00
button_to ( " Hello " , " http://www.example.com " , :method = > :delete )
)
end
2007-03-13 05:12:59 +00:00
2006-09-03 15:59:18 +00:00
def test_button_to_with_method_get
assert_dom_equal (
2010-04-08 19:17:46 +00:00
" <form method= \" get \" action= \" http://www.example.com \" class= \" button_to \" ><div><input type= \" submit \" value= \" Hello \" /></div></form> " ,
2006-09-03 15:59:18 +00:00
button_to ( " Hello " , " http://www.example.com " , :method = > :get )
)
end
2005-06-16 06:17:51 +00:00
2004-11-24 01:04:44 +00:00
def test_link_tag_with_straight_url
2005-09-20 07:54:55 +00:00
assert_dom_equal " <a href= \" http://www.example.com \" >Hello</a> " , link_to ( " Hello " , " http://www.example.com " )
2004-11-24 01:04:44 +00:00
end
2008-06-20 05:03:27 +00:00
2007-09-22 17:19:26 +00:00
def test_link_tag_without_host_option
2010-04-03 09:30:06 +00:00
assert_dom_equal ( %q{ <a href="/">Test Link</a> } , link_to ( 'Test Link' , url_hash ) )
2007-09-22 17:19:26 +00:00
end
def test_link_tag_with_host_option
2010-04-03 09:30:06 +00:00
hash = hash_for ( :host = > " www.example.com " )
expected = %q{ <a href="http://www.example.com/">Test Link</a> }
assert_dom_equal ( expected , link_to ( 'Test Link' , hash ) )
2007-09-22 17:19:26 +00:00
end
2005-03-06 11:50:41 +00:00
2005-10-13 22:44:45 +00:00
def test_link_tag_with_query
2010-04-03 09:30:06 +00:00
expected = %{ <a href="http://www.example.com?q1=v1&q2=v2">Hello</a> }
assert_dom_equal expected , link_to ( " Hello " , " http://www.example.com?q1=v1&q2=v2 " )
2005-10-13 22:44:45 +00:00
end
def test_link_tag_with_query_and_no_name
2010-04-03 09:30:06 +00:00
link = link_to ( nil , " http://www.example.com?q1=v1&q2=v2 " )
expected = %{ <a href="http://www.example.com?q1=v1&q2=v2">http://www.example.com?q1=v1&q2=v2</a> }
assert_dom_equal expected , link
2006-03-18 22:36:52 +00:00
end
2007-10-16 05:06:55 +00:00
def test_link_tag_with_back
2010-04-03 09:30:06 +00:00
env = { " HTTP_REFERER " = > " http://www.example.com/referer " }
@controller = Struct . new ( :request ) . new ( Struct . new ( :env ) . new ( env ) )
expected = %{ <a href=" #{ env [ " HTTP_REFERER " ] } ">go back</a> }
assert_dom_equal expected , link_to ( 'go back' , :back )
2007-10-16 05:06:55 +00:00
end
def test_link_tag_with_back_and_no_referer
2010-04-03 09:30:06 +00:00
@controller = Struct . new ( :request ) . new ( Struct . new ( :env ) . new ( { } ) )
link = link_to ( 'go back' , :back )
assert_dom_equal %{ <a href="javascript:history.back()">go back</a> } , link
2007-10-08 03:30:29 +00:00
end
2006-03-18 22:36:52 +00:00
def test_link_tag_with_img
2010-04-03 09:30:06 +00:00
link = link_to ( " <img src='/favicon.jpg' /> " . html_safe , " / " )
expected = %{ <a href="/"><img src='/favicon.jpg' /></a> }
assert_dom_equal expected , link
2006-03-18 22:36:52 +00:00
end
def test_link_with_nil_html_options
2010-04-03 09:30:06 +00:00
link = link_to ( " Hello " , url_hash , nil )
assert_dom_equal %{ <a href="/">Hello</a> } , link
2005-10-13 22:44:45 +00:00
end
2005-09-08 17:54:16 +00:00
def test_link_tag_with_custom_onclick
2010-04-03 09:30:06 +00:00
link = link_to ( " Hello " , " http://www.example.com " , :onclick = > " alert('yay!') " )
expected = %{ <a href="http://www.example.com" onclick="alert('yay!')">Hello</a> }
assert_dom_equal expected , link
2005-09-08 17:54:16 +00:00
end
2007-03-13 05:12:59 +00:00
2004-11-24 01:04:44 +00:00
def test_link_tag_with_javascript_confirm
2005-09-20 07:54:55 +00:00
assert_dom_equal (
2010-01-31 01:44:35 +00:00
" <a href= \" http://www.example.com \" data-confirm= \" Are you sure? \" >Hello</a> " ,
2005-03-06 12:27:06 +00:00
link_to ( " Hello " , " http://www.example.com " , :confirm = > " Are you sure? " )
2004-11-24 01:04:44 +00:00
)
2005-09-20 07:54:55 +00:00
assert_dom_equal (
2010-01-31 01:44:35 +00:00
" <a href= \" http://www.example.com \" data-confirm= \" You can't possibly be sure, can you? \" >Hello</a> " ,
2005-03-06 12:27:06 +00:00
link_to ( " Hello " , " http://www.example.com " , :confirm = > " You can't possibly be sure, can you? " )
2005-03-06 12:07:13 +00:00
)
2005-09-20 07:54:55 +00:00
assert_dom_equal (
2010-01-31 01:44:35 +00:00
" <a href= \" http://www.example.com \" data-confirm= \" You can't possibly be sure, \n can you? \" >Hello</a> " ,
2005-08-14 08:43:07 +00:00
link_to ( " Hello " , " http://www.example.com " , :confirm = > " You can't possibly be sure, \n can you? " )
)
2004-11-24 01:04:44 +00:00
end
2005-03-06 11:50:41 +00:00
2010-01-31 01:44:35 +00:00
def test_link_to_with_remote
assert_dom_equal (
" <a href= \" http://www.example.com \" data-remote= \" true \" >Hello</a> " ,
link_to ( " Hello " , " http://www.example.com " , :remote = > true )
)
end
2010-04-15 00:44:28 +00:00
def test_link_to_with_remote_false
assert_dom_equal (
" <a href= \" http://www.example.com \" >Hello</a> " ,
link_to ( " Hello " , " http://www.example.com " , :remote = > false )
)
end
2010-01-31 01:44:35 +00:00
2005-09-07 12:56:33 +00:00
def test_link_tag_using_post_javascript
2005-09-20 07:54:55 +00:00
assert_dom_equal (
2010-01-31 02:26:30 +00:00
" <a href='http://www.example.com' data-method= \" post \" rel= \" nofollow \" >Hello</a> " ,
2006-10-22 23:54:41 +00:00
link_to ( " Hello " , " http://www.example.com " , :method = > :post )
2005-09-07 12:56:33 +00:00
)
end
2006-05-28 00:33:53 +00:00
def test_link_tag_using_delete_javascript
assert_dom_equal (
2010-01-31 01:44:35 +00:00
" <a href='http://www.example.com' rel= \" nofollow \" data-method= \" delete \" >Destroy</a> " ,
2006-05-28 00:33:53 +00:00
link_to ( " Destroy " , " http://www.example.com " , :method = > :delete )
)
end
2007-03-13 05:12:59 +00:00
2007-06-23 17:11:01 +00:00
def test_link_tag_using_delete_javascript_and_href
assert_dom_equal (
2010-01-31 01:44:35 +00:00
" <a href=' \# ' rel= \" nofollow \" data-method= \" delete \" >Destroy</a> " ,
2007-06-23 17:11:01 +00:00
link_to ( " Destroy " , " http://www.example.com " , :method = > :delete , :href = > '#' )
)
end
2005-09-07 12:56:33 +00:00
def test_link_tag_using_post_javascript_and_confirm
2005-09-20 07:54:55 +00:00
assert_dom_equal (
2010-01-31 02:26:30 +00:00
" <a href= \" http://www.example.com \" data-method= \" post \" rel= \" nofollow \" data-confirm= \" Are you serious? \" >Hello</a> " ,
2006-10-22 23:54:41 +00:00
link_to ( " Hello " , " http://www.example.com " , :method = > :post , :confirm = > " Are you serious? " )
2007-03-13 05:12:59 +00:00
)
2005-09-07 12:56:33 +00:00
end
2007-03-13 05:12:59 +00:00
2009-03-16 15:20:15 +00:00
def test_link_tag_using_delete_javascript_and_href_and_confirm
assert_dom_equal (
2010-01-31 01:44:35 +00:00
" <a href=' \# ' rel= \" nofollow \" data-confirm= \" Are you serious? \" data-method= \" delete \" >Destroy</a> " ,
2009-03-16 15:20:15 +00:00
link_to ( " Destroy " , " http://www.example.com " , :method = > :delete , :href = > '#' , :confirm = > " Are you serious? " ) ,
" When specifying url, form should be generated with it, but not this.href "
)
end
2008-06-20 05:03:27 +00:00
def test_link_tag_using_block_in_erb
2010-04-03 09:30:06 +00:00
out = render_erb %{ <%= link_to('/') do %>Example site<% end %> }
assert_equal '<a href="/">Example site</a>' , out
2008-06-17 19:01:37 +00:00
end
2008-06-20 05:03:27 +00:00
2005-03-06 14:06:33 +00:00
def test_link_to_unless
2010-04-03 09:30:06 +00: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 " Showing " , link_to_unless ( true , " Showing " , url_hash )
assert_equal " <strong>Showing</strong> " ,
link_to_unless ( true , " Showing " , url_hash ) { | name |
" <strong> #{ name } </strong> "
}
assert_equal " <strong>Showing</strong> " ,
link_to_unless ( true , " Showing " , url_hash ) { | name |
" <strong> #{ name } </strong> "
}
assert_equal " test " ,
link_to_unless ( true , " Showing " , url_hash ) {
" test "
}
2005-03-06 14:06:33 +00:00
end
2007-03-13 05:12:59 +00:00
2005-03-06 14:06:33 +00:00
def test_link_to_if
2010-04-03 09:30:06 +00: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 )
assert_equal " Showing " , link_to_if ( false , " Showing " , url_hash )
end
def request_for_url ( url )
env = Rack :: MockRequest . env_for ( " http://www.example.com #{ url } " )
ActionDispatch :: Request . new ( env )
2005-03-06 14:06:33 +00:00
end
2009-02-05 19:37:57 +00:00
def test_current_page_with_simple_url
2010-04-03 09:30:06 +00:00
@request = request_for_url ( " / " )
assert current_page? ( url_hash )
assert current_page? ( " http://www.example.com/ " )
2009-02-05 19:37:57 +00:00
end
2009-10-20 03:40:28 +00:00
2009-02-05 19:37:57 +00:00
def test_current_page_ignoring_params
2010-04-03 09:30:06 +00:00
@request = request_for_url ( " /?order=desc&page=1 " )
assert current_page? ( url_hash )
assert current_page? ( " http://www.example.com/ " )
2009-02-05 19:37:57 +00:00
end
2009-10-20 03:40:28 +00:00
2009-02-05 19:37:57 +00:00
def test_current_page_with_params_that_match
2010-04-03 09:30:06 +00:00
@request = request_for_url ( " /?order=desc&page=1 " )
assert current_page? ( hash_for ( :order = > " desc " , :page = > " 1 " ) )
assert current_page? ( " http://www.example.com/?order=desc&page=1 " )
2009-02-05 19:37:57 +00:00
end
2009-10-20 03:40:28 +00:00
2006-10-22 23:54:41 +00:00
def test_link_unless_current
2010-04-03 09:30:06 +00: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 " ,
link_to_unless_current ( " Showing " , hash_for ( :order = > 'desc' , :page = > '1' ) )
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> } ,
link_to_unless_current ( " Showing " , hash_for ( :order = > :asc ) )
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 " )
assert_equal %{ <a href="/?order=desc&page=2 \" >Showing</a> } ,
link_to_unless_current ( " Showing " , hash_for ( :order = > " desc " , :page = > 2 ) )
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-24 01:04:44 +00:00
end
2007-01-12 07:02:38 +00:00
2004-11-24 01:04:44 +00:00
def test_mail_to
2005-09-20 07:54:55 +00: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 " )
assert_dom_equal (
2005-03-06 11:50:41 +00:00
" <a class= \" admin \" href= \" mailto:david@loudthinking.com \" >David Heinemeier Hansson</a> " ,
2004-11-24 01:04:44 +00:00
mail_to ( " david@loudthinking.com " , " David Heinemeier Hansson " , " class " = > " admin " )
)
2005-03-06 11:50:41 +00:00
assert_equal mail_to ( " david@loudthinking.com " , " David Heinemeier Hansson " , " class " = > " admin " ) ,
mail_to ( " david@loudthinking.com " , " David Heinemeier Hansson " , :class = > " admin " )
2004-11-24 01:04:44 +00:00
end
2005-03-06 11:50:41 +00:00
2005-03-09 13:53:47 +00:00
def test_mail_to_with_javascript
2010-04-16 22:24:57 +00:00
snippet = mail_to ( " me@domain.com " , " My email " , :encode = > " javascript " )
assert_dom_equal " <script type= \" text/javascript \" >eval(decodeURIComponent('%64%6f%63%75%6d%65%6e%74%2e%77%72%69%74%65%28%27%3c%61%20%68%72%65%66%3d%22%6d%61%69%6c%74%6f%3a%6d%65%40%64%6f%6d%61%69%6e%2e%63%6f%6d%22%3e%4d%79%20%65%6d%61%69%6c%3c%2f%61%3e%27%29%3b'))</script> " , snippet
assert snippet . html_safe?
2008-07-31 22:44:11 +00:00
end
def test_mail_to_with_javascript_unicode
2010-04-16 22:24:57 +00:00
snippet = mail_to ( " unicode@example.com " , " únicode " , :encode = > " javascript " )
assert_dom_equal " <script type= \" text/javascript \" >eval(decodeURIComponent('%64%6f%63%75%6d%65%6e%74%2e%77%72%69%74%65%28%27%3c%61%20%68%72%65%66%3d%22%6d%61%69%6c%74%6f%3a%75%6e%69%63%6f%64%65%40%65%78%61%6d%70%6c%65%2e%63%6f%6d%22%3e%c3%ba%6e%69%63%6f%64%65%3c%2f%61%3e%27%29%3b'))</script> " , snippet
assert snippet . html_safe
2005-03-09 13:53:47 +00:00
end
2007-03-13 05:12:59 +00:00
2005-04-02 08:16:57 +00:00
def test_mail_with_options
2005-09-20 07:54:55 +00:00
assert_dom_equal (
2005-04-02 08:16:57 +00: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">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. " )
)
end
2007-03-13 05:12:59 +00:00
2006-03-19 17:03:02 +00:00
def test_mail_to_with_img
2010-04-03 09:30:06 +00:00
assert_dom_equal %( <a href="mailto:feedback@example.com"><img src="/feedback.png" /></a> ) ,
mail_to ( 'feedback@example.com' , '<img src="/feedback.png" />' . html_safe )
2006-03-19 17:03:02 +00:00
end
2005-03-09 13:53:47 +00:00
def test_mail_to_with_hex
2007-01-28 14:16:25 +00:00
assert_dom_equal " <a href= \" & # 109;& # 97;& # 105;& # 108;& # 116;& # 111;& # 58;%6d%65@%64%6f%6d%61%69%6e.%63%6f%6d \" >My email</a> " , mail_to ( " me@domain.com " , " My email " , :encode = > " hex " )
assert_dom_equal " <a href= \" & # 109;& # 97;& # 105;& # 108;& # 116;& # 111;& # 58;%6d%65@%64%6f%6d%61%69%6e.%63%6f%6d \" >& # 109;& # 101;& # 64;& # 100;& # 111;& # 109;& # 97;& # 105;& # 110;& # 46;& # 99;& # 111;& # 109;</a> " , mail_to ( " me@domain.com " , nil , :encode = > " hex " )
2005-03-09 13:53:47 +00:00
end
2005-07-02 06:46:41 +00:00
def test_mail_to_with_replace_options
2005-09-20 07:54:55 +00:00
assert_dom_equal " <a href= \" mailto:wolfgang@stufenlos.net \" >wolfgang(at)stufenlos(dot)net</a> " , mail_to ( " wolfgang@stufenlos.net " , nil , :replace_at = > " (at) " , :replace_dot = > " (dot) " )
2007-01-28 14:16:25 +00:00
assert_dom_equal " <a href= \" & # 109;& # 97;& # 105;& # 108;& # 116;& # 111;& # 58;%6d%65@%64%6f%6d%61%69%6e.%63%6f%6d \" >& # 109;& # 101;& # 40;& # 97;& # 116;& # 41;& # 100;& # 111;& # 109;& # 97;& # 105;& # 110;& # 46;& # 99;& # 111;& # 109;</a> " , mail_to ( " me@domain.com " , nil , :encode = > " hex " , :replace_at = > " (at) " )
assert_dom_equal " <a href= \" & # 109;& # 97;& # 105;& # 108;& # 116;& # 111;& # 58;%6d%65@%64%6f%6d%61%69%6e.%63%6f%6d \" >My email</a> " , mail_to ( " me@domain.com " , " My email " , :encode = > " hex " , :replace_at = > " (at) " )
assert_dom_equal " <a href= \" & # 109;& # 97;& # 105;& # 108;& # 116;& # 111;& # 58;%6d%65@%64%6f%6d%61%69%6e.%63%6f%6d \" >& # 109;& # 101;& # 40;& # 97;& # 116;& # 41;& # 100;& # 111;& # 109;& # 97;& # 105;& # 110;& # 40;& # 100;& # 111;& # 116;& # 41;& # 99;& # 111;& # 109;</a> " , mail_to ( " me@domain.com " , nil , :encode = > " hex " , :replace_at = > " (at) " , :replace_dot = > " (dot) " )
2008-07-31 22:44:11 +00:00
assert_dom_equal " <script type= \" text/javascript \" >eval(decodeURIComponent('%64%6f%63%75%6d%65%6e%74%2e%77%72%69%74%65%28%27%3c%61%20%68%72%65%66%3d%22%6d%61%69%6c%74%6f%3a%6d%65%40%64%6f%6d%61%69%6e%2e%63%6f%6d%22%3e%4d%79%20%65%6d%61%69%6c%3c%2f%61%3e%27%29%3b'))</script> " , mail_to ( " me@domain.com " , " My email " , :encode = > " javascript " , :replace_at = > " (at) " , :replace_dot = > " (dot) " )
assert_dom_equal " <script type= \" text/javascript \" >eval(decodeURIComponent('%64%6f%63%75%6d%65%6e%74%2e%77%72%69%74%65%28%27%3c%61%20%68%72%65%66%3d%22%6d%61%69%6c%74%6f%3a%6d%65%40%64%6f%6d%61%69%6e%2e%63%6f%6d%22%3e%6d%65%28%61%74%29%64%6f%6d%61%69%6e%28%64%6f%74%29%63%6f%6d%3c%2f%61%3e%27%29%3b'))</script> " , mail_to ( " me@domain.com " , nil , :encode = > " javascript " , :replace_at = > " (at) " , :replace_dot = > " (dot) " )
2005-07-02 06:46:41 +00:00
end
2009-10-20 03:40:28 +00:00
2010-04-03 09:30:06 +00:00
# TODO: button_to looks at this ... why?
2007-09-28 15:55:45 +00:00
def protect_against_forgery?
false
2007-09-23 02:32:55 +00:00
end
2009-10-20 03:40:28 +00:00
private
def sort_query_string_params ( uri )
path , qs = uri . split ( '?' )
qs = qs . split ( '&' ) . sort . join ( '&' ) if qs
qs ? " #{ path } ? #{ qs } " : path
end
2004-12-22 22:50:44 +00:00
end
2006-10-20 18:00:20 +00:00
2009-11-24 03:50:21 +00:00
class UrlHelperControllerTest < ActionController :: TestCase
class UrlHelperController < ActionController :: Base
2010-04-03 09:30:06 +00:00
test_routes do | map |
match 'url_helper_controller_test/url_helper/show_named_route' ,
:to = > 'url_helper_controller_test/url_helper#show_named_route' ,
:as = > :show_named_route
map . connect " :controller/:action/:id "
# match "/:controller(/:action(/:id))"
end
2009-11-24 03:50:21 +00:00
def show_url_for
render :inline = > " <%= url_for :controller => 'url_helper_controller_test/url_helper', :action => 'show_url_for' %> "
end
2007-03-13 05:12:59 +00:00
2010-04-21 04:33:48 +00:00
def show_overriden_url_for
render :inline = > " <%= url_for params.merge(:controller => 'url_helper_controller_test/url_helper', :action => 'show_url_for') %> "
end
2009-11-24 03:50:21 +00:00
def show_named_route
render :inline = > " <%= show_named_route_ #{ params [ :kind ] } %> "
end
2006-10-20 18:00:20 +00:00
2009-11-24 03:50:21 +00:00
def nil_url_for
render :inline = > '<%= url_for(nil) %>'
end
2008-06-23 12:51:38 +00:00
2009-11-24 03:50:21 +00:00
def rescue_action ( e ) raise e end
2006-10-20 18:00:20 +00:00
end
2009-11-24 03:50:21 +00:00
tests UrlHelperController
2007-03-13 05:12:59 +00:00
2006-10-20 18:00:20 +00:00
def test_url_for_shows_only_path
get :show_url_for
2009-11-24 03:50:21 +00:00
assert_equal '/url_helper_controller_test/url_helper/show_url_for' , @response . body
2006-10-20 18:00:20 +00:00
end
2007-03-13 05:12:59 +00:00
2010-04-21 04:33:48 +00:00
def test_overriden_url_for_shows_only_path
get :show_overriden_url_for
assert_equal '/url_helper_controller_test/url_helper/show_url_for' , @response . body
end
2008-06-23 12:51:38 +00:00
def test_named_route_url_shows_host_and_path
2010-04-03 09:30:06 +00:00
get :show_named_route , :kind = > 'url'
assert_equal 'http://test.host/url_helper_controller_test/url_helper/show_named_route' ,
@response . body
2006-10-20 18:00:20 +00:00
end
2007-03-13 05:12:59 +00:00
2006-10-20 18:00:20 +00:00
def test_named_route_path_shows_only_path
2010-04-03 09:30:06 +00:00
get :show_named_route , :kind = > 'path'
assert_equal '/url_helper_controller_test/url_helper/show_named_route' , @response . body
2006-10-20 18:00:20 +00:00
end
2007-03-13 05:12:59 +00:00
2008-06-23 12:51:38 +00:00
def test_url_for_nil_returns_current_path
get :nil_url_for
2009-11-24 03:50:21 +00:00
assert_equal '/url_helper_controller_test/url_helper/nil_url_for' , @response . body
2008-06-23 12:51:38 +00:00
end
2008-11-01 17:50:16 +00:00
def test_named_route_should_show_host_and_path_using_controller_default_url_options
class << @controller
def default_url_options ( options = nil )
{ :host = > 'testtwo.host' }
end
end
2010-04-03 09:30:06 +00:00
get :show_named_route , :kind = > 'url'
assert_equal 'http://testtwo.host/url_helper_controller_test/url_helper/show_named_route' , @response . body
2008-11-01 17:50:16 +00:00
end
2006-10-20 18:00:20 +00:00
end
2007-01-12 07:02:38 +00:00
2009-09-07 03:29:29 +00:00
class TasksController < ActionController :: Base
2010-04-03 09:30:06 +00:00
test_routes do
resources :tasks
end
2009-09-07 03:29:29 +00:00
def index
render_default
end
2007-01-12 07:02:38 +00:00
2009-09-07 03:29:29 +00:00
def show
render_default
end
2007-01-12 07:02:38 +00:00
2009-09-07 03:29:29 +00:00
def rescue_action ( e ) raise e end
2007-01-12 07:02:38 +00:00
2009-09-07 03:29:29 +00:00
protected
def render_default
render :inline = >
" <%= link_to_unless_current( \" tasks \" , tasks_path) %> \n " +
" <%= link_to_unless_current( \" tasks \" , tasks_url) %> "
end
end
2007-01-12 07:02:38 +00:00
2009-09-24 04:03:24 +00:00
class LinkToUnlessCurrentWithControllerTest < ActionController :: TestCase
2010-04-03 09:30:06 +00:00
tests TasksController
2007-01-12 07:02:38 +00:00
def test_link_to_unless_current_to_current
2010-04-03 09:30:06 +00:00
get :index
assert_equal " tasks \n tasks " , @response . body
2007-01-12 07:02:38 +00:00
end
def test_link_to_unless_current_shows_link
2010-04-03 09:30:06 +00:00
get :show , :id = > 1
assert_equal " <a href= \" /tasks \" >tasks</a> \n " +
" <a href= \" #{ @request . protocol } #{ @request . host_with_port } /tasks \" >tasks</a> " ,
@response . body
2007-01-12 07:02:38 +00:00
end
end
2007-05-12 21:12:31 +00:00
class Workshop
2009-07-21 05:51:57 +00:00
extend ActiveModel :: Naming
include ActiveModel :: Conversion
2010-02-21 10:09:21 +00:00
attr_accessor :id
2007-05-12 21:12:31 +00:00
2010-02-21 10:09:21 +00:00
def initialize ( id )
@id = id
2007-05-12 21:12:31 +00:00
end
2008-06-20 05:03:27 +00:00
2010-02-21 10:09:21 +00:00
def persisted?
id . present?
2007-05-12 21:12:31 +00:00
end
2008-06-20 05:03:27 +00:00
2007-05-12 21:12:31 +00:00
def to_s
id . to_s
end
end
2007-06-05 19:10:59 +00:00
class Session
2009-07-21 05:51:57 +00:00
extend ActiveModel :: Naming
include ActiveModel :: Conversion
2010-02-21 10:09:21 +00:00
attr_accessor :id , :workshop_id
2007-06-05 19:10:59 +00:00
2010-02-21 10:09:21 +00:00
def initialize ( id )
@id = id
2007-06-05 19:10:59 +00:00
end
2010-02-21 10:09:21 +00:00
def persisted?
id . present?
2007-06-05 19:10:59 +00:00
end
def to_s
id . to_s
end
end
2009-09-07 03:29:29 +00:00
class WorkshopsController < ActionController :: Base
2010-04-03 09:30:06 +00:00
test_routes do
resources :workshops do
resources :sessions
end
end
2009-09-07 03:29:29 +00:00
def index
2010-02-21 10:09:21 +00:00
@workshop = Workshop . new ( nil )
2009-09-07 03:29:29 +00:00
render :inline = > " <%= url_for(@workshop) %> \n <%= link_to('Workshop', @workshop) %> "
2007-05-12 21:12:31 +00:00
end
2009-09-07 03:29:29 +00:00
def show
2010-02-21 10:09:21 +00:00
@workshop = Workshop . new ( params [ :id ] )
2009-09-07 03:29:29 +00:00
render :inline = > " <%= url_for(@workshop) %> \n <%= link_to('Workshop', @workshop) %> "
end
2007-06-05 19:10:59 +00:00
2009-09-07 03:29:29 +00:00
def rescue_action ( e ) raise e end
end
2007-06-05 19:10:59 +00:00
2009-09-07 03:29:29 +00:00
class SessionsController < ActionController :: Base
2010-04-03 09:30:06 +00:00
test_routes do
resources :workshops do
resources :sessions
end
end
2009-09-07 03:29:29 +00:00
def index
2010-02-21 10:09:21 +00:00
@workshop = Workshop . new ( params [ :workshop_id ] )
@session = Session . new ( nil )
2009-09-07 03:29:29 +00:00
render :inline = > " <%= url_for([@workshop, @session]) %> \n <%= link_to('Session', [@workshop, @session]) %> "
end
2007-06-05 19:10:59 +00:00
2009-09-07 03:29:29 +00:00
def show
2010-02-21 10:09:21 +00:00
@workshop = Workshop . new ( params [ :workshop_id ] )
@session = Session . new ( params [ :id ] )
2009-09-07 03:29:29 +00:00
render :inline = > " <%= url_for([@workshop, @session]) %> \n <%= link_to('Session', [@workshop, @session]) %> "
2007-06-05 19:10:59 +00:00
end
2009-09-07 03:29:29 +00:00
def rescue_action ( e ) raise e end
end
2009-09-24 04:03:24 +00:00
class PolymorphicControllerTest < ActionController :: TestCase
2007-05-12 21:12:31 +00:00
def test_new_resource
2007-06-05 19:10:59 +00:00
@controller = WorkshopsController . new
2010-04-03 09:30:06 +00:00
get :index
assert_equal " /workshops \n <a href= \" /workshops \" >Workshop</a> " , @response . body
2007-05-12 21:12:31 +00:00
end
def test_existing_resource
2007-06-05 19:10:59 +00:00
@controller = WorkshopsController . new
2010-04-03 09:30:06 +00:00
get :show , :id = > 1
assert_equal " /workshops/1 \n <a href= \" /workshops/1 \" >Workshop</a> " , @response . body
2007-05-12 21:12:31 +00:00
end
2007-06-05 19:10:59 +00:00
def test_new_nested_resource
@controller = SessionsController . new
2010-04-03 09:30:06 +00:00
get :index , :workshop_id = > 1
assert_equal " /workshops/1/sessions \n <a href= \" /workshops/1/sessions \" >Session</a> " , @response . body
2007-06-05 19:10:59 +00:00
end
2010-04-03 09:30:06 +00:00
2007-06-05 19:10:59 +00:00
def test_existing_nested_resource
@controller = SessionsController . new
2010-04-03 09:30:06 +00:00
get :show , :workshop_id = > 1 , :id = > 1
assert_equal " /workshops/1/sessions/1 \n <a href= \" /workshops/1/sessions/1 \" >Session</a> " , @response . body
2007-06-05 19:10:59 +00:00
end
end