2007-01-28 07:16:55 +00:00
require " #{ File . dirname ( __FILE__ ) } /../abstract_unit "
2004-11-24 01:04:44 +00:00
2007-05-14 17:30:35 +00:00
silence_warnings do
Post = Struct . new ( :title , :author_name , :body , :secret , :written_on , :cost )
Post . class_eval do
alias_method :title_before_type_cast , :title unless respond_to? ( :title_before_type_cast )
alias_method :body_before_type_cast , :body unless respond_to? ( :body_before_type_cast )
alias_method :author_name_before_type_cast , :author_name unless respond_to? ( :author_name_before_type_cast )
2007-10-26 04:48:19 +00:00
2007-05-14 17:30:35 +00:00
def new_record = ( boolean )
@new_record = boolean
end
def new_record?
@new_record
end
end
2007-06-05 19:10:59 +00:00
class Comment
attr_reader :id
attr_reader :post_id
def save ; @id = 1 ; @post_id = 1 end
def new_record? ; @id . nil? end
def name
@id . nil? ? 'new comment' : " comment # #{ @id } "
end
end
2007-05-14 17:30:35 +00:00
end
2007-06-05 19:10:59 +00:00
class Comment :: Nested < Comment ; end
2004-11-24 01:04:44 +00:00
class FormHelperTest < Test :: Unit :: TestCase
include ActionView :: Helpers :: FormHelper
2005-11-13 11:13:11 +00:00
include ActionView :: Helpers :: FormTagHelper
include ActionView :: Helpers :: UrlHelper
include ActionView :: Helpers :: TagHelper
include ActionView :: Helpers :: TextHelper
2007-01-26 03:38:23 +00:00
include ActionView :: Helpers :: ActiveRecordHelper
2007-05-14 17:30:35 +00:00
include ActionView :: Helpers :: RecordIdentificationHelper
2007-06-07 21:35:01 +00:00
include ActionController :: PolymorphicRoutes
2004-11-24 01:04:44 +00:00
def setup
2005-03-06 11:50:41 +00:00
@post = Post . new
2007-06-05 19:10:59 +00:00
@comment = Comment . new
2007-01-26 03:38:23 +00:00
def @post . errors ( )
Class . new {
def on ( field ) ; " can't be empty " if field == " author_name " ; end
def empty? ( ) false end
def count ( ) 1 end
def full_messages ( ) [ " Author name can't be empty " ] end
} . new
end
2005-01-24 15:35:30 +00:00
def @post . id ; 123 ; end
2005-03-20 15:08:30 +00:00
def @post . id_before_type_cast ; 123 ; end
2007-10-26 04:48:19 +00:00
def @post . to_param ; '123' ; end
2005-01-24 15:35:30 +00:00
2004-11-24 01:04:44 +00:00
@post . title = " Hello World "
@post . author_name = " "
@post . body = " Back to the hill and over it again! "
@post . secret = 1
@post . written_on = Date . new ( 2004 , 6 , 15 )
2005-11-13 11:13:11 +00:00
@controller = Class . new do
2006-02-26 07:23:42 +00:00
attr_reader :url_for_options
2007-05-12 21:12:31 +00:00
def url_for ( options )
2006-02-26 07:23:42 +00:00
@url_for_options = options
2005-11-13 11:13:11 +00:00
" http://www.example.com "
end
end
@controller = @controller . new
2004-11-24 01:04:44 +00:00
end
2007-09-22 17:17:22 +00:00
def test_label
assert_dom_equal ( '<label for="post_title">Title</label>' , label ( " post " , " title " ) )
assert_dom_equal ( '<label for="post_title">The title goes here</label>' , label ( " post " , " title " , " The title goes here " ) )
assert_dom_equal (
'<label class="title_label" for="post_title">Title</label>' ,
label ( " post " , " title " , nil , :class = > 'title_label' )
)
end
def test_label_with_symbols
assert_dom_equal ( '<label for="post_title">Title</label>' , label ( :post , :title ) )
end
2004-11-24 01:04:44 +00:00
def test_text_field
2005-09-20 07:54:55 +00:00
assert_dom_equal (
2004-11-24 01:04:44 +00:00
'<input id="post_title" name="post[title]" size="30" type="text" value="Hello World" />' , text_field ( " post " , " title " )
)
2005-09-20 07:54:55 +00:00
assert_dom_equal (
2004-11-24 01:04:44 +00:00
'<input id="post_title" name="post[title]" size="30" type="password" value="Hello World" />' , password_field ( " post " , " title " )
)
2005-09-20 07:54:55 +00:00
assert_dom_equal (
2005-07-09 17:28:35 +00:00
'<input id="person_name" name="person[name]" size="30" type="password" />' , password_field ( " person " , " name " )
2004-11-24 01:04:44 +00:00
)
end
def test_text_field_with_escapes
@post . title = " <b>Hello World</b> "
2005-09-20 07:54:55 +00:00
assert_dom_equal (
2004-11-24 01:04:44 +00:00
'<input id="post_title" name="post[title]" size="30" type="text" value="<b>Hello World</b>" />' , text_field ( " post " , " title " )
)
end
def test_text_field_with_options
2005-03-06 11:50:41 +00:00
expected = '<input id="post_title" name="post[title]" size="35" type="text" value="Hello World" />'
2005-09-20 07:54:55 +00:00
assert_dom_equal expected , text_field ( " post " , " title " , " size " = > 35 )
assert_dom_equal expected , text_field ( " post " , " title " , :size = > 35 )
2004-11-24 01:04:44 +00:00
end
2005-03-06 11:50:41 +00:00
2004-11-24 01:04:44 +00:00
def test_text_field_assuming_size
2005-03-06 11:50:41 +00:00
expected = '<input id="post_title" maxlength="35" name="post[title]" size="35" type="text" value="Hello World" />'
2005-09-20 07:54:55 +00:00
assert_dom_equal expected , text_field ( " post " , " title " , " maxlength " = > 35 )
assert_dom_equal expected , text_field ( " post " , " title " , :maxlength = > 35 )
2004-11-24 01:04:44 +00:00
end
2005-03-06 11:50:41 +00:00
2007-05-24 20:47:03 +00:00
def test_text_field_removing_size
expected = '<input id="post_title" maxlength="35" name="post[title]" type="text" value="Hello World" />'
assert_dom_equal expected , text_field ( " post " , " title " , " maxlength " = > 35 , " size " = > nil )
assert_dom_equal expected , text_field ( " post " , " title " , :maxlength = > 35 , :size = > nil )
end
2006-02-26 01:07:05 +00:00
def test_text_field_doesnt_change_param_values
object_name = 'post[]'
expected = '<input id="post_123_title" name="post[123][title]" size="30" type="text" value="Hello World" />'
assert_equal expected , text_field ( object_name , " title " )
assert_equal object_name , " post[] "
end
2007-06-13 01:20:55 +00:00
def test_hidden_field
assert_dom_equal '<input id="post_title" name="post[title]" type="hidden" value="Hello World" />' ,
hidden_field ( " post " , " title " )
end
def test_hidden_field_with_escapes
@post . title = " <b>Hello World</b> "
assert_dom_equal '<input id="post_title" name="post[title]" type="hidden" value="<b>Hello World</b>" />' ,
hidden_field ( " post " , " title " )
end
def test_text_field_with_options
assert_dom_equal '<input id="post_title" name="post[title]" type="hidden" value="Something Else" />' ,
hidden_field ( " post " , " title " , :value = > " Something Else " )
end
2004-11-24 01:04:44 +00:00
def test_check_box
2005-09-20 07:54:55 +00:00
assert_dom_equal (
2004-11-24 01:04:44 +00:00
'<input checked="checked" id="post_secret" name="post[secret]" type="checkbox" value="1" /><input name="post[secret]" type="hidden" value="0" />' ,
check_box ( " post " , " secret " )
)
@post . secret = 0
2005-09-20 07:54:55 +00:00
assert_dom_equal (
2004-11-24 01:04:44 +00:00
'<input id="post_secret" name="post[secret]" type="checkbox" value="1" /><input name="post[secret]" type="hidden" value="0" />' ,
2005-03-06 11:50:41 +00:00
check_box ( " post " , " secret " )
2004-11-24 01:04:44 +00:00
)
2005-09-20 07:54:55 +00:00
assert_dom_equal (
2005-07-09 17:28:35 +00:00
'<input checked="checked" id="post_secret" name="post[secret]" type="checkbox" value="1" /><input name="post[secret]" type="hidden" value="0" />' ,
2005-04-17 09:39:01 +00:00
check_box ( " post " , " secret " , { " checked " = > " checked " } )
)
2004-11-24 01:04:44 +00:00
@post . secret = true
2005-09-20 07:54:55 +00:00
assert_dom_equal (
2004-11-24 01:04:44 +00:00
'<input checked="checked" id="post_secret" name="post[secret]" type="checkbox" value="1" /><input name="post[secret]" type="hidden" value="0" />' ,
check_box ( " post " , " secret " )
)
end
2005-07-09 17:28:35 +00:00
2005-05-19 17:27:08 +00:00
def test_check_box_with_explicit_checked_and_unchecked_values
@post . secret = " on "
2005-09-20 07:54:55 +00:00
assert_dom_equal (
2005-05-19 17:27:08 +00:00
'<input checked="checked" id="post_secret" name="post[secret]" type="checkbox" value="on" /><input name="post[secret]" type="hidden" value="off" />' ,
check_box ( " post " , " secret " , { } , " on " , " off " )
)
end
2004-12-14 13:48:27 +00:00
2007-10-23 19:25:28 +00:00
def test_checkbox_disabled_still_submits_checked_value
assert_dom_equal (
'<input checked="checked" disabled="disabled" id="post_secret" name="post[secret]" type="checkbox" value="1" /><input name="post[secret]" type="hidden" value="1" />' ,
check_box ( " post " , " secret " , { :disabled = > :true } )
)
end
2004-12-14 13:48:27 +00:00
def test_radio_button
2005-09-20 07:54:55 +00:00
assert_dom_equal ( '<input checked="checked" id="post_title_hello_world" name="post[title]" type="radio" value="Hello World" />' ,
2005-03-06 11:50:41 +00:00
radio_button ( " post " , " title " , " Hello World " )
2004-12-14 13:48:27 +00:00
)
2005-09-20 07:54:55 +00:00
assert_dom_equal ( '<input id="post_title_goodbye_world" name="post[title]" type="radio" value="Goodbye World" />' ,
2005-03-06 11:50:41 +00:00
radio_button ( " post " , " title " , " Goodbye World " )
2004-12-14 13:48:27 +00:00
)
end
2005-03-06 11:50:41 +00:00
2005-10-14 02:07:51 +00:00
def test_radio_button_is_checked_with_integers
assert_dom_equal ( '<input checked="checked" id="post_secret_1" name="post[secret]" type="radio" value="1" />' ,
radio_button ( " post " , " secret " , " 1 " )
)
end
2007-06-13 01:20:55 +00:00
2006-10-09 00:53:59 +00:00
def test_radio_button_respects_passed_in_id
assert_dom_equal ( '<input checked="checked" id="foo" name="post[secret]" type="radio" value="1" />' ,
radio_button ( " post " , " secret " , " 1 " , :id = > " foo " )
)
end
2005-10-14 02:07:51 +00:00
2004-11-24 01:04:44 +00:00
def test_text_area
2005-09-20 07:54:55 +00:00
assert_dom_equal (
2005-07-02 06:46:41 +00:00
'<textarea cols="40" id="post_body" name="post[body]" rows="20">Back to the hill and over it again!</textarea>' ,
2004-11-24 01:04:44 +00:00
text_area ( " post " , " body " )
)
end
2005-03-06 11:50:41 +00:00
2004-11-24 01:04:44 +00:00
def test_text_area_with_escapes
@post . body = " Back to <i>the</i> hill and over it again! "
2005-09-20 07:54:55 +00:00
assert_dom_equal (
2005-07-02 06:46:41 +00:00
'<textarea cols="40" id="post_body" name="post[body]" rows="20">Back to <i>the</i> hill and over it again!</textarea>' ,
2004-11-24 01:04:44 +00:00
text_area ( " post " , " body " )
)
end
2007-06-13 01:20:55 +00:00
2006-02-08 05:13:21 +00:00
def test_text_area_with_alternate_value
assert_dom_equal (
'<textarea cols="40" id="post_body" name="post[body]" rows="20">Testing alternate values.</textarea>' ,
text_area ( " post " , " body " , :value = > 'Testing alternate values.' )
)
end
2007-06-13 01:20:55 +00:00
2006-05-11 16:36:59 +00:00
def test_text_area_with_size_option
assert_dom_equal (
'<textarea cols="183" id="post_body" name="post[body]" rows="820">Back to the hill and over it again!</textarea>' ,
text_area ( " post " , " body " , :size = > " 183x820 " )
)
end
2007-06-13 01:20:55 +00:00
2004-11-24 01:04:44 +00:00
def test_explicit_name
2005-09-20 07:54:55 +00:00
assert_dom_equal (
2004-11-24 01:04:44 +00:00
'<input id="post_title" name="dont guess" size="30" type="text" value="Hello World" />' , text_field ( " post " , " title " , " name " = > " dont guess " )
2005-03-06 11:50:41 +00:00
)
2005-09-20 07:54:55 +00:00
assert_dom_equal (
2005-07-02 06:46:41 +00:00
'<textarea cols="40" id="post_body" name="really!" rows="20">Back to the hill and over it again!</textarea>' ,
2004-11-24 01:04:44 +00:00
text_area ( " post " , " body " , " name " = > " really! " )
)
2005-09-20 07:54:55 +00:00
assert_dom_equal (
2004-11-24 01:04:44 +00:00
'<input checked="checked" id="post_secret" name="i mean it" type="checkbox" value="1" /><input name="i mean it" type="hidden" value="0" />' ,
check_box ( " post " , " secret " , " name " = > " i mean it " )
)
2005-09-20 07:54:55 +00:00
assert_dom_equal text_field ( " post " , " title " , " name " = > " dont guess " ) ,
2005-03-06 11:50:41 +00:00
text_field ( " post " , " title " , :name = > " dont guess " )
2005-09-20 07:54:55 +00:00
assert_dom_equal text_area ( " post " , " body " , " name " = > " really! " ) ,
2005-03-06 11:50:41 +00:00
text_area ( " post " , " body " , :name = > " really! " )
2005-09-20 07:54:55 +00:00
assert_dom_equal check_box ( " post " , " secret " , " name " = > " i mean it " ) ,
2005-03-06 11:50:41 +00:00
check_box ( " post " , " secret " , :name = > " i mean it " )
2004-11-24 01:04:44 +00:00
end
2005-03-06 11:50:41 +00:00
2004-11-24 01:04:44 +00:00
def test_explicit_id
2005-09-20 07:54:55 +00:00
assert_dom_equal (
2004-11-24 01:04:44 +00:00
'<input id="dont guess" name="post[title]" size="30" type="text" value="Hello World" />' , text_field ( " post " , " title " , " id " = > " dont guess " )
2005-03-06 11:50:41 +00:00
)
2005-09-20 07:54:55 +00:00
assert_dom_equal (
2005-07-02 06:46:41 +00:00
'<textarea cols="40" id="really!" name="post[body]" rows="20">Back to the hill and over it again!</textarea>' ,
2004-11-24 01:04:44 +00:00
text_area ( " post " , " body " , " id " = > " really! " )
)
2005-09-20 07:54:55 +00:00
assert_dom_equal (
2004-11-24 01:04:44 +00:00
'<input checked="checked" id="i mean it" name="post[secret]" type="checkbox" value="1" /><input name="post[secret]" type="hidden" value="0" />' ,
check_box ( " post " , " secret " , " id " = > " i mean it " )
)
2005-09-20 07:54:55 +00:00
assert_dom_equal text_field ( " post " , " title " , " id " = > " dont guess " ) ,
2005-03-06 11:50:41 +00:00
text_field ( " post " , " title " , :id = > " dont guess " )
2005-09-20 07:54:55 +00:00
assert_dom_equal text_area ( " post " , " body " , " id " = > " really! " ) ,
2005-03-06 11:50:41 +00:00
text_area ( " post " , " body " , :id = > " really! " )
2005-09-20 07:54:55 +00:00
assert_dom_equal check_box ( " post " , " secret " , " id " = > " i mean it " ) ,
2005-03-06 11:50:41 +00:00
check_box ( " post " , " secret " , :id = > " i mean it " )
2004-11-24 01:04:44 +00:00
end
2005-01-24 15:35:30 +00:00
def test_auto_index
pid = @post . id
2007-10-27 20:30:05 +00:00
assert_dom_equal (
" <label for= \" post_ #{ pid } _title \" >Title</label> " ,
label ( " post[] " , " title " )
)
2005-09-20 07:54:55 +00:00
assert_dom_equal (
2005-01-24 15:35:30 +00:00
" <input id= \" post_ #{ pid } _title \" name= \" post[ #{ pid } ][title] \" size= \" 30 \" type= \" text \" value= \" Hello World \" /> " , text_field ( " post[] " , " title " )
)
2005-09-20 07:54:55 +00:00
assert_dom_equal (
2005-07-02 06:46:41 +00:00
" <textarea cols= \" 40 \" id= \" post_ #{ pid } _body \" name= \" post[ #{ pid } ][body] \" rows= \" 20 \" >Back to the hill and over it again!</textarea> " ,
2005-01-24 15:35:30 +00:00
text_area ( " post[] " , " body " )
)
2005-09-20 07:54:55 +00:00
assert_dom_equal (
2005-01-24 15:35:30 +00:00
" <input checked= \" checked \" id= \" post_ #{ pid } _secret \" name= \" post[ #{ pid } ][secret] \" type= \" checkbox \" value= \" 1 \" /><input name= \" post[ #{ pid } ][secret] \" type= \" hidden \" value= \" 0 \" /> " ,
check_box ( " post[] " , " secret " )
)
2005-09-20 07:54:55 +00:00
assert_dom_equal (
2005-04-30 08:46:22 +00:00
" <input checked= \" checked \" id= \" post_ #{ pid } _title_hello_world \" name= \" post[ #{ pid } ][title] \" type= \" radio \" value= \" Hello World \" /> " ,
2005-01-24 15:35:30 +00:00
radio_button ( " post[] " , " title " , " Hello World " )
)
2005-09-20 07:54:55 +00:00
assert_dom_equal ( " <input id= \" post_ #{ pid } _title_goodbye_world \" name= \" post[ #{ pid } ][title] \" type= \" radio \" value= \" Goodbye World \" /> " ,
2005-01-24 15:35:30 +00:00
radio_button ( " post[] " , " title " , " Goodbye World " )
)
end
2005-11-13 11:13:11 +00:00
def test_form_for
_erbout = ''
2006-03-26 20:21:27 +00:00
form_for ( :post , @post , :html = > { :id = > 'create-post' } ) do | f |
2007-09-22 17:17:22 +00:00
_erbout . concat f . label ( :title )
2005-11-13 11:13:11 +00:00
_erbout . concat f . text_field ( :title )
_erbout . concat f . text_area ( :body )
_erbout . concat f . check_box ( :secret )
2007-02-04 19:07:08 +00:00
_erbout . concat f . submit ( 'Create post' )
2005-11-13 11:13:11 +00:00
end
expected =
2006-03-26 20:21:27 +00:00
" <form action='http://www.example.com' id='create-post' method='post'> " +
2007-09-22 17:17:22 +00:00
" <label for='post_title'>Title</label> " +
2005-11-13 11:13:11 +00:00
" <input name='post[title]' size='30' type='text' id='post_title' value='Hello World' /> " +
" <textarea name='post[body]' id='post_body' rows='20' cols='40'>Back to the hill and over it again!</textarea> " +
2006-05-28 01:04:27 +00:00
" <input name='post[secret]' checked='checked' type='checkbox' id='post_secret' value='1' /> " +
" <input name='post[secret]' type='hidden' value='0' /> " +
2007-01-29 20:42:46 +00:00
" <input name='commit' id='post_submit' type='submit' value='Create post' /> " +
2006-05-28 01:04:27 +00:00
" </form> "
assert_dom_equal expected , _erbout
end
def test_form_for_with_method
_erbout = ''
form_for ( :post , @post , :html = > { :id = > 'create-post' , :method = > :put } ) do | f |
_erbout . concat f . text_field ( :title )
_erbout . concat f . text_area ( :body )
_erbout . concat f . check_box ( :secret )
end
expected =
" <form action='http://www.example.com' id='create-post' method='post'> " +
2006-10-24 03:06:57 +00:00
" <div style='margin:0;padding:0'><input name='_method' type='hidden' value='put' /></div> " +
2006-05-28 01:04:27 +00:00
" <input name='post[title]' size='30' type='text' id='post_title' value='Hello World' /> " +
" <textarea name='post[body]' id='post_body' rows='20' cols='40'>Back to the hill and over it again!</textarea> " +
2005-11-13 11:13:11 +00:00
" <input name='post[secret]' checked='checked' type='checkbox' id='post_secret' value='1' /> " +
" <input name='post[secret]' type='hidden' value='0' /> " +
" </form> "
assert_dom_equal expected , _erbout
end
2006-03-26 19:45:56 +00:00
def test_form_for_without_object
_erbout = ''
2006-03-26 20:21:27 +00:00
form_for ( :post , :html = > { :id = > 'create-post' } ) do | f |
2006-03-26 19:45:56 +00:00
_erbout . concat f . text_field ( :title )
_erbout . concat f . text_area ( :body )
_erbout . concat f . check_box ( :secret )
end
expected =
2006-03-26 20:21:27 +00:00
" <form action='http://www.example.com' id='create-post' method='post'> " +
2006-03-26 19:45:56 +00:00
" <input name='post[title]' size='30' type='text' id='post_title' value='Hello World' /> " +
" <textarea name='post[body]' id='post_body' rows='20' cols='40'>Back to the hill and over it again!</textarea> " +
" <input name='post[secret]' checked='checked' type='checkbox' id='post_secret' value='1' /> " +
" <input name='post[secret]' type='hidden' value='0' /> " +
" </form> "
assert_dom_equal expected , _erbout
end
2007-06-13 01:20:55 +00:00
2006-07-18 15:42:22 +00:00
def test_form_for_with_index
_erbout = ''
form_for ( " post[] " , @post ) do | f |
2007-10-27 20:30:05 +00:00
_erbout . concat f . label ( :title )
2006-07-18 15:42:22 +00:00
_erbout . concat f . text_field ( :title )
_erbout . concat f . text_area ( :body )
_erbout . concat f . check_box ( :secret )
end
expected =
" <form action='http://www.example.com' method='post'> " +
2007-10-27 20:30:05 +00:00
" <label for= \" post_123_title \" >Title</label> " +
2007-01-17 00:04:02 +00:00
" <input name='post[123][title]' size='30' type='text' id='post_123_title' value='Hello World' /> " +
" <textarea name='post[123][body]' id='post_123_body' rows='20' cols='40'>Back to the hill and over it again!</textarea> " +
" <input name='post[123][secret]' checked='checked' type='checkbox' id='post_123_secret' value='1' /> " +
2006-07-18 15:42:22 +00:00
" <input name='post[123][secret]' type='hidden' value='0' /> " +
" </form> "
2007-01-17 00:04:02 +00:00
assert_dom_equal expected , _erbout
end
def test_nested_fields_for
_erbout = ''
form_for ( :post , @post ) do | f |
f . fields_for ( :comment , @post ) do | c |
_erbout . concat c . text_field ( :title )
end
end
expected = " <form action='http://www.example.com' method='post'> " +
" <input name='post[comment][title]' size='30' type='text' id='post_comment_title' value='Hello World' /> " +
" </form> "
assert_dom_equal expected , _erbout
2006-07-18 15:42:22 +00:00
end
2006-03-26 19:45:56 +00:00
2005-11-13 11:13:11 +00:00
def test_fields_for
_erbout = ''
2005-12-02 00:37:33 +00:00
fields_for ( :post , @post ) do | f |
2005-11-13 11:13:11 +00:00
_erbout . concat f . text_field ( :title )
_erbout . concat f . text_area ( :body )
_erbout . concat f . check_box ( :secret )
end
expected =
" <input name='post[title]' size='30' type='text' id='post_title' value='Hello World' /> " +
" <textarea name='post[body]' id='post_body' rows='20' cols='40'>Back to the hill and over it again!</textarea> " +
" <input name='post[secret]' checked='checked' type='checkbox' id='post_secret' value='1' /> " +
" <input name='post[secret]' type='hidden' value='0' /> "
assert_dom_equal expected , _erbout
end
2006-03-26 19:45:56 +00:00
def test_fields_for_without_object
_erbout = ''
fields_for ( :post ) do | f |
_erbout . concat f . text_field ( :title )
_erbout . concat f . text_area ( :body )
_erbout . concat f . check_box ( :secret )
end
expected =
" <input name='post[title]' size='30' type='text' id='post_title' value='Hello World' /> " +
" <textarea name='post[body]' id='post_body' rows='20' cols='40'>Back to the hill and over it again!</textarea> " +
" <input name='post[secret]' checked='checked' type='checkbox' id='post_secret' value='1' /> " +
2007-12-02 00:46:43 +00:00
" <input name='post[secret]' type='hidden' value='0' /> "
assert_dom_equal expected , _erbout
end
def test_fields_for_with_only_object
_erbout = ''
fields_for ( @post ) do | f |
_erbout . concat f . text_field ( :title )
_erbout . concat f . text_area ( :body )
_erbout . concat f . check_box ( :secret )
end
expected =
" <input name='post[title]' size='30' type='text' id='post_title' value='Hello World' /> " +
" <textarea name='post[body]' id='post_body' rows='20' cols='40'>Back to the hill and over it again!</textarea> " +
" <input name='post[secret]' checked='checked' type='checkbox' id='post_secret' value='1' /> " +
2006-03-26 19:45:56 +00:00
" <input name='post[secret]' type='hidden' value='0' /> "
assert_dom_equal expected , _erbout
end
2007-01-17 00:04:02 +00:00
def test_fields_for_object_with_bracketed_name
_erbout = ''
fields_for ( " author[post] " , @post ) do | f |
2007-10-27 20:30:05 +00:00
_erbout . concat f . label ( :title )
2007-01-17 00:04:02 +00:00
_erbout . concat f . text_field ( :title )
end
2007-10-27 20:30:05 +00:00
assert_dom_equal " <label for= \" author_post_title \" >Title</label> " +
" <input name='author[post][title]' size='30' type='text' id='author_post_title' value='Hello World' /> " ,
2007-01-17 00:04:02 +00:00
_erbout
end
2006-02-04 19:58:45 +00:00
def test_form_builder_does_not_have_form_for_method
assert ! ActionView :: Helpers :: FormBuilder . instance_methods . include? ( 'form_for' )
end
2007-06-13 01:20:55 +00:00
2005-11-13 11:13:11 +00:00
def test_form_for_and_fields_for
_erbout = ''
2006-03-26 20:21:27 +00:00
form_for ( :post , @post , :html = > { :id = > 'create-post' } ) do | post_form |
2005-11-13 11:13:11 +00:00
_erbout . concat post_form . text_field ( :title )
_erbout . concat post_form . text_area ( :body )
2005-12-02 00:37:33 +00:00
fields_for ( :parent_post , @post ) do | parent_fields |
2005-11-13 11:13:11 +00:00
_erbout . concat parent_fields . check_box ( :secret )
end
end
expected =
2006-03-26 20:21:27 +00:00
" <form action='http://www.example.com' id='create-post' method='post'> " +
2005-11-13 11:13:11 +00:00
" <input name='post[title]' size='30' type='text' id='post_title' value='Hello World' /> " +
" <textarea name='post[body]' id='post_body' rows='20' cols='40'>Back to the hill and over it again!</textarea> " +
" <input name='parent_post[secret]' checked='checked' type='checkbox' id='parent_post_secret' value='1' /> " +
" <input name='parent_post[secret]' type='hidden' value='0' /> " +
" </form> "
assert_dom_equal expected , _erbout
end
2007-06-13 01:20:55 +00:00
2007-12-02 01:10:50 +00:00
def test_form_for_and_fields_for_with_object
_erbout = ''
form_for ( :post , @post , :html = > { :id = > 'create-post' } ) do | post_form |
_erbout . concat post_form . text_field ( :title )
_erbout . concat post_form . text_area ( :body )
post_form . fields_for ( @comment ) do | comment_fields |
_erbout . concat comment_fields . text_field ( :name )
end
end
expected =
" <form action='http://www.example.com' id='create-post' method='post'> " +
" <input name='post[title]' size='30' type='text' id='post_title' value='Hello World' /> " +
" <textarea name='post[body]' id='post_body' rows='20' cols='40'>Back to the hill and over it again!</textarea> " +
" <input name='post[comment][name]' type='text' id='post_comment_name' value='new comment' size='30' /> " +
" </form> "
assert_dom_equal expected , _erbout
end
2006-02-11 23:29:53 +00:00
class LabelledFormBuilder < ActionView :: Helpers :: FormBuilder
2006-02-04 19:58:45 +00:00
( field_helpers - %w( hidden_field ) ) . each do | selector |
src = <<-END_SRC
def #{selector}(field, *args, &proc)
" <label for=' \# {field}'> \# {field.to_s.humanize}:</label> " + super + " <br/> "
end
END_SRC
class_eval src , __FILE__ , __LINE__
end
end
2007-06-13 01:20:55 +00:00
2006-02-04 19:58:45 +00:00
def test_form_for_with_labelled_builder
_erbout = ''
2006-02-11 23:29:53 +00:00
form_for ( :post , @post , :builder = > LabelledFormBuilder ) do | f |
2006-02-04 19:58:45 +00:00
_erbout . concat f . text_field ( :title )
_erbout . concat f . text_area ( :body )
_erbout . concat f . check_box ( :secret )
end
expected =
" <form action='http://www.example.com' method='post'> " +
" <label for='title'>Title:</label> <input name='post[title]' size='30' type='text' id='post_title' value='Hello World' /><br/> " +
" <label for='body'>Body:</label> <textarea name='post[body]' id='post_body' rows='20' cols='40'>Back to the hill and over it again!</textarea><br/> " +
" <label for='secret'>Secret:</label> <input name='post[secret]' checked='checked' type='checkbox' id='post_secret' value='1' /> " +
" <input name='post[secret]' type='hidden' value='0' /><br/> " +
" </form> "
assert_dom_equal expected , _erbout
end
2006-11-03 04:16:58 +00:00
def test_default_form_builder
old_default_form_builder , ActionView :: Base . default_form_builder =
ActionView :: Base . default_form_builder , LabelledFormBuilder
_erbout = ''
form_for ( :post , @post ) do | f |
_erbout . concat f . text_field ( :title )
_erbout . concat f . text_area ( :body )
_erbout . concat f . check_box ( :secret )
end
expected =
" <form action='http://www.example.com' method='post'> " +
" <label for='title'>Title:</label> <input name='post[title]' size='30' type='text' id='post_title' value='Hello World' /><br/> " +
" <label for='body'>Body:</label> <textarea name='post[body]' id='post_body' rows='20' cols='40'>Back to the hill and over it again!</textarea><br/> " +
" <label for='secret'>Secret:</label> <input name='post[secret]' checked='checked' type='checkbox' id='post_secret' value='1' /> " +
" <input name='post[secret]' type='hidden' value='0' /><br/> " +
" </form> "
assert_dom_equal expected , _erbout
ensure
ActionView :: Base . default_form_builder = old_default_form_builder
end
2007-06-13 01:20:55 +00:00
2007-01-26 03:38:23 +00:00
def test_default_form_builder_with_active_record_helpers
_erbout = ''
form_for ( :post , @post ) do | f |
_erbout . concat f . error_message_on ( 'author_name' )
_erbout . concat f . error_messages
end
expected = %( <form action='http://www.example.com' method='post'> ) +
%( <div class='formError'>can't be empty</div> ) +
%( <div class="errorExplanation" id="errorExplanation"><h2>1 error prohibited this post from being saved</h2><p>There were problems with the following fields:</p><ul><li>Author name can't be empty</li></ul></div> ) +
%( </form> )
assert_dom_equal expected , _erbout
end
2007-10-07 19:50:30 +00:00
def test_default_form_builder_no_instance_variable
post = @post
@post = nil
_erbout = ''
form_for ( :post , post ) do | f |
_erbout . concat f . error_message_on ( 'author_name' )
_erbout . concat f . error_messages
end
expected = %( <form action='http://www.example.com' method='post'> ) +
%( <div class='formError'>can't be empty</div> ) +
%( <div class="errorExplanation" id="errorExplanation"><h2>1 error prohibited this post from being saved</h2><p>There were problems with the following fields:</p><ul><li>Author name can't be empty</li></ul></div> ) +
%( </form> )
assert_dom_equal expected , _erbout
end
2006-11-03 04:16:58 +00:00
2006-02-04 19:58:45 +00:00
# Perhaps this test should be moved to prototype helper tests.
def test_remote_form_for_with_labelled_builder
self . extend ActionView :: Helpers :: PrototypeHelper
_erbout = ''
2006-02-11 23:29:53 +00:00
remote_form_for ( :post , @post , :builder = > LabelledFormBuilder ) do | f |
2006-02-04 19:58:45 +00:00
_erbout . concat f . text_field ( :title )
_erbout . concat f . text_area ( :body )
_erbout . concat f . check_box ( :secret )
end
expected =
2006-02-06 05:06:36 +00:00
%( <form action="http://www.example.com" onsubmit="new Ajax.Request ( 'http://www.example.com', {asynchronous:true, evalScripts:true, parameters:Form.serialize ( this ) } ) ; return false;" method="post"> ) +
2006-02-04 19:58:45 +00:00
" <label for='title'>Title:</label> <input name='post[title]' size='30' type='text' id='post_title' value='Hello World' /><br/> " +
" <label for='body'>Body:</label> <textarea name='post[body]' id='post_body' rows='20' cols='40'>Back to the hill and over it again!</textarea><br/> " +
" <label for='secret'>Secret:</label> <input name='post[secret]' checked='checked' type='checkbox' id='post_secret' value='1' /> " +
" <input name='post[secret]' type='hidden' value='0' /><br/> " +
" </form> "
assert_dom_equal expected , _erbout
end
def test_fields_for_with_labelled_builder
_erbout = ''
2006-02-11 23:29:53 +00:00
fields_for ( :post , @post , :builder = > LabelledFormBuilder ) do | f |
2006-02-04 19:58:45 +00:00
_erbout . concat f . text_field ( :title )
_erbout . concat f . text_area ( :body )
_erbout . concat f . check_box ( :secret )
end
2006-02-11 23:29:53 +00:00
2006-02-04 19:58:45 +00:00
expected =
" <label for='title'>Title:</label> <input name='post[title]' size='30' type='text' id='post_title' value='Hello World' /><br/> " +
" <label for='body'>Body:</label> <textarea name='post[body]' id='post_body' rows='20' cols='40'>Back to the hill and over it again!</textarea><br/> " +
" <label for='secret'>Secret:</label> <input name='post[secret]' checked='checked' type='checkbox' id='post_secret' value='1' /> " +
" <input name='post[secret]' type='hidden' value='0' /><br/> "
2006-02-11 23:29:53 +00:00
2006-02-04 19:58:45 +00:00
assert_dom_equal expected , _erbout
end
2007-06-13 01:20:55 +00:00
2006-02-08 20:46:15 +00:00
def test_form_for_with_html_options_adds_options_to_form_tag
_erbout = ''
form_for ( :post , @post , :html = > { :id = > 'some_form' , :class = > 'some_class' } ) do | f | end
expected = " <form action= \" http://www.example.com \" class= \" some_class \" id= \" some_form \" method= \" post \" ></form> "
assert_dom_equal expected , _erbout
end
2007-06-13 01:20:55 +00:00
2006-02-26 07:23:42 +00:00
def test_form_for_with_string_url_option
_erbout = ''
form_for ( :post , @post , :url = > 'http://www.otherdomain.com' ) do | f | end
2007-05-12 21:12:31 +00:00
assert_equal '<form action="http://www.otherdomain.com" method="post"></form>' , _erbout
2006-02-26 07:23:42 +00:00
end
def test_form_for_with_hash_url_option
_erbout = ''
form_for ( :post , @post , :url = > { :controller = > 'controller' , :action = > 'action' } ) do | f | end
assert_equal 'controller' , @controller . url_for_options [ :controller ]
assert_equal 'action' , @controller . url_for_options [ :action ]
end
2007-06-13 01:20:55 +00:00
2007-05-12 21:12:31 +00:00
def test_form_for_with_record_url_option
_erbout = ''
form_for ( :post , @post , :url = > @post ) do | f | end
expected = " <form action= \" /posts/123 \" method= \" post \" ></form> "
2007-05-14 17:30:35 +00:00
assert_equal expected , _erbout
end
def test_form_for_with_existing_object
_erbout = ''
form_for ( @post ) do | f | end
expected = " <form action= \" /posts/123 \" class= \" edit_post \" id= \" edit_post_123 \" method= \" post \" ><div style= \" margin:0;padding:0 \" ><input name= \" _method \" type= \" hidden \" value= \" put \" /></div></form> "
assert_equal expected , _erbout
end
def test_form_for_with_new_object
_erbout = ''
post = Post . new
post . new_record = true
def post . id ( ) nil end
form_for ( post ) do | f | end
expected = " <form action= \" /posts \" class= \" new_post \" id= \" new_post \" method= \" post \" ></form> "
assert_equal expected , _erbout
end
2007-06-05 19:10:59 +00:00
def test_form_for_with_existing_object_in_list
@post . new_record = false
@comment . save
_erbout = ''
form_for ( [ @post , @comment ] ) { }
expected = %( <form action=" #{ comment_path ( @post , @comment ) } " class="edit_comment" id="edit_comment_1" method="post"><div style="margin:0;padding:0"><input name="_method" type="hidden" value="put" /></div></form> )
assert_dom_equal expected , _erbout
end
def test_form_for_with_new_object_in_list
@post . new_record = false
_erbout = ''
form_for ( [ @post , @comment ] ) { }
expected = %( <form action=" #{ comments_path ( @post ) } " class="new_comment" id="new_comment" method="post"></form> )
assert_dom_equal expected , _erbout
end
2007-07-19 13:42:11 +00:00
def test_form_for_with_existing_object_and_namespace_in_list
@post . new_record = false
@comment . save
_erbout = ''
form_for ( [ :admin , @post , @comment ] ) { }
expected = %( <form action=" #{ admin_comment_path ( @post , @comment ) } " class="edit_comment" id="edit_comment_1" method="post"><div style="margin:0;padding:0"><input name="_method" type="hidden" value="put" /></div></form> )
assert_dom_equal expected , _erbout
end
def test_form_for_with_new_object_and_namespace_in_list
@post . new_record = false
_erbout = ''
form_for ( [ :admin , @post , @comment ] ) { }
expected = %( <form action=" #{ admin_comments_path ( @post ) } " class="new_comment" id="new_comment" method="post"></form> )
assert_dom_equal expected , _erbout
end
2007-05-14 17:30:35 +00:00
def test_form_for_with_existing_object_and_custom_url
_erbout = ''
form_for ( @post , :url = > " /super_posts " ) do | f | end
expected = " <form action= \" /super_posts \" class= \" edit_post \" id= \" edit_post_123 \" method= \" post \" ><div style= \" margin:0;padding:0 \" ><input name= \" _method \" type= \" hidden \" value= \" put \" /></div></form> "
assert_equal expected , _erbout
2007-05-12 21:12:31 +00:00
end
2007-06-13 01:20:55 +00:00
2006-02-08 20:46:15 +00:00
def test_remote_form_for_with_html_options_adds_options_to_form_tag
self . extend ActionView :: Helpers :: PrototypeHelper
_erbout = ''
remote_form_for ( :post , @post , :html = > { :id = > 'some_form' , :class = > 'some_class' } ) do | f | end
expected = " <form action= \" http://www.example.com \" class= \" some_class \" id= \" some_form \" method= \" post \" onsubmit= \" new Ajax.Request('http://www.example.com', {asynchronous:true, evalScripts:true, parameters:Form.serialize(this)}); return false; \" ></form> "
assert_dom_equal expected , _erbout
end
2007-05-12 21:12:31 +00:00
protected
2007-06-05 19:10:59 +00:00
def comments_path ( post )
" /posts/ #{ post . id } /comments "
end
2007-06-07 21:35:01 +00:00
alias_method :post_comments_path , :comments_path
2007-06-05 19:10:59 +00:00
def comment_path ( post , comment )
" /posts/ #{ post . id } /comments/ #{ comment . id } "
end
2007-06-07 21:35:01 +00:00
alias_method :post_comment_path , :comment_path
2007-07-19 13:42:11 +00:00
def admin_comments_path ( post )
" /admin/posts/ #{ post . id } /comments "
end
alias_method :admin_post_comments_path , :admin_comments_path
def admin_comment_path ( post , comment )
" /admin/posts/ #{ post . id } /comments/ #{ comment . id } "
end
alias_method :admin_post_comment_path , :admin_comment_path
2007-06-07 21:35:01 +00:00
def posts_path
" /posts "
end
def post_path ( post )
" /posts/ #{ post . id } "
2007-05-12 21:12:31 +00:00
end
2007-09-28 15:55:45 +00:00
def protect_against_forgery?
false
2007-09-23 02:32:55 +00:00
end
2007-05-18 00:36:14 +00:00
end