Merge branch 'issue-720'

This commit is contained in:
Rafael Mendonça França 2013-01-02 10:30:44 -03:00
commit 5ae7ffbb26
2 changed files with 78 additions and 68 deletions

View File

@ -194,7 +194,7 @@ module SimpleForm
# end # end
def simple_fields_for(*args, &block) def simple_fields_for(*args, &block)
options = args.extract_options! options = args.extract_options!
options[:wrapper] ||= self.options[:wrapper] options[:wrapper] = self.options[:wrapper] if options[:wrapper].nil?
options[:defaults] ||= self.options[:defaults] options[:defaults] ||= self.options[:defaults]
if self.class < ActionView::Helpers::FormBuilder if self.class < ActionView::Helpers::FormBuilder

View File

@ -21,34 +21,34 @@ class BuilderTest < ActionView::TestCase
end end
# COLLECTION RADIO # COLLECTION RADIO
test 'collection radio accepts a collection and generate inputs from value method' do test "collection radio accepts a collection and generate inputs from value method" do
with_collection_radio_buttons @user, :active, [true, false], :to_s, :to_s with_collection_radio_buttons @user, :active, [true, false], :to_s, :to_s
assert_select 'form input[type=radio][value=true]#user_active_true' assert_select 'form input[type=radio][value=true]#user_active_true'
assert_select 'form input[type=radio][value=false]#user_active_false' assert_select 'form input[type=radio][value=false]#user_active_false'
end end
test 'collection radio accepts a collection and generate inputs from label method' do test "collection radio accepts a collection and generate inputs from label method" do
with_collection_radio_buttons @user, :active, [true, false], :to_s, :to_s with_collection_radio_buttons @user, :active, [true, false], :to_s, :to_s
assert_select 'form label.collection_radio_buttons[for=user_active_true]', 'true' assert_select 'form label.collection_radio_buttons[for=user_active_true]', 'true'
assert_select 'form label.collection_radio_buttons[for=user_active_false]', 'false' assert_select 'form label.collection_radio_buttons[for=user_active_false]', 'false'
end end
test 'collection radio handles camelized collection values for labels correctly' do test "collection radio handles camelized collection values for labels correctly" do
with_collection_radio_buttons @user, :active, ['Yes', 'No'], :to_s, :to_s with_collection_radio_buttons @user, :active, ['Yes', 'No'], :to_s, :to_s
assert_select 'form label.collection_radio_buttons[for=user_active_yes]', 'Yes' assert_select 'form label.collection_radio_buttons[for=user_active_yes]', 'Yes'
assert_select 'form label.collection_radio_buttons[for=user_active_no]', 'No' assert_select 'form label.collection_radio_buttons[for=user_active_no]', 'No'
end end
test 'collection radio should sanitize collection values for labels correctly' do test "collection radio should sanitize collection values for labels correctly" do
with_collection_radio_buttons @user, :name, ['$0.99', '$1.99'], :to_s, :to_s with_collection_radio_buttons @user, :name, ['$0.99', '$1.99'], :to_s, :to_s
assert_select 'label.collection_radio_buttons[for=user_name_099]', '$0.99' assert_select 'label.collection_radio_buttons[for=user_name_099]', '$0.99'
assert_select 'label.collection_radio_buttons[for=user_name_199]', '$1.99' assert_select 'label.collection_radio_buttons[for=user_name_199]', '$1.99'
end end
test 'collection radio checks the correct value to local variables' do test "collection radio checks the correct value to local variables" do
user = User.new user = User.new
user.active = false user.active = false
with_collection_radio_buttons user, :active, [true, false], :to_s, :to_s with_collection_radio_buttons user, :active, [true, false], :to_s, :to_s
@ -57,20 +57,20 @@ class BuilderTest < ActionView::TestCase
assert_select 'form input[type=radio][value=false][checked=checked]' assert_select 'form input[type=radio][value=false][checked=checked]'
end end
test 'collection radio accepts checked item' do test "collection radio accepts checked item" do
with_collection_radio_buttons @user, :active, [[1, true], [0, false]], :last, :first, :checked => true with_collection_radio_buttons @user, :active, [[1, true], [0, false]], :last, :first, :checked => true
assert_select 'form input[type=radio][value=true][checked=checked]' assert_select 'form input[type=radio][value=true][checked=checked]'
assert_no_select 'form input[type=radio][value=false][checked=checked]' assert_no_select 'form input[type=radio][value=false][checked=checked]'
end end
test 'collection radio accepts checked item which has a value of false' do test "collection radio accepts checked item which has a value of false" do
with_collection_radio_buttons @user, :active, [[1, true], [0, false]], :last, :first, :checked => false with_collection_radio_buttons @user, :active, [[1, true], [0, false]], :last, :first, :checked => false
assert_no_select 'form input[type=radio][value=true][checked=checked]' assert_no_select 'form input[type=radio][value=true][checked=checked]'
assert_select 'form input[type=radio][value=false][checked=checked]' assert_select 'form input[type=radio][value=false][checked=checked]'
end end
test 'collection radio accepts multiple disabled items' do test "collection radio accepts multiple disabled items" do
collection = [[1, true], [0, false], [2, 'other']] collection = [[1, true], [0, false], [2, 'other']]
with_collection_radio_buttons @user, :active, collection, :last, :first, :disabled => [true, false] with_collection_radio_buttons @user, :active, collection, :last, :first, :disabled => [true, false]
@ -79,7 +79,7 @@ class BuilderTest < ActionView::TestCase
assert_no_select 'form input[type=radio][value=other][disabled=disabled]' assert_no_select 'form input[type=radio][value=other][disabled=disabled]'
end end
test 'collection radio accepts single disable item' do test "collection radio accepts single disable item" do
collection = [[1, true], [0, false]] collection = [[1, true], [0, false]]
with_collection_radio_buttons @user, :active, collection, :last, :first, :disabled => true with_collection_radio_buttons @user, :active, collection, :last, :first, :disabled => true
@ -87,7 +87,7 @@ class BuilderTest < ActionView::TestCase
assert_no_select 'form input[type=radio][value=false][disabled=disabled]' assert_no_select 'form input[type=radio][value=false][disabled=disabled]'
end end
test 'collection radio accepts html options as input' do test "collection radio accepts html options as input" do
collection = [[1, true], [0, false]] collection = [[1, true], [0, false]]
with_collection_radio_buttons @user, :active, collection, :last, :first, {}, :class => 'special-radio' with_collection_radio_buttons @user, :active, collection, :last, :first, {}, :class => 'special-radio'
@ -95,34 +95,34 @@ class BuilderTest < ActionView::TestCase
assert_select 'form input[type=radio][value=false].special-radio#user_active_false' assert_select 'form input[type=radio][value=false].special-radio#user_active_false'
end end
test 'collection radio wraps the collection in the given collection wrapper tag' do test "collection radio wraps the collection in the given collection wrapper tag" do
with_collection_radio_buttons @user, :active, [true, false], :to_s, :to_s, :collection_wrapper_tag => :ul with_collection_radio_buttons @user, :active, [true, false], :to_s, :to_s, :collection_wrapper_tag => :ul
assert_select 'form ul input[type=radio]', :count => 2 assert_select 'form ul input[type=radio]', :count => 2
end end
test 'collection radio does not render any wrapper tag by default' do test "collection radio does not render any wrapper tag by default" do
with_collection_radio_buttons @user, :active, [true, false], :to_s, :to_s with_collection_radio_buttons @user, :active, [true, false], :to_s, :to_s
assert_select 'form input[type=radio]', :count => 2 assert_select 'form input[type=radio]', :count => 2
assert_no_select 'form ul' assert_no_select 'form ul'
end end
test 'collection radio does not wrap the collection when given falsy values' do test "collection radio does not wrap the collection when given falsy values" do
with_collection_radio_buttons @user, :active, [true, false], :to_s, :to_s, :collection_wrapper_tag => false with_collection_radio_buttons @user, :active, [true, false], :to_s, :to_s, :collection_wrapper_tag => false
assert_select 'form input[type=radio]', :count => 2 assert_select 'form input[type=radio]', :count => 2
assert_no_select 'form ul' assert_no_select 'form ul'
end end
test 'collection radio uses the given class for collection wrapper tag' do test "collection radio uses the given class for collection wrapper tag" do
with_collection_radio_buttons @user, :active, [true, false], :to_s, :to_s, with_collection_radio_buttons @user, :active, [true, false], :to_s, :to_s,
:collection_wrapper_tag => :ul, :collection_wrapper_class => "items-list" :collection_wrapper_tag => :ul, :collection_wrapper_class => "items-list"
assert_select 'form ul.items-list input[type=radio]', :count => 2 assert_select 'form ul.items-list input[type=radio]', :count => 2
end end
test 'collection radio uses no class for collection wrapper tag when no wrapper tag is given' do test "collection radio uses no class for collection wrapper tag when no wrapper tag is given" do
with_collection_radio_buttons @user, :active, [true, false], :to_s, :to_s, with_collection_radio_buttons @user, :active, [true, false], :to_s, :to_s,
:collection_wrapper_class => "items-list" :collection_wrapper_class => "items-list"
@ -131,41 +131,41 @@ class BuilderTest < ActionView::TestCase
assert_no_select '.items-list' assert_no_select '.items-list'
end end
test 'collection radio uses no class for collection wrapper tag by default' do test "collection radio uses no class for collection wrapper tag by default" do
with_collection_radio_buttons @user, :active, [true, false], :to_s, :to_s, :collection_wrapper_tag => :ul with_collection_radio_buttons @user, :active, [true, false], :to_s, :to_s, :collection_wrapper_tag => :ul
assert_select 'form ul' assert_select 'form ul'
assert_no_select 'form ul[class]' assert_no_select 'form ul[class]'
end end
test 'collection radio wrap items in a span tag by default' do test "collection radio wrap items in a span tag by default" do
with_collection_radio_buttons @user, :active, [true, false], :to_s, :to_s with_collection_radio_buttons @user, :active, [true, false], :to_s, :to_s
assert_select 'form span input[type=radio][value=true]#user_active_true + label' assert_select 'form span input[type=radio][value=true]#user_active_true + label'
assert_select 'form span input[type=radio][value=false]#user_active_false + label' assert_select 'form span input[type=radio][value=false]#user_active_false + label'
end end
test 'collection radio wraps each item in the given item wrapper tag' do test "collection radio wraps each item in the given item wrapper tag" do
with_collection_radio_buttons @user, :active, [true, false], :to_s, :to_s, :item_wrapper_tag => :li with_collection_radio_buttons @user, :active, [true, false], :to_s, :to_s, :item_wrapper_tag => :li
assert_select 'form li input[type=radio]', :count => 2 assert_select 'form li input[type=radio]', :count => 2
end end
test 'collection radio does not wrap each item when given explicitly falsy value' do test "collection radio does not wrap each item when given explicitly falsy value" do
with_collection_radio_buttons @user, :active, [true, false], :to_s, :to_s, :item_wrapper_tag => false with_collection_radio_buttons @user, :active, [true, false], :to_s, :to_s, :item_wrapper_tag => false
assert_select 'form input[type=radio]' assert_select 'form input[type=radio]'
assert_no_select 'form span input[type=radio]' assert_no_select 'form span input[type=radio]'
end end
test 'collection radio uses the given class for item wrapper tag' do test "collection radio uses the given class for item wrapper tag" do
with_collection_radio_buttons @user, :active, [true, false], :to_s, :to_s, with_collection_radio_buttons @user, :active, [true, false], :to_s, :to_s,
:item_wrapper_tag => :li, :item_wrapper_class => "inline" :item_wrapper_tag => :li, :item_wrapper_class => "inline"
assert_select "form li.inline input[type=radio]", :count => 2 assert_select "form li.inline input[type=radio]", :count => 2
end end
test 'collection radio uses no class for item wrapper tag when no wrapper tag is given' do test "collection radio uses no class for item wrapper tag when no wrapper tag is given" do
with_collection_radio_buttons @user, :active, [true, false], :to_s, :to_s, with_collection_radio_buttons @user, :active, [true, false], :to_s, :to_s,
:item_wrapper_tag => nil, :item_wrapper_class => "inline" :item_wrapper_tag => nil, :item_wrapper_class => "inline"
@ -174,7 +174,7 @@ class BuilderTest < ActionView::TestCase
assert_no_select '.inline' assert_no_select '.inline'
end end
test 'collection radio uses no class for item wrapper tag by default' do test "collection radio uses no class for item wrapper tag by default" do
with_collection_radio_buttons @user, :active, [true, false], :to_s, :to_s, with_collection_radio_buttons @user, :active, [true, false], :to_s, :to_s,
:item_wrapper_tag => :li :item_wrapper_tag => :li
@ -182,14 +182,14 @@ class BuilderTest < ActionView::TestCase
assert_no_select "form li[class]" assert_no_select "form li[class]"
end end
test 'collection radio does not wrap input inside the label' do test "collection radio does not wrap input inside the label" do
with_collection_radio_buttons @user, :active, [true, false], :to_s, :to_s with_collection_radio_buttons @user, :active, [true, false], :to_s, :to_s
assert_select 'form input[type=radio] + label' assert_select 'form input[type=radio] + label'
assert_no_select 'form label input' assert_no_select 'form label input'
end end
test 'collection radio accepts a block to render the label as radio button wrapper' do test "collection radio accepts a block to render the label as radio button wrapper" do
with_collection_radio_buttons :user, :active, [true, false], :to_s, :to_s do |b| with_collection_radio_buttons :user, :active, [true, false], :to_s, :to_s do |b|
b.label { b.radio_button } b.label { b.radio_button }
end end
@ -198,7 +198,7 @@ class BuilderTest < ActionView::TestCase
assert_select 'label[for=user_active_false] > input#user_active_false[type=radio]' assert_select 'label[for=user_active_false] > input#user_active_false[type=radio]'
end end
test 'collection radio accepts a block to change the order of label and radio button' do test "collection radio accepts a block to change the order of label and radio button" do
with_collection_radio_buttons :user, :active, [true, false], :to_s, :to_s do |b| with_collection_radio_buttons :user, :active, [true, false], :to_s, :to_s do |b|
b.label + b.radio_button b.label + b.radio_button
end end
@ -207,7 +207,7 @@ class BuilderTest < ActionView::TestCase
assert_select 'label[for=user_active_false] + input#user_active_false[type=radio]' assert_select 'label[for=user_active_false] + input#user_active_false[type=radio]'
end end
test 'collection radio with block helpers accept extra html options' do test "collection radio with block helpers accept extra html options" do
with_collection_radio_buttons :user, :active, [true, false], :to_s, :to_s do |b| with_collection_radio_buttons :user, :active, [true, false], :to_s, :to_s do |b|
b.label(:class => "radio_button") + b.radio_button(:class => "radio_button") b.label(:class => "radio_button") + b.radio_button(:class => "radio_button")
end end
@ -216,7 +216,7 @@ class BuilderTest < ActionView::TestCase
assert_select 'label.radio_button[for=user_active_false] + input#user_active_false.radio_button[type=radio]' assert_select 'label.radio_button[for=user_active_false] + input#user_active_false.radio_button[type=radio]'
end end
test 'collection radio with block helpers allows access to current text and value' do test "collection radio with block helpers allows access to current text and value" do
with_collection_radio_buttons :user, :active, [true, false], :to_s, :to_s do |b| with_collection_radio_buttons :user, :active, [true, false], :to_s, :to_s do |b|
b.label(:"data-value" => b.value) { b.radio_button + b.text } b.label(:"data-value" => b.value) { b.radio_button + b.text }
end end
@ -229,7 +229,7 @@ class BuilderTest < ActionView::TestCase
end end
end end
test 'collection radio with block helpers allows access to the current object item in the collection to access extra properties' do test "collection radio with block helpers allows access to the current object item in the collection to access extra properties" do
with_collection_radio_buttons :user, :active, [true, false], :to_s, :to_s do |b| with_collection_radio_buttons :user, :active, [true, false], :to_s, :to_s do |b|
b.label(:class => b.object) { b.radio_button + b.text } b.label(:class => b.object) { b.radio_button + b.text }
end end
@ -242,7 +242,7 @@ class BuilderTest < ActionView::TestCase
end end
end end
test 'collection_radio helper is deprecated in favor of collection_radio_buttons' do test "collection_radio helper is deprecated in favor of collection_radio_buttons" do
assert_deprecated "[SIMPLE_FORM] The `collection_radio` helper is deprecated, " \ assert_deprecated "[SIMPLE_FORM] The `collection_radio` helper is deprecated, " \
"please use `collection_radio_buttons` instead" do "please use `collection_radio_buttons` instead" do
with_concat_form_for(@user) do |f| with_concat_form_for(@user) do |f|
@ -255,7 +255,7 @@ class BuilderTest < ActionView::TestCase
end end
# COLLECTION CHECK BOX # COLLECTION CHECK BOX
test 'collection check box accepts a collection and generate a serie of checkboxes for value method' do test "collection check box accepts a collection and generate a serie of checkboxes for value method" do
collection = [Tag.new(1, 'Tag 1'), Tag.new(2, 'Tag 2')] collection = [Tag.new(1, 'Tag 1'), Tag.new(2, 'Tag 2')]
with_collection_check_boxes @user, :tag_ids, collection, :id, :name with_collection_check_boxes @user, :tag_ids, collection, :id, :name
@ -263,14 +263,14 @@ class BuilderTest < ActionView::TestCase
assert_select 'form input#user_tag_ids_2[type=checkbox][value=2]' assert_select 'form input#user_tag_ids_2[type=checkbox][value=2]'
end end
test 'collection check box generates only one hidden field for the entire collection, to ensure something will be sent back to the server when posting an empty collection' do test "collection check box generates only one hidden field for the entire collection, to ensure something will be sent back to the server when posting an empty collection" do
collection = [Tag.new(1, 'Tag 1'), Tag.new(2, 'Tag 2')] collection = [Tag.new(1, 'Tag 1'), Tag.new(2, 'Tag 2')]
with_collection_check_boxes @user, :tag_ids, collection, :id, :name with_collection_check_boxes @user, :tag_ids, collection, :id, :name
assert_select "form input[type=hidden][name='user[tag_ids][]'][value=]", :count => 1 assert_select "form input[type=hidden][name='user[tag_ids][]'][value=]", :count => 1
end end
test 'collection check box accepts a collection and generate a serie of checkboxes with labels for label method' do test "collection check box accepts a collection and generate a serie of checkboxes with labels for label method" do
collection = [Tag.new(1, 'Tag 1'), Tag.new(2, 'Tag 2')] collection = [Tag.new(1, 'Tag 1'), Tag.new(2, 'Tag 2')]
with_collection_check_boxes @user, :tag_ids, collection, :id, :name with_collection_check_boxes @user, :tag_ids, collection, :id, :name
@ -278,20 +278,20 @@ class BuilderTest < ActionView::TestCase
assert_select 'form label.collection_check_boxes[for=user_tag_ids_2]', 'Tag 2' assert_select 'form label.collection_check_boxes[for=user_tag_ids_2]', 'Tag 2'
end end
test 'collection check box handles camelized collection values for labels correctly' do test "collection check box handles camelized collection values for labels correctly" do
with_collection_check_boxes @user, :active, ['Yes', 'No'], :to_s, :to_s with_collection_check_boxes @user, :active, ['Yes', 'No'], :to_s, :to_s
assert_select 'form label.collection_check_boxes[for=user_active_yes]', 'Yes' assert_select 'form label.collection_check_boxes[for=user_active_yes]', 'Yes'
assert_select 'form label.collection_check_boxes[for=user_active_no]', 'No' assert_select 'form label.collection_check_boxes[for=user_active_no]', 'No'
end end
test 'collection check box should sanitize collection values for labels correctly' do test "collection check box should sanitize collection values for labels correctly" do
with_collection_check_boxes @user, :name, ['$0.99', '$1.99'], :to_s, :to_s with_collection_check_boxes @user, :name, ['$0.99', '$1.99'], :to_s, :to_s
assert_select 'label.collection_check_boxes[for=user_name_099]', '$0.99' assert_select 'label.collection_check_boxes[for=user_name_099]', '$0.99'
assert_select 'label.collection_check_boxes[for=user_name_199]', '$1.99' assert_select 'label.collection_check_boxes[for=user_name_199]', '$1.99'
end end
test 'collection check box checks the correct value to local variables' do test "collection check box checks the correct value to local variables" do
user = User.new user = User.new
user.tag_ids = [1, 3] user.tag_ids = [1, 3]
collection = (1..3).map{|i| [i, "Tag #{i}"] } collection = (1..3).map{|i| [i, "Tag #{i}"] }
@ -302,7 +302,7 @@ class BuilderTest < ActionView::TestCase
assert_no_select 'form input[type=checkbox][value=2][checked=checked]' assert_no_select 'form input[type=checkbox][value=2][checked=checked]'
end end
test 'collection check box accepts selected values as :checked option' do test "collection check box accepts selected values as :checked option" do
collection = (1..3).map{|i| [i, "Tag #{i}"] } collection = (1..3).map{|i| [i, "Tag #{i}"] }
with_collection_check_boxes @user, :tag_ids, collection, :first, :last, :checked => [1, 3] with_collection_check_boxes @user, :tag_ids, collection, :first, :last, :checked => [1, 3]
@ -311,7 +311,7 @@ class BuilderTest < ActionView::TestCase
assert_no_select 'form input[type=checkbox][value=2][checked=checked]' assert_no_select 'form input[type=checkbox][value=2][checked=checked]'
end end
test 'collection check boxes accepts selected string values as :checked option' do test "collection check boxes accepts selected string values as :checked option" do
collection = (1..3).map{|i| [i, "Category #{i}"] } collection = (1..3).map{|i| [i, "Category #{i}"] }
with_collection_check_boxes :user, :category_ids, collection, :first, :last, :checked => ['1', '3'] with_collection_check_boxes :user, :category_ids, collection, :first, :last, :checked => ['1', '3']
@ -320,7 +320,7 @@ class BuilderTest < ActionView::TestCase
assert_no_select 'input[type=checkbox][value=2][checked=checked]' assert_no_select 'input[type=checkbox][value=2][checked=checked]'
end end
test 'collection check box accepts a single checked value' do test "collection check box accepts a single checked value" do
collection = (1..3).map{|i| [i, "Tag #{i}"] } collection = (1..3).map{|i| [i, "Tag #{i}"] }
with_collection_check_boxes @user, :tag_ids, collection, :first, :last, :checked => 3 with_collection_check_boxes @user, :tag_ids, collection, :first, :last, :checked => 3
@ -329,7 +329,7 @@ class BuilderTest < ActionView::TestCase
assert_no_select 'form input[type=checkbox][value=2][checked=checked]' assert_no_select 'form input[type=checkbox][value=2][checked=checked]'
end end
test 'collection check box accepts selected values as :checked option and override the model values' do test "collection check box accepts selected values as :checked option and override the model values" do
collection = (1..3).map{|i| [i, "Tag #{i}"] } collection = (1..3).map{|i| [i, "Tag #{i}"] }
@user.tag_ids = [2] @user.tag_ids = [2]
with_collection_check_boxes @user, :tag_ids, collection, :first, :last, :checked => [1, 3] with_collection_check_boxes @user, :tag_ids, collection, :first, :last, :checked => [1, 3]
@ -339,7 +339,7 @@ class BuilderTest < ActionView::TestCase
assert_no_select 'form input[type=checkbox][value=2][checked=checked]' assert_no_select 'form input[type=checkbox][value=2][checked=checked]'
end end
test 'collection check box accepts multiple disabled items' do test "collection check box accepts multiple disabled items" do
collection = (1..3).map{|i| [i, "Tag #{i}"] } collection = (1..3).map{|i| [i, "Tag #{i}"] }
with_collection_check_boxes @user, :tag_ids, collection, :first, :last, :disabled => [1, 3] with_collection_check_boxes @user, :tag_ids, collection, :first, :last, :disabled => [1, 3]
@ -348,7 +348,7 @@ class BuilderTest < ActionView::TestCase
assert_no_select 'form input[type=checkbox][value=2][disabled=disabled]' assert_no_select 'form input[type=checkbox][value=2][disabled=disabled]'
end end
test 'collection check box accepts single disable item' do test "collection check box accepts single disable item" do
collection = (1..3).map{|i| [i, "Tag #{i}"] } collection = (1..3).map{|i| [i, "Tag #{i}"] }
with_collection_check_boxes @user, :tag_ids, collection, :first, :last, :disabled => 1 with_collection_check_boxes @user, :tag_ids, collection, :first, :last, :disabled => 1
@ -357,7 +357,7 @@ class BuilderTest < ActionView::TestCase
assert_no_select 'form input[type=checkbox][value=2][disabled=disabled]' assert_no_select 'form input[type=checkbox][value=2][disabled=disabled]'
end end
test 'collection check box accepts a proc to disabled items' do test "collection check box accepts a proc to disabled items" do
collection = (1..3).map{|i| [i, "Tag #{i}"] } collection = (1..3).map{|i| [i, "Tag #{i}"] }
with_collection_check_boxes @user, :tag_ids, collection, :first, :last, :disabled => proc { |i| i.first == 1 } with_collection_check_boxes @user, :tag_ids, collection, :first, :last, :disabled => proc { |i| i.first == 1 }
@ -366,7 +366,7 @@ class BuilderTest < ActionView::TestCase
assert_no_select 'form input[type=checkbox][value=2][disabled=disabled]' assert_no_select 'form input[type=checkbox][value=2][disabled=disabled]'
end end
test 'collection check box accepts html options' do test "collection check box accepts html options" do
collection = [[1, 'Tag 1'], [2, 'Tag 2']] collection = [[1, 'Tag 1'], [2, 'Tag 2']]
with_collection_check_boxes @user, :tag_ids, collection, :first, :last, {}, :class => 'check' with_collection_check_boxes @user, :tag_ids, collection, :first, :last, {}, :class => 'check'
@ -374,7 +374,7 @@ class BuilderTest < ActionView::TestCase
assert_select 'form input.check[type=checkbox][value=2]' assert_select 'form input.check[type=checkbox][value=2]'
end end
test 'collection check box with fields for' do test "collection check box with fields for" do
collection = [Tag.new(1, 'Tag 1'), Tag.new(2, 'Tag 2')] collection = [Tag.new(1, 'Tag 1'), Tag.new(2, 'Tag 2')]
with_concat_form_for(@user) do |f| with_concat_form_for(@user) do |f|
f.fields_for(:post) do |p| f.fields_for(:post) do |p|
@ -389,34 +389,34 @@ class BuilderTest < ActionView::TestCase
assert_select 'form label.collection_check_boxes[for=user_post_tag_ids_2]', 'Tag 2' assert_select 'form label.collection_check_boxes[for=user_post_tag_ids_2]', 'Tag 2'
end end
test 'collection check boxes wraps the collection in the given collection wrapper tag' do test "collection check boxes wraps the collection in the given collection wrapper tag" do
with_collection_check_boxes @user, :active, [true, false], :to_s, :to_s, :collection_wrapper_tag => :ul with_collection_check_boxes @user, :active, [true, false], :to_s, :to_s, :collection_wrapper_tag => :ul
assert_select 'form ul input[type=checkbox]', :count => 2 assert_select 'form ul input[type=checkbox]', :count => 2
end end
test 'collection check boxes does not render any wrapper tag by default' do test "collection check boxes does not render any wrapper tag by default" do
with_collection_check_boxes @user, :active, [true, false], :to_s, :to_s with_collection_check_boxes @user, :active, [true, false], :to_s, :to_s
assert_select 'form input[type=checkbox]', :count => 2 assert_select 'form input[type=checkbox]', :count => 2
assert_no_select 'form ul' assert_no_select 'form ul'
end end
test 'collection check boxes does not wrap the collection when given falsy values' do test "collection check boxes does not wrap the collection when given falsy values" do
with_collection_check_boxes @user, :active, [true, false], :to_s, :to_s, :collection_wrapper_tag => false with_collection_check_boxes @user, :active, [true, false], :to_s, :to_s, :collection_wrapper_tag => false
assert_select 'form input[type=checkbox]', :count => 2 assert_select 'form input[type=checkbox]', :count => 2
assert_no_select 'form ul' assert_no_select 'form ul'
end end
test 'collection check boxes uses the given class for collection wrapper tag' do test "collection check boxes uses the given class for collection wrapper tag" do
with_collection_check_boxes @user, :active, [true, false], :to_s, :to_s, with_collection_check_boxes @user, :active, [true, false], :to_s, :to_s,
:collection_wrapper_tag => :ul, :collection_wrapper_class => "items-list" :collection_wrapper_tag => :ul, :collection_wrapper_class => "items-list"
assert_select 'form ul.items-list input[type=checkbox]', :count => 2 assert_select 'form ul.items-list input[type=checkbox]', :count => 2
end end
test 'collection check boxes uses no class for collection wrapper tag when no wrapper tag is given' do test "collection check boxes uses no class for collection wrapper tag when no wrapper tag is given" do
with_collection_check_boxes @user, :active, [true, false], :to_s, :to_s, with_collection_check_boxes @user, :active, [true, false], :to_s, :to_s,
:collection_wrapper_class => "items-list" :collection_wrapper_class => "items-list"
@ -425,40 +425,40 @@ class BuilderTest < ActionView::TestCase
assert_no_select '.items-list' assert_no_select '.items-list'
end end
test 'collection check boxes uses no class for collection wrapper tag by default' do test "collection check boxes uses no class for collection wrapper tag by default" do
with_collection_check_boxes @user, :active, [true, false], :to_s, :to_s, :collection_wrapper_tag => :ul with_collection_check_boxes @user, :active, [true, false], :to_s, :to_s, :collection_wrapper_tag => :ul
assert_select 'form ul' assert_select 'form ul'
assert_no_select 'form ul[class]' assert_no_select 'form ul[class]'
end end
test 'collection check boxes wrap items in a span tag by default' do test "collection check boxes wrap items in a span tag by default" do
with_collection_check_boxes @user, :active, [true, false], :to_s, :to_s with_collection_check_boxes @user, :active, [true, false], :to_s, :to_s
assert_select 'form span input[type=checkbox]', :count => 2 assert_select 'form span input[type=checkbox]', :count => 2
end end
test 'collection check boxes wraps each item in the given item wrapper tag' do test "collection check boxes wraps each item in the given item wrapper tag" do
with_collection_check_boxes @user, :active, [true, false], :to_s, :to_s, :item_wrapper_tag => :li with_collection_check_boxes @user, :active, [true, false], :to_s, :to_s, :item_wrapper_tag => :li
assert_select 'form li input[type=checkbox]', :count => 2 assert_select 'form li input[type=checkbox]', :count => 2
end end
test 'collection check boxes does not wrap each item when given explicitly falsy value' do test "collection check boxes does not wrap each item when given explicitly falsy value" do
with_collection_check_boxes @user, :active, [true, false], :to_s, :to_s, :item_wrapper_tag => false with_collection_check_boxes @user, :active, [true, false], :to_s, :to_s, :item_wrapper_tag => false
assert_select 'form input[type=checkbox]' assert_select 'form input[type=checkbox]'
assert_no_select 'form span input[type=checkbox]' assert_no_select 'form span input[type=checkbox]'
end end
test 'collection check boxes uses the given class for item wrapper tag' do test "collection check boxes uses the given class for item wrapper tag" do
with_collection_check_boxes @user, :active, [true, false], :to_s, :to_s, with_collection_check_boxes @user, :active, [true, false], :to_s, :to_s,
:item_wrapper_tag => :li, :item_wrapper_class => "inline" :item_wrapper_tag => :li, :item_wrapper_class => "inline"
assert_select "form li.inline input[type=checkbox]", :count => 2 assert_select "form li.inline input[type=checkbox]", :count => 2
end end
test 'collection check boxes uses no class for item wrapper tag when no wrapper tag is given' do test "collection check boxes uses no class for item wrapper tag when no wrapper tag is given" do
with_collection_check_boxes @user, :active, [true, false], :to_s, :to_s, with_collection_check_boxes @user, :active, [true, false], :to_s, :to_s,
:item_wrapper_tag => nil, :item_wrapper_class => "inline" :item_wrapper_tag => nil, :item_wrapper_class => "inline"
@ -467,7 +467,7 @@ class BuilderTest < ActionView::TestCase
assert_no_select '.inline' assert_no_select '.inline'
end end
test 'collection check boxes uses no class for item wrapper tag by default' do test "collection check boxes uses no class for item wrapper tag by default" do
with_collection_check_boxes @user, :active, [true, false], :to_s, :to_s, with_collection_check_boxes @user, :active, [true, false], :to_s, :to_s,
:item_wrapper_tag => :li :item_wrapper_tag => :li
@ -475,14 +475,14 @@ class BuilderTest < ActionView::TestCase
assert_no_select "form li[class]" assert_no_select "form li[class]"
end end
test 'collection check box does not wrap input inside the label' do test "collection check box does not wrap input inside the label" do
with_collection_check_boxes @user, :active, [true, false], :to_s, :to_s with_collection_check_boxes @user, :active, [true, false], :to_s, :to_s
assert_select 'form input[type=checkbox] + label' assert_select 'form input[type=checkbox] + label'
assert_no_select 'form label input' assert_no_select 'form label input'
end end
test 'collection check boxes accepts a block to render the label as check box wrapper' do test "collection check boxes accepts a block to render the label as check box wrapper" do
with_collection_check_boxes :user, :active, [true, false], :to_s, :to_s do |b| with_collection_check_boxes :user, :active, [true, false], :to_s, :to_s do |b|
b.label { b.check_box } b.label { b.check_box }
end end
@ -491,7 +491,7 @@ class BuilderTest < ActionView::TestCase
assert_select 'label[for=user_active_false] > input#user_active_false[type=checkbox]' assert_select 'label[for=user_active_false] > input#user_active_false[type=checkbox]'
end end
test 'collection check boxes accepts a block to change the order of label and check box' do test "collection check boxes accepts a block to change the order of label and check box" do
with_collection_check_boxes :user, :active, [true, false], :to_s, :to_s do |b| with_collection_check_boxes :user, :active, [true, false], :to_s, :to_s do |b|
b.label + b.check_box b.label + b.check_box
end end
@ -500,7 +500,7 @@ class BuilderTest < ActionView::TestCase
assert_select 'label[for=user_active_false] + input#user_active_false[type=checkbox]' assert_select 'label[for=user_active_false] + input#user_active_false[type=checkbox]'
end end
test 'collection check boxes with block helpers accept extra html options' do test "collection check boxes with block helpers accept extra html options" do
with_collection_check_boxes :user, :active, [true, false], :to_s, :to_s do |b| with_collection_check_boxes :user, :active, [true, false], :to_s, :to_s do |b|
b.label(:class => "check_box") + b.check_box(:class => "check_box") b.label(:class => "check_box") + b.check_box(:class => "check_box")
end end
@ -509,7 +509,7 @@ class BuilderTest < ActionView::TestCase
assert_select 'label.check_box[for=user_active_false] + input#user_active_false.check_box[type=checkbox]' assert_select 'label.check_box[for=user_active_false] + input#user_active_false.check_box[type=checkbox]'
end end
test 'collection check boxes with block helpers allows access to current text and value' do test "collection check boxes with block helpers allows access to current text and value" do
with_collection_check_boxes :user, :active, [true, false], :to_s, :to_s do |b| with_collection_check_boxes :user, :active, [true, false], :to_s, :to_s do |b|
b.label(:"data-value" => b.value) { b.check_box + b.text } b.label(:"data-value" => b.value) { b.check_box + b.text }
end end
@ -522,7 +522,7 @@ class BuilderTest < ActionView::TestCase
end end
end end
test 'collection check boxes with block helpers allows access to the current object item in the collection to access extra properties' do test "collection check boxes with block helpers allows access to the current object item in the collection to access extra properties" do
with_collection_check_boxes :user, :active, [true, false], :to_s, :to_s do |b| with_collection_check_boxes :user, :active, [true, false], :to_s, :to_s do |b|
b.label(:class => b.object) { b.check_box + b.text } b.label(:class => b.object) { b.check_box + b.text }
end end
@ -536,7 +536,7 @@ class BuilderTest < ActionView::TestCase
end end
# SIMPLE FIELDS # SIMPLE FIELDS
test 'simple fields for is available and yields an instance of FormBuilder' do test "simple fields for is available and yields an instance of FormBuilder" do
with_concat_form_for(@user) do |f| with_concat_form_for(@user) do |f|
f.simple_fields_for(:posts) do |posts_form| f.simple_fields_for(:posts) do |posts_form|
assert posts_form.instance_of?(SimpleForm::FormBuilder) assert posts_form.instance_of?(SimpleForm::FormBuilder)
@ -544,7 +544,7 @@ class BuilderTest < ActionView::TestCase
end end
end end
test 'fields for with a hash like model yeilds an instance of FormBuilder' do test "fields for with a hash like model yeilds an instance of FormBuilder" do
with_concat_form_for(:user) do |f| with_concat_form_for(:user) do |f|
f.simple_fields_for(:author, HashBackedAuthor.new) do |author| f.simple_fields_for(:author, HashBackedAuthor.new) do |author|
assert author.instance_of?(SimpleForm::FormBuilder) assert author.instance_of?(SimpleForm::FormBuilder)
@ -555,7 +555,7 @@ class BuilderTest < ActionView::TestCase
assert_select "input[name='user[author][name]'][value='hash backed author']" assert_select "input[name='user[author][name]'][value='hash backed author']"
end end
test 'fields for yields an instance of CustomBuilder if main builder is a CustomBuilder' do test "fields for yields an instance of CustomBuilder if main builder is a CustomBuilder" do
with_custom_form_for(:user) do |f| with_custom_form_for(:user) do |f|
f.simple_fields_for(:company) do |company| f.simple_fields_for(:company) do |company|
assert company.instance_of?(CustomFormBuilder) assert company.instance_of?(CustomFormBuilder)
@ -563,7 +563,7 @@ class BuilderTest < ActionView::TestCase
end end
end end
test 'fields for yields an instance of FormBuilder if it was set in options' do test "fields for yields an instance of FormBuilder if it was set in options" do
with_custom_form_for(:user) do |f| with_custom_form_for(:user) do |f|
f.simple_fields_for(:company, :builder => SimpleForm::FormBuilder) do |company| f.simple_fields_for(:company, :builder => SimpleForm::FormBuilder) do |company|
assert company.instance_of?(SimpleForm::FormBuilder) assert company.instance_of?(SimpleForm::FormBuilder)
@ -571,7 +571,7 @@ class BuilderTest < ActionView::TestCase
end end
end end
test 'fields inherites wrapper option from the parent form' do test "fields inherites wrapper option from the parent form" do
swap_wrapper :another do swap_wrapper :another do
simple_form_for(:user, :wrapper => :another) do |f| simple_form_for(:user, :wrapper => :another) do |f|
f.simple_fields_for(:company) do |company| f.simple_fields_for(:company) do |company|
@ -580,4 +580,14 @@ class BuilderTest < ActionView::TestCase
end end
end end
end end
test "fields overrides wrapper option from the parent form" do
swap_wrapper :another do
simple_form_for(:user, :wrapper => :another) do |f|
f.simple_fields_for(:company, :wrapper => false) do |company|
assert_equal false, company.options[:wrapper]
end
end
end
end
end end