diff --git a/test/action_view/cases/helper.rb b/test/action_view/cases/helper.rb
index acd5add6..fdb19b94 100644
--- a/test/action_view/cases/helper.rb
+++ b/test/action_view/cases/helper.rb
@@ -81,12 +81,12 @@ def autocomplete_attribute
end
end
- def hidden_input_for_select(name)
- %()
+ def hidden_input(name, value = '')
+ %()
end
def hidden_input_for_checkbox(name)
- %()
+ hidden_input(name, '0')
end
def setup
@@ -140,9 +140,9 @@ def setup
def snowman(method = nil)
txt = +''
- txt << %() if default_enforce_utf8
+ txt << hidden_input('utf8', '✓') if default_enforce_utf8
- txt << %() if method
+ txt << hidden_input('_method', method) if method
txt
end
@@ -152,7 +152,7 @@ def form_field(tag, id: nil, name: nil, type: nil, value: nil, multiple: false,
txt << %( name="#{custom_name}") if custom_name
txt << %( type="#{type}") if type
- txt << %( #{autocomplete_attribute}) if %w[hidden].include?(type)
+ txt << %( #{autocomplete_attribute}) if %w[hidden].include?(type) && autocomplete_attribute.present?
txt << %( value="#{value}") if value
txt << %( multiple="multiple") if multiple
txt << %( name="#{name}") if name
diff --git a/test/action_view/cases/test_form_for_helpers.rb b/test/action_view/cases/test_form_for_helpers.rb
index 4f727529..351c88ce 100644
--- a/test/action_view/cases/test_form_for_helpers.rb
+++ b/test/action_view/cases/test_form_for_helpers.rb
@@ -50,7 +50,7 @@ def test_http_method
validators = { 'post[cost]' => { presence: [{ message: I18n.t('errors.messages.blank') }] } }
expected = whole_form_for('/posts', 'new_post', 'new_post', validators: validators) do
- form_field('input', name: '_method', type: 'hidden', value: 'patch') +
+ hidden_input('_method', 'patch') +
form_field('input', id: 'post_cost', name: 'post[cost]', type: 'text')
end
@@ -105,7 +105,7 @@ def test_check_box
validators = { 'post[cost]' => { presence: [{ message: I18n.t('errors.messages.blank') }] } }
expected = whole_form_for('/posts', 'new_post', 'new_post', validators: validators) do
- form_field('input', name: 'post[cost]', type: 'hidden', value: '0') +
+ hidden_input_for_checkbox('post[cost]') +
form_field('input', id: 'post_cost', name: 'post[cost]', type: 'checkbox', value: '1')
end
@@ -120,7 +120,7 @@ def test_checkbox
validators = { 'post[cost]' => { presence: [{ message: I18n.t('errors.messages.blank') }] } }
expected = whole_form_for('/posts', 'new_post', 'new_post', validators: validators) do
- form_field('input', name: 'post[cost]', type: 'hidden', value: '0') +
+ hidden_input_for_checkbox('post[cost]') +
form_field('input', id: 'post_cost', name: 'post[cost]', type: 'checkbox', value: '1')
end
@@ -135,7 +135,7 @@ def test_check_box_ensure_no_validate_attribute
validators = { 'post[cost]' => { presence: [{ message: I18n.t('errors.messages.blank') }] } }
expected = whole_form_for('/posts', 'new_post', 'new_post', validators: validators) do
- form_field('input', name: 'post[cost]', type: 'hidden', value: '0') +
+ hidden_input_for_checkbox('post[cost]') +
form_field('input', id: 'post_cost', name: 'post[cost]', type: 'checkbox', value: '1')
end
@@ -349,7 +349,8 @@ def test_select_multiple
validators = { 'post[cost][]' => { presence: [{ message: I18n.t('errors.messages.blank') }] } }
expected = whole_form_for('/posts', 'new_post', 'new_post', validators: validators) do
- %(#{hidden_input_for_select('post[cost][]')}#{form_field('select', id: 'post_cost', name: 'post[cost][]', multiple: true)})
+ hidden_input('post[cost][]') +
+ form_field('select', id: 'post_cost', name: 'post[cost][]', multiple: true)
end
assert_dom_equal expected, output_buffer
@@ -400,7 +401,7 @@ def test_collection_check_boxes_with_many_association
}
expected = whole_form_for('/posts', 'new_post', 'new_post', validators: validators) do
- form_field('input', name: 'post[tag_ids][]', type: 'hidden', value: '')
+ hidden_input('post[tag_ids][]')
end
assert_dom_equal expected, output_buffer
@@ -450,7 +451,7 @@ def test_collection_check_boxes
validators = { 'post[cost]' => { presence: [{ message: I18n.t('errors.messages.blank') }] } }
expected = whole_form_for('/posts', 'new_post', 'new_post', validators: validators) do
- form_field('input', name: 'post[cost][]', type: 'hidden', value: '')
+ hidden_input('post[cost][]')
end
assert_dom_equal expected, output_buffer
@@ -464,7 +465,7 @@ def test_collection_checkboxes
validators = { 'post[cost]' => { presence: [{ message: I18n.t('errors.messages.blank') }] } }
expected = whole_form_for('/posts', 'new_post', 'new_post', validators: validators) do
- form_field('input', name: 'post[cost][]', type: 'hidden', value: '')
+ hidden_input('post[cost][]')
end
assert_dom_equal expected, output_buffer
@@ -477,7 +478,7 @@ def test_collection_check_boxes_with_validate_options
end
expected = whole_form_for('/posts', 'new_post', 'new_post', validators: {}) do
- form_field('input', name: 'post[cost][]', type: 'hidden', value: '')
+ hidden_input('post[cost][]')
end
assert_dom_equal expected, output_buffer
@@ -490,7 +491,7 @@ def test_collection_radio_buttons
validators = { 'post[cost]' => { presence: [{ message: I18n.t('errors.messages.blank') }] } }
expected = whole_form_for('/posts', 'new_post', 'new_post', validators: validators) do
- form_field('input', name: 'post[cost]', type: 'hidden', value: '')
+ hidden_input('post[cost]')
end
assert_dom_equal expected, output_buffer
@@ -502,7 +503,7 @@ def test_collection_radio_buttons_with_validate_options
end
expected = whole_form_for('/posts', 'new_post', 'new_post', validators: {}) do
- form_field('input', name: 'post[cost]', type: 'hidden', value: '')
+ hidden_input('post[cost]')
end
assert_dom_equal expected, output_buffer
diff --git a/test/action_view/cases/test_form_with_helpers.rb b/test/action_view/cases/test_form_with_helpers.rb
index 9e85396b..c0f9a245 100644
--- a/test/action_view/cases/test_form_with_helpers.rb
+++ b/test/action_view/cases/test_form_with_helpers.rb
@@ -131,6 +131,22 @@ def test_form_with_file_field
assert_dom_equal expected, output_buffer
end
+ if Rails.version >= '7.0'
+ def test_form_with_file_multiple_include_hidden
+ form_with(model: @post, validate: true) do |f|
+ concat f.file_field(:cost, multiple: true, include_hidden: true)
+ end
+
+ validators = { 'post[cost][]' => { presence: [{ message: I18n.t('errors.messages.blank') }] } }
+ expected = whole_form_with('/posts', validators: validators, file: true) do
+ hidden_input('post[cost][]') +
+ form_field('input', id: 'post_cost', name: 'post[cost][]', type: 'file', multiple: 'multiple')
+ end
+
+ assert_dom_equal expected, output_buffer
+ end
+ end
+
def test_form_with_check_box
form_with(model: @post, validate: true) do |f|
concat f.check_box(:cost)
@@ -138,7 +154,7 @@ def test_form_with_check_box
validators = { 'post[cost]' => { presence: [{ message: I18n.t('errors.messages.blank') }] } }
expected = whole_form_with('/posts', validators: validators) do
- form_field('input', name: 'post[cost]', type: 'hidden', value: '0') +
+ hidden_input_for_checkbox('post[cost]') +
form_field('input', id: 'post_cost', name: 'post[cost]', type: 'checkbox', value: '1')
end
@@ -153,7 +169,7 @@ def test_form_with_checkbox
validators = { 'post[cost]' => { presence: [{ message: I18n.t('errors.messages.blank') }] } }
expected = whole_form_with('/posts', validators: validators) do
- form_field('input', name: 'post[cost]', type: 'hidden', value: '0') +
+ hidden_input_for_checkbox('post[cost]') +
form_field('input', id: 'post_cost', name: 'post[cost]', type: 'checkbox', value: '1')
end
@@ -168,7 +184,7 @@ def test_form_with_check_box_ensure_no_validate_attribute
validators = { 'post[cost]' => { presence: [{ message: I18n.t('errors.messages.blank') }] } }
expected = whole_form_with('/posts', validators: validators) do
- form_field('input', name: 'post[cost]', type: 'hidden', value: '0') +
+ hidden_input_for_checkbox('post[cost]') +
form_field('input', id: 'post_cost', name: 'post[cost]', type: 'checkbox', value: '1')
end
@@ -397,7 +413,8 @@ def test_form_with_select_multiple
validators = { 'post[cost][]' => { presence: [{ message: I18n.t('errors.messages.blank') }] } }
expected = whole_form_with('/posts', validators: validators) do
- %(#{hidden_input_for_select('post[cost][]')}#{form_field('select', id: 'post_cost', name: 'post[cost][]', multiple: true)})
+ hidden_input('post[cost][]') +
+ form_field('select', id: 'post_cost', name: 'post[cost][]', multiple: true)
end
assert_dom_equal expected, output_buffer
@@ -473,7 +490,7 @@ def test_form_with_collection_check_boxes
validators = { 'post[cost]' => { presence: [{ message: I18n.t('errors.messages.blank') }] } }
expected = whole_form_with('/posts', validators: validators) do
- form_field('input', name: 'post[cost][]', type: 'hidden', value: '')
+ hidden_input('post[cost][]')
end
assert_dom_equal expected, output_buffer
@@ -487,7 +504,7 @@ def test_form_with_collection_checkboxes
validators = { 'post[cost]' => { presence: [{ message: I18n.t('errors.messages.blank') }] } }
expected = whole_form_with('/posts', validators: validators) do
- form_field('input', name: 'post[cost][]', type: 'hidden', value: '')
+ hidden_input('post[cost][]')
end
assert_dom_equal expected, output_buffer
@@ -500,7 +517,7 @@ def test_form_with_collection_check_boxes_with_validate_options
end
expected = whole_form_with('/posts', validators: {}) do
- form_field('input', name: 'post[cost][]', type: 'hidden', value: '')
+ hidden_input('post[cost][]')
end
assert_dom_equal expected, output_buffer
@@ -513,7 +530,7 @@ def test_form_with_collection_radio_buttons
validators = { 'post[cost]' => { presence: [{ message: I18n.t('errors.messages.blank') }] } }
expected = whole_form_with('/posts', validators: validators) do
- form_field('input', name: 'post[cost]', type: 'hidden', value: '')
+ hidden_input('post[cost]')
end
assert_dom_equal expected, output_buffer
@@ -525,7 +542,7 @@ def test_form_with_collection_radio_buttons_with_validate_options
end
expected = whole_form_with('/posts', validators: {}) do
- form_field('input', name: 'post[cost]', type: 'hidden', value: '')
+ hidden_input('post[cost]')
end
assert_dom_equal expected, output_buffer
diff --git a/test/action_view/cases/test_legacy_form_for_helpers.rb b/test/action_view/cases/test_legacy_form_for_helpers.rb
index 851e7d0f..6dc27934 100644
--- a/test/action_view/cases/test_legacy_form_for_helpers.rb
+++ b/test/action_view/cases/test_legacy_form_for_helpers.rb
@@ -126,7 +126,8 @@ def test_select_multiple
end
expected = whole_form_for('/posts', 'new_post', 'new_post') do
- %(#{hidden_input_for_select('post[cost][]')}#{form_field('select', id: 'post_cost', name: 'post[cost][]', multiple: true)})
+ hidden_input('post[cost][]') +
+ form_field('select', id: 'post_cost', name: 'post[cost][]', multiple: true)
end
assert_dom_equal expected, output_buffer
diff --git a/test/action_view/cases/test_legacy_form_with_helpers.rb b/test/action_view/cases/test_legacy_form_with_helpers.rb
index 3d6513e3..ed2b610e 100644
--- a/test/action_view/cases/test_legacy_form_with_helpers.rb
+++ b/test/action_view/cases/test_legacy_form_with_helpers.rb
@@ -59,6 +59,21 @@ def test_form_with_file_field
assert_dom_equal expected, output_buffer
end
+ if Rails.version >= '7.0'
+ def test_form_with_file_multiple_include_hidden
+ form_with(model: @post) do |f|
+ concat f.file_field(:cost, multiple: true, include_hidden: true)
+ end
+
+ expected = whole_form_with('/posts', file: true) do
+ hidden_input('post[cost][]') +
+ form_field('input', id: 'post_cost', name: 'post[cost][]', type: 'file', multiple: 'multiple')
+ end
+
+ assert_dom_equal expected, output_buffer
+ end
+ end
+
def test_form_with_check_box
form_with(model: @post) do |f|
concat f.check_box(:cost)
@@ -137,7 +152,8 @@ def test_form_with_select_multiple
end
expected = whole_form_with('/posts') do
- %(#{hidden_input_for_select('post[cost][]')}#{form_field('select', name: 'post[cost][]', id: 'post_cost', multiple: true)})
+ hidden_input('post[cost][]') +
+ form_field('select', name: 'post[cost][]', id: 'post_cost', multiple: true)
end
assert_dom_equal expected, output_buffer