Skip to content

Commit a761908

Browse files
committed
Add specs for multiple file input
Ref: #987, rails/rails#55619
1 parent 1c75735 commit a761908

File tree

5 files changed

+59
-28
lines changed

5 files changed

+59
-28
lines changed

test/action_view/cases/helper.rb

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -81,12 +81,12 @@ def autocomplete_attribute
8181
end
8282
end
8383

84-
def hidden_input_for_select(name)
85-
%(<input name="#{name}" type="hidden" value="" #{autocomplete_attribute} />)
84+
def hidden_input(name, value = '')
85+
%(<input name="#{name}" type="hidden" value="#{value}" #{autocomplete_attribute} />)
8686
end
8787

8888
def hidden_input_for_checkbox(name)
89-
%(<input name="#{name}" type="hidden" value="0" #{autocomplete_attribute} />)
89+
hidden_input(name, '0')
9090
end
9191

9292
def setup
@@ -140,9 +140,9 @@ def setup
140140
def snowman(method = nil)
141141
txt = +''
142142

143-
txt << %(<input name="utf8" type="hidden" value="&#x2713;" />) if default_enforce_utf8
143+
txt << hidden_input('utf8', '&#x2713;') if default_enforce_utf8
144144

145-
txt << %(<input type="hidden" name="_method" value="#{method}" #{autocomplete_attribute} />) if method
145+
txt << hidden_input('_method', method) if method
146146

147147
txt
148148
end
@@ -152,7 +152,7 @@ def form_field(tag, id: nil, name: nil, type: nil, value: nil, multiple: false,
152152

153153
txt << %( name="#{custom_name}") if custom_name
154154
txt << %( type="#{type}") if type
155-
txt << %( #{autocomplete_attribute}) if %w[hidden].include?(type)
155+
txt << %( #{autocomplete_attribute}) if %w[hidden].include?(type) && autocomplete_attribute.present?
156156
txt << %( value="#{value}") if value
157157
txt << %( multiple="multiple") if multiple
158158
txt << %( name="#{name}") if name

test/action_view/cases/test_form_for_helpers.rb

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ def test_http_method
5050

5151
validators = { 'post[cost]' => { presence: [{ message: I18n.t('errors.messages.blank') }] } }
5252
expected = whole_form_for('/posts', 'new_post', 'new_post', validators: validators) do
53-
form_field('input', name: '_method', type: 'hidden', value: 'patch') +
53+
hidden_input('_method', 'patch') +
5454
form_field('input', id: 'post_cost', name: 'post[cost]', type: 'text')
5555
end
5656

@@ -105,7 +105,7 @@ def test_check_box
105105

106106
validators = { 'post[cost]' => { presence: [{ message: I18n.t('errors.messages.blank') }] } }
107107
expected = whole_form_for('/posts', 'new_post', 'new_post', validators: validators) do
108-
form_field('input', name: 'post[cost]', type: 'hidden', value: '0') +
108+
hidden_input_for_checkbox('post[cost]') +
109109
form_field('input', id: 'post_cost', name: 'post[cost]', type: 'checkbox', value: '1')
110110
end
111111

@@ -120,7 +120,7 @@ def test_checkbox
120120

121121
validators = { 'post[cost]' => { presence: [{ message: I18n.t('errors.messages.blank') }] } }
122122
expected = whole_form_for('/posts', 'new_post', 'new_post', validators: validators) do
123-
form_field('input', name: 'post[cost]', type: 'hidden', value: '0') +
123+
hidden_input_for_checkbox('post[cost]') +
124124
form_field('input', id: 'post_cost', name: 'post[cost]', type: 'checkbox', value: '1')
125125
end
126126

@@ -135,7 +135,7 @@ def test_check_box_ensure_no_validate_attribute
135135

136136
validators = { 'post[cost]' => { presence: [{ message: I18n.t('errors.messages.blank') }] } }
137137
expected = whole_form_for('/posts', 'new_post', 'new_post', validators: validators) do
138-
form_field('input', name: 'post[cost]', type: 'hidden', value: '0') +
138+
hidden_input_for_checkbox('post[cost]') +
139139
form_field('input', id: 'post_cost', name: 'post[cost]', type: 'checkbox', value: '1')
140140
end
141141

@@ -349,7 +349,8 @@ def test_select_multiple
349349

350350
validators = { 'post[cost][]' => { presence: [{ message: I18n.t('errors.messages.blank') }] } }
351351
expected = whole_form_for('/posts', 'new_post', 'new_post', validators: validators) do
352-
%(#{hidden_input_for_select('post[cost][]')}#{form_field('select', id: 'post_cost', name: 'post[cost][]', multiple: true)})
352+
hidden_input('post[cost][]') +
353+
form_field('select', id: 'post_cost', name: 'post[cost][]', multiple: true)
353354
end
354355

355356
assert_dom_equal expected, output_buffer
@@ -400,7 +401,7 @@ def test_collection_check_boxes_with_many_association
400401
}
401402

402403
expected = whole_form_for('/posts', 'new_post', 'new_post', validators: validators) do
403-
form_field('input', name: 'post[tag_ids][]', type: 'hidden', value: '')
404+
hidden_input('post[tag_ids][]')
404405
end
405406

406407
assert_dom_equal expected, output_buffer
@@ -450,7 +451,7 @@ def test_collection_check_boxes
450451

451452
validators = { 'post[cost]' => { presence: [{ message: I18n.t('errors.messages.blank') }] } }
452453
expected = whole_form_for('/posts', 'new_post', 'new_post', validators: validators) do
453-
form_field('input', name: 'post[cost][]', type: 'hidden', value: '')
454+
hidden_input('post[cost][]')
454455
end
455456

456457
assert_dom_equal expected, output_buffer
@@ -464,7 +465,7 @@ def test_collection_checkboxes
464465

465466
validators = { 'post[cost]' => { presence: [{ message: I18n.t('errors.messages.blank') }] } }
466467
expected = whole_form_for('/posts', 'new_post', 'new_post', validators: validators) do
467-
form_field('input', name: 'post[cost][]', type: 'hidden', value: '')
468+
hidden_input('post[cost][]')
468469
end
469470

470471
assert_dom_equal expected, output_buffer
@@ -477,7 +478,7 @@ def test_collection_check_boxes_with_validate_options
477478
end
478479

479480
expected = whole_form_for('/posts', 'new_post', 'new_post', validators: {}) do
480-
form_field('input', name: 'post[cost][]', type: 'hidden', value: '')
481+
hidden_input('post[cost][]')
481482
end
482483

483484
assert_dom_equal expected, output_buffer
@@ -490,7 +491,7 @@ def test_collection_radio_buttons
490491

491492
validators = { 'post[cost]' => { presence: [{ message: I18n.t('errors.messages.blank') }] } }
492493
expected = whole_form_for('/posts', 'new_post', 'new_post', validators: validators) do
493-
form_field('input', name: 'post[cost]', type: 'hidden', value: '')
494+
hidden_input('post[cost]')
494495
end
495496

496497
assert_dom_equal expected, output_buffer
@@ -502,7 +503,7 @@ def test_collection_radio_buttons_with_validate_options
502503
end
503504

504505
expected = whole_form_for('/posts', 'new_post', 'new_post', validators: {}) do
505-
form_field('input', name: 'post[cost]', type: 'hidden', value: '')
506+
hidden_input('post[cost]')
506507
end
507508

508509
assert_dom_equal expected, output_buffer

test/action_view/cases/test_form_with_helpers.rb

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -131,14 +131,28 @@ def test_form_with_file_field
131131
assert_dom_equal expected, output_buffer
132132
end
133133

134+
def test_form_with_file_multiple
135+
form_with(model: @post, validate: true) do |f|
136+
concat f.file_field(:cost, multiple: true, include_hidden: true)
137+
end
138+
139+
validators = { 'post[cost][]' => { presence: [{ message: I18n.t('errors.messages.blank') }] } }
140+
expected = whole_form_with('/posts', validators: validators, file: true) do
141+
hidden_input('post[cost][]') +
142+
form_field('input', id: 'post_cost', name: 'post[cost][]', type: 'file', multiple: 'multiple')
143+
end
144+
145+
assert_dom_equal expected, output_buffer
146+
end
147+
134148
def test_form_with_check_box
135149
form_with(model: @post, validate: true) do |f|
136150
concat f.check_box(:cost)
137151
end
138152

139153
validators = { 'post[cost]' => { presence: [{ message: I18n.t('errors.messages.blank') }] } }
140154
expected = whole_form_with('/posts', validators: validators) do
141-
form_field('input', name: 'post[cost]', type: 'hidden', value: '0') +
155+
hidden_input_for_checkbox('post[cost]') +
142156
form_field('input', id: 'post_cost', name: 'post[cost]', type: 'checkbox', value: '1')
143157
end
144158

@@ -153,7 +167,7 @@ def test_form_with_checkbox
153167

154168
validators = { 'post[cost]' => { presence: [{ message: I18n.t('errors.messages.blank') }] } }
155169
expected = whole_form_with('/posts', validators: validators) do
156-
form_field('input', name: 'post[cost]', type: 'hidden', value: '0') +
170+
hidden_input_for_checkbox('post[cost]') +
157171
form_field('input', id: 'post_cost', name: 'post[cost]', type: 'checkbox', value: '1')
158172
end
159173

@@ -168,7 +182,7 @@ def test_form_with_check_box_ensure_no_validate_attribute
168182

169183
validators = { 'post[cost]' => { presence: [{ message: I18n.t('errors.messages.blank') }] } }
170184
expected = whole_form_with('/posts', validators: validators) do
171-
form_field('input', name: 'post[cost]', type: 'hidden', value: '0') +
185+
hidden_input_for_checkbox('post[cost]') +
172186
form_field('input', id: 'post_cost', name: 'post[cost]', type: 'checkbox', value: '1')
173187
end
174188

@@ -397,7 +411,8 @@ def test_form_with_select_multiple
397411

398412
validators = { 'post[cost][]' => { presence: [{ message: I18n.t('errors.messages.blank') }] } }
399413
expected = whole_form_with('/posts', validators: validators) do
400-
%(#{hidden_input_for_select('post[cost][]')}#{form_field('select', id: 'post_cost', name: 'post[cost][]', multiple: true)})
414+
hidden_input('post[cost][]') +
415+
form_field('select', id: 'post_cost', name: 'post[cost][]', multiple: true)
401416
end
402417

403418
assert_dom_equal expected, output_buffer
@@ -473,7 +488,7 @@ def test_form_with_collection_check_boxes
473488

474489
validators = { 'post[cost]' => { presence: [{ message: I18n.t('errors.messages.blank') }] } }
475490
expected = whole_form_with('/posts', validators: validators) do
476-
form_field('input', name: 'post[cost][]', type: 'hidden', value: '')
491+
hidden_input('post[cost][]')
477492
end
478493

479494
assert_dom_equal expected, output_buffer
@@ -487,7 +502,7 @@ def test_form_with_collection_checkboxes
487502

488503
validators = { 'post[cost]' => { presence: [{ message: I18n.t('errors.messages.blank') }] } }
489504
expected = whole_form_with('/posts', validators: validators) do
490-
form_field('input', name: 'post[cost][]', type: 'hidden', value: '')
505+
hidden_input('post[cost][]')
491506
end
492507

493508
assert_dom_equal expected, output_buffer
@@ -500,7 +515,7 @@ def test_form_with_collection_check_boxes_with_validate_options
500515
end
501516

502517
expected = whole_form_with('/posts', validators: {}) do
503-
form_field('input', name: 'post[cost][]', type: 'hidden', value: '')
518+
hidden_input('post[cost][]')
504519
end
505520

506521
assert_dom_equal expected, output_buffer
@@ -513,7 +528,7 @@ def test_form_with_collection_radio_buttons
513528

514529
validators = { 'post[cost]' => { presence: [{ message: I18n.t('errors.messages.blank') }] } }
515530
expected = whole_form_with('/posts', validators: validators) do
516-
form_field('input', name: 'post[cost]', type: 'hidden', value: '')
531+
hidden_input('post[cost]')
517532
end
518533

519534
assert_dom_equal expected, output_buffer
@@ -525,7 +540,7 @@ def test_form_with_collection_radio_buttons_with_validate_options
525540
end
526541

527542
expected = whole_form_with('/posts', validators: {}) do
528-
form_field('input', name: 'post[cost]', type: 'hidden', value: '')
543+
hidden_input('post[cost]')
529544
end
530545

531546
assert_dom_equal expected, output_buffer

test/action_view/cases/test_legacy_form_for_helpers.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,8 @@ def test_select_multiple
126126
end
127127

128128
expected = whole_form_for('/posts', 'new_post', 'new_post') do
129-
%(#{hidden_input_for_select('post[cost][]')}#{form_field('select', id: 'post_cost', name: 'post[cost][]', multiple: true)})
129+
hidden_input('post[cost][]') +
130+
form_field('select', id: 'post_cost', name: 'post[cost][]', multiple: true)
130131
end
131132

132133
assert_dom_equal expected, output_buffer

test/action_view/cases/test_legacy_form_with_helpers.rb

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,19 @@ def test_form_with_file_field
5959
assert_dom_equal expected, output_buffer
6060
end
6161

62+
def test_form_with_file_multiple
63+
form_with(model: @post) do |f|
64+
concat f.file_field(:cost, multiple: true, include_hidden: true)
65+
end
66+
67+
expected = whole_form_with('/posts', file: true) do
68+
hidden_input('post[cost][]') +
69+
form_field('input', id: 'post_cost', name: 'post[cost][]', type: 'file', multiple: 'multiple')
70+
end
71+
72+
assert_dom_equal expected, output_buffer
73+
end
74+
6275
def test_form_with_check_box
6376
form_with(model: @post) do |f|
6477
concat f.check_box(:cost)
@@ -137,7 +150,8 @@ def test_form_with_select_multiple
137150
end
138151

139152
expected = whole_form_with('/posts') do
140-
%(#{hidden_input_for_select('post[cost][]')}#{form_field('select', name: 'post[cost][]', id: 'post_cost', multiple: true)})
153+
hidden_input('post[cost][]') +
154+
form_field('select', name: 'post[cost][]', id: 'post_cost', multiple: true)
141155
end
142156

143157
assert_dom_equal expected, output_buffer

0 commit comments

Comments
 (0)