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