simple_form 3.1.0.rc1 → 3.1.0.rc2
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of simple_form might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -1
- data/README.md +37 -6
- data/lib/generators/simple_form/templates/config/initializers/simple_form.rb +6 -2
- data/lib/generators/simple_form/templates/config/initializers/simple_form_bootstrap.rb +37 -14
- data/lib/simple_form.rb +8 -0
- data/lib/simple_form/components/labels.rb +1 -1
- data/lib/simple_form/form_builder.rb +29 -15
- data/lib/simple_form/inputs/boolean_input.rb +7 -4
- data/lib/simple_form/tags.rb +1 -0
- data/lib/simple_form/version.rb +1 -1
- data/lib/simple_form/wrappers/builder.rb +2 -2
- data/lib/simple_form/wrappers/many.rb +1 -0
- data/test/action_view_extensions/builder_test.rb +3 -3
- data/test/action_view_extensions/form_helper_test.rb +13 -13
- data/test/components/label_test.rb +35 -35
- data/test/form_builder/association_test.rb +4 -4
- data/test/form_builder/button_test.rb +5 -5
- data/test/form_builder/error_test.rb +18 -18
- data/test/form_builder/general_test.rb +65 -60
- data/test/form_builder/hint_test.rb +15 -15
- data/test/form_builder/input_field_test.rb +16 -16
- data/test/form_builder/label_test.rb +22 -13
- data/test/form_builder/wrapper_test.rb +54 -20
- data/test/inputs/boolean_input_test.rb +8 -8
- data/test/inputs/collection_check_boxes_input_test.rb +24 -7
- data/test/inputs/collection_radio_buttons_input_test.rb +40 -23
- data/test/inputs/collection_select_input_test.rb +45 -45
- data/test/inputs/datetime_input_test.rb +23 -23
- data/test/inputs/disabled_test.rb +15 -15
- data/test/inputs/discovery_test.rb +44 -5
- data/test/inputs/file_input_test.rb +2 -2
- data/test/inputs/general_test.rb +20 -20
- data/test/inputs/grouped_collection_select_input_test.rb +2 -2
- data/test/inputs/hidden_input_test.rb +4 -4
- data/test/inputs/numeric_input_test.rb +24 -24
- data/test/inputs/priority_input_test.rb +7 -7
- data/test/inputs/readonly_test.rb +19 -19
- data/test/inputs/required_test.rb +13 -13
- data/test/inputs/string_input_test.rb +23 -23
- data/test/inputs/text_input_test.rb +4 -4
- data/test/support/discovery_inputs.rb +20 -0
- data/test/support/misc_helpers.rb +22 -0
- data/test/support/models.rb +2 -1
- metadata +2 -2
@@ -6,30 +6,30 @@ class CollectionCheckBoxesInputTest < ActionView::TestCase
|
|
6
6
|
SimpleForm::Inputs::CollectionCheckBoxesInput.reset_i18n_cache :boolean_collection
|
7
7
|
end
|
8
8
|
|
9
|
-
test 'input check boxes
|
9
|
+
test 'input check boxes does not include for attribute by default' do
|
10
10
|
with_input_for @user, :gender, :check_boxes, collection: [:male, :female]
|
11
11
|
assert_select 'label'
|
12
12
|
assert_no_select 'label[for=user_gender]'
|
13
13
|
end
|
14
14
|
|
15
|
-
test 'input check boxes
|
15
|
+
test 'input check boxes includes for attribute when giving as html option' do
|
16
16
|
with_input_for @user, :gender, :check_boxes, collection: [:male, :female], label_html: { for: 'gender' }
|
17
17
|
assert_select 'label[for=gender]'
|
18
18
|
end
|
19
19
|
|
20
|
-
test 'collection input with check_boxes type
|
20
|
+
test 'collection input with check_boxes type does not generate required html attribute' do
|
21
21
|
with_input_for @user, :name, :check_boxes, collection: ['Jose', 'Carlos']
|
22
22
|
assert_select 'input.required'
|
23
23
|
assert_no_select 'input[required]'
|
24
24
|
end
|
25
25
|
|
26
|
-
test 'collection input with check_boxes type
|
26
|
+
test 'collection input with check_boxes type does not generate aria-required html attribute' do
|
27
27
|
with_input_for @user, :name, :check_boxes, collection: ['Jose', 'Carlos']
|
28
28
|
assert_select 'input.required'
|
29
29
|
assert_no_select 'input[aria-required]'
|
30
30
|
end
|
31
31
|
|
32
|
-
test 'input
|
32
|
+
test 'input does automatic collection translation for check_box types using defaults key' do
|
33
33
|
store_translations(:en, simple_form: { options: { defaults: {
|
34
34
|
gender: { male: 'Male', female: 'Female'}
|
35
35
|
} } } ) do
|
@@ -41,7 +41,7 @@ class CollectionCheckBoxesInputTest < ActionView::TestCase
|
|
41
41
|
end
|
42
42
|
end
|
43
43
|
|
44
|
-
test 'input
|
44
|
+
test 'input does automatic collection translation for check_box types using specific object key' do
|
45
45
|
store_translations(:en, simple_form: { options: { user: {
|
46
46
|
gender: { male: 'Male', female: 'Female'}
|
47
47
|
} } } ) do
|
@@ -53,7 +53,7 @@ class CollectionCheckBoxesInputTest < ActionView::TestCase
|
|
53
53
|
end
|
54
54
|
end
|
55
55
|
|
56
|
-
test 'input that uses automatic collection translation for check_boxes
|
56
|
+
test 'input that uses automatic collection translation for check_boxes properly sets checked values' do
|
57
57
|
store_translations(:en, simple_form: { options: { defaults: {
|
58
58
|
gender: { male: 'Male', female: 'Female'}
|
59
59
|
} } } ) do
|
@@ -245,6 +245,23 @@ class CollectionCheckBoxesInputTest < ActionView::TestCase
|
|
245
245
|
end
|
246
246
|
end
|
247
247
|
|
248
|
+
test 'input check boxes with nested style renders item labels with specified class' do
|
249
|
+
swap SimpleForm, boolean_style: :nested do
|
250
|
+
with_input_for @user, :active, :check_boxes, item_label_class: "test"
|
251
|
+
|
252
|
+
assert_select 'span.checkbox > label.test > input'
|
253
|
+
end
|
254
|
+
end
|
255
|
+
|
256
|
+
test 'input check boxes with nested style and falsey input wrapper renders item labels with specified class' do
|
257
|
+
swap SimpleForm, boolean_style: :nested, item_wrapper_tag: false do
|
258
|
+
with_input_for @user, :active, :check_boxes, item_label_class: "checkbox-inline"
|
259
|
+
|
260
|
+
assert_select 'label.checkbox-inline > input'
|
261
|
+
assert_no_select 'span.checkbox'
|
262
|
+
end
|
263
|
+
end
|
264
|
+
|
248
265
|
test 'input check boxes wrapper class are not included when set to falsey' do
|
249
266
|
swap SimpleForm, include_default_input_wrapper_class: false, boolean_style: :nested do
|
250
267
|
with_input_for @user, :gender, :check_boxes, collection: [:male, :female]
|
@@ -6,19 +6,19 @@ class CollectionRadioButtonsInputTest < ActionView::TestCase
|
|
6
6
|
SimpleForm::Inputs::CollectionRadioButtonsInput.reset_i18n_cache :boolean_collection
|
7
7
|
end
|
8
8
|
|
9
|
-
test 'input
|
9
|
+
test 'input generates boolean radio buttons by default for radio types' do
|
10
10
|
with_input_for @user, :active, :radio_buttons
|
11
11
|
assert_select 'input[type=radio][value=true].radio_buttons#user_active_true'
|
12
12
|
assert_select 'input[type=radio][value=false].radio_buttons#user_active_false'
|
13
13
|
end
|
14
14
|
|
15
|
-
test 'input as radio
|
15
|
+
test 'input as radio generates internal labels by default' do
|
16
16
|
with_input_for @user, :active, :radio_buttons
|
17
17
|
assert_select 'label[for=user_active_true]', 'Yes'
|
18
18
|
assert_select 'label[for=user_active_false]', 'No'
|
19
19
|
end
|
20
20
|
|
21
|
-
test 'input as radio
|
21
|
+
test 'input as radio generates internal labels with accurate `for` values with nested boolean style' do
|
22
22
|
swap SimpleForm, boolean_style: :nested do
|
23
23
|
with_input_for @user, :active, :radio_buttons
|
24
24
|
assert_select 'label[for=user_active_true]', 'Yes'
|
@@ -26,7 +26,7 @@ class CollectionRadioButtonsInputTest < ActionView::TestCase
|
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
29
|
-
test 'nested label
|
29
|
+
test 'nested label does not duplicate input id' do
|
30
30
|
swap SimpleForm, boolean_style: :nested do
|
31
31
|
with_input_for @user, :active, :radio_buttons, id: 'nested_id'
|
32
32
|
assert_select 'input#user_active_true'
|
@@ -34,7 +34,7 @@ class CollectionRadioButtonsInputTest < ActionView::TestCase
|
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
37
|
-
test 'input as radio
|
37
|
+
test 'input as radio uses i18n to translate internal labels' do
|
38
38
|
store_translations(:en, simple_form: { yes: 'Sim', no: 'Não' }) do
|
39
39
|
with_input_for @user, :active, :radio_buttons
|
40
40
|
assert_select 'label[for=user_active_true]', 'Sim'
|
@@ -42,25 +42,25 @@ class CollectionRadioButtonsInputTest < ActionView::TestCase
|
|
42
42
|
end
|
43
43
|
end
|
44
44
|
|
45
|
-
test 'input radio
|
45
|
+
test 'input radio does not include for attribute by default' do
|
46
46
|
with_input_for @user, :gender, :radio_buttons, collection: [:male, :female]
|
47
47
|
assert_select 'label'
|
48
48
|
assert_no_select 'label[for=user_gender]'
|
49
49
|
end
|
50
50
|
|
51
|
-
test 'input radio
|
51
|
+
test 'input radio includes for attribute when giving as html option' do
|
52
52
|
with_input_for @user, :gender, :radio_buttons, collection: [:male, :female], label_html: { for: 'gender' }
|
53
53
|
assert_select 'label[for=gender]'
|
54
54
|
end
|
55
55
|
|
56
|
-
test 'input
|
56
|
+
test 'input marks the checked value when using boolean and radios' do
|
57
57
|
@user.active = false
|
58
58
|
with_input_for @user, :active, :radio_buttons
|
59
59
|
assert_no_select 'input[type=radio][value=true][checked]'
|
60
60
|
assert_select 'input[type=radio][value=false][checked]'
|
61
61
|
end
|
62
62
|
|
63
|
-
test 'input
|
63
|
+
test 'input allows overriding collection for radio types' do
|
64
64
|
with_input_for @user, :name, :radio_buttons, collection: ['Jose', 'Carlos']
|
65
65
|
assert_select 'input[type=radio][value=Jose]'
|
66
66
|
assert_select 'input[type=radio][value=Carlos]'
|
@@ -68,7 +68,7 @@ class CollectionRadioButtonsInputTest < ActionView::TestCase
|
|
68
68
|
assert_select 'label.collection_radio_buttons[for=user_name_carlos]', 'Carlos'
|
69
69
|
end
|
70
70
|
|
71
|
-
test 'input
|
71
|
+
test 'input does automatic collection translation for radio types using defaults key' do
|
72
72
|
store_translations(:en, simple_form: { options: { defaults: {
|
73
73
|
gender: { male: 'Male', female: 'Female'}
|
74
74
|
} } } ) do
|
@@ -80,7 +80,7 @@ class CollectionRadioButtonsInputTest < ActionView::TestCase
|
|
80
80
|
end
|
81
81
|
end
|
82
82
|
|
83
|
-
test 'input
|
83
|
+
test 'input does automatic collection translation for radio types using specific object key' do
|
84
84
|
store_translations(:en, simple_form: { options: { user: {
|
85
85
|
gender: { male: 'Male', female: 'Female'}
|
86
86
|
} } } ) do
|
@@ -92,7 +92,7 @@ class CollectionRadioButtonsInputTest < ActionView::TestCase
|
|
92
92
|
end
|
93
93
|
end
|
94
94
|
|
95
|
-
test 'input
|
95
|
+
test 'input does automatic collection translation and preserve html markup' do
|
96
96
|
swap SimpleForm, boolean_style: :nested do
|
97
97
|
store_translations(:en, simple_form: { options: { user: {
|
98
98
|
gender: { male_html: '<strong>Male</strong>', female_html: '<strong>Female</strong>' }
|
@@ -106,7 +106,7 @@ class CollectionRadioButtonsInputTest < ActionView::TestCase
|
|
106
106
|
end
|
107
107
|
end
|
108
108
|
|
109
|
-
test 'input
|
109
|
+
test 'input does automatic collection translation with keys prefixed with _html and a string value' do
|
110
110
|
swap SimpleForm, boolean_style: :nested do
|
111
111
|
store_translations(:en, simple_form: { options: { user: {
|
112
112
|
gender: { male_html: 'Male', female_html: 'Female' }
|
@@ -120,18 +120,18 @@ class CollectionRadioButtonsInputTest < ActionView::TestCase
|
|
120
120
|
end
|
121
121
|
end
|
122
122
|
|
123
|
-
test 'input
|
123
|
+
test 'input marks the current radio value by default' do
|
124
124
|
@user.name = "Carlos"
|
125
125
|
with_input_for @user, :name, :radio_buttons, collection: ['Jose', 'Carlos']
|
126
126
|
assert_select 'input[type=radio][value=Carlos][checked=checked]'
|
127
127
|
end
|
128
128
|
|
129
|
-
test 'input
|
129
|
+
test 'input accepts html options as the last element of collection' do
|
130
130
|
with_input_for @user, :name, :radio_buttons, collection: [['Jose', 'jose', class: 'foo']]
|
131
131
|
assert_select 'input.foo[type=radio][value=jose]'
|
132
132
|
end
|
133
133
|
|
134
|
-
test 'input
|
134
|
+
test 'input allows using a collection with text/value arrays' do
|
135
135
|
with_input_for @user, :name, :radio_buttons, collection: [['Jose', 'jose'], ['Carlos', 'carlos']]
|
136
136
|
assert_select 'input[type=radio][value=jose]'
|
137
137
|
assert_select 'input[type=radio][value=carlos]'
|
@@ -139,13 +139,13 @@ class CollectionRadioButtonsInputTest < ActionView::TestCase
|
|
139
139
|
assert_select 'label.collection_radio_buttons', 'Carlos'
|
140
140
|
end
|
141
141
|
|
142
|
-
test 'input
|
142
|
+
test 'input allows using a collection with a Proc' do
|
143
143
|
with_input_for @user, :name, :radio_buttons, collection: Proc.new { ['Jose', 'Carlos' ] }
|
144
144
|
assert_select 'label.collection_radio_buttons', 'Jose'
|
145
145
|
assert_select 'label.collection_radio_buttons', 'Carlos'
|
146
146
|
end
|
147
147
|
|
148
|
-
test 'input
|
148
|
+
test 'input allows overriding only label method for collections' do
|
149
149
|
with_input_for @user, :name, :radio_buttons,
|
150
150
|
collection: ['Jose', 'Carlos'],
|
151
151
|
label_method: :upcase
|
@@ -153,7 +153,7 @@ class CollectionRadioButtonsInputTest < ActionView::TestCase
|
|
153
153
|
assert_select 'label.collection_radio_buttons', 'CARLOS'
|
154
154
|
end
|
155
155
|
|
156
|
-
test 'input
|
156
|
+
test 'input allows overriding only value method for collections' do
|
157
157
|
with_input_for @user, :name, :radio_buttons,
|
158
158
|
collection: ['Jose', 'Carlos'],
|
159
159
|
value_method: :upcase
|
@@ -161,7 +161,7 @@ class CollectionRadioButtonsInputTest < ActionView::TestCase
|
|
161
161
|
assert_select 'input[type=radio][value=CARLOS]'
|
162
162
|
end
|
163
163
|
|
164
|
-
test 'input
|
164
|
+
test 'input allows overriding label and value method for collections' do
|
165
165
|
with_input_for @user, :name, :radio_buttons,
|
166
166
|
collection: ['Jose', 'Carlos'],
|
167
167
|
label_method: :upcase,
|
@@ -172,7 +172,7 @@ class CollectionRadioButtonsInputTest < ActionView::TestCase
|
|
172
172
|
assert_select 'label.collection_radio_buttons', 'CARLOS'
|
173
173
|
end
|
174
174
|
|
175
|
-
test 'input
|
175
|
+
test 'input allows overriding label and value method using a lambda for collections' do
|
176
176
|
with_input_for @user, :name, :radio_buttons,
|
177
177
|
collection: ['Jose', 'Carlos'],
|
178
178
|
label_method: lambda { |i| i.upcase },
|
@@ -183,13 +183,13 @@ class CollectionRadioButtonsInputTest < ActionView::TestCase
|
|
183
183
|
assert_select 'label.collection_radio_buttons', 'CARLOS'
|
184
184
|
end
|
185
185
|
|
186
|
-
test 'collection input with radio type
|
186
|
+
test 'collection input with radio type generates required html attribute' do
|
187
187
|
with_input_for @user, :name, :radio_buttons, collection: ['Jose', 'Carlos']
|
188
188
|
assert_select 'input[type=radio].required'
|
189
189
|
assert_select 'input[type=radio][required]'
|
190
190
|
end
|
191
191
|
|
192
|
-
test 'collection input with radio type
|
192
|
+
test 'collection input with radio type generates aria-required html attribute' do
|
193
193
|
with_input_for @user, :name, :radio_buttons, collection: ['Jose', 'Carlos']
|
194
194
|
assert_select 'input[type=radio].required'
|
195
195
|
assert_select 'input[type=radio][aria-required=true]'
|
@@ -368,6 +368,23 @@ class CollectionRadioButtonsInputTest < ActionView::TestCase
|
|
368
368
|
end
|
369
369
|
end
|
370
370
|
|
371
|
+
test 'input radio with nested style renders item labels with specified class' do
|
372
|
+
swap SimpleForm, boolean_style: :nested do
|
373
|
+
with_input_for @user, :active, :radio_buttons, item_label_class: "test"
|
374
|
+
|
375
|
+
assert_select 'span.radio > label.test > input'
|
376
|
+
end
|
377
|
+
end
|
378
|
+
|
379
|
+
test 'input radio with nested style and falsey input wrapper renders item labels with specified class' do
|
380
|
+
swap SimpleForm, boolean_style: :nested, item_wrapper_tag: false do
|
381
|
+
with_input_for @user, :active, :radio_buttons, item_label_class: "radio-inline"
|
382
|
+
|
383
|
+
assert_select 'label.radio-inline > input'
|
384
|
+
assert_no_select 'span.radio'
|
385
|
+
end
|
386
|
+
end
|
387
|
+
|
371
388
|
test 'input radio wrapper class are not included when set to falsey' do
|
372
389
|
swap SimpleForm, include_default_input_wrapper_class: false, boolean_style: :nested do
|
373
390
|
with_input_for @user, :gender, :radio_buttons, collection: [:male, :female]
|
@@ -6,14 +6,14 @@ class CollectionSelectInputTest < ActionView::TestCase
|
|
6
6
|
SimpleForm::Inputs::CollectionSelectInput.reset_i18n_cache :boolean_collection
|
7
7
|
end
|
8
8
|
|
9
|
-
test 'input
|
9
|
+
test 'input generates a boolean select with options by default for select types' do
|
10
10
|
with_input_for @user, :active, :select
|
11
11
|
assert_select 'select.select#user_active'
|
12
12
|
assert_select 'select option[value=true]', 'Yes'
|
13
13
|
assert_select 'select option[value=false]', 'No'
|
14
14
|
end
|
15
15
|
|
16
|
-
test 'input as select
|
16
|
+
test 'input as select uses i18n to translate select boolean options' do
|
17
17
|
store_translations(:en, simple_form: { yes: 'Sim', no: 'Não' }) do
|
18
18
|
with_input_for @user, :active, :select
|
19
19
|
assert_select 'select option[value=true]', 'Sim'
|
@@ -21,14 +21,14 @@ class CollectionSelectInputTest < ActionView::TestCase
|
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
24
|
-
test 'input
|
24
|
+
test 'input allows overriding collection for select types' do
|
25
25
|
with_input_for @user, :name, :select, collection: ['Jose', 'Carlos']
|
26
26
|
assert_select 'select.select#user_name'
|
27
27
|
assert_select 'select option', 'Jose'
|
28
28
|
assert_select 'select option', 'Carlos'
|
29
29
|
end
|
30
30
|
|
31
|
-
test 'input
|
31
|
+
test 'input does automatic collection translation for select types using defaults key' do
|
32
32
|
store_translations(:en, simple_form: { options: { defaults: {
|
33
33
|
gender: { male: 'Male', female: 'Female'}
|
34
34
|
} } }) do
|
@@ -39,7 +39,7 @@ class CollectionSelectInputTest < ActionView::TestCase
|
|
39
39
|
end
|
40
40
|
end
|
41
41
|
|
42
|
-
test 'input
|
42
|
+
test 'input does automatic collection translation for select types using specific object key' do
|
43
43
|
store_translations(:en, simple_form: { options: { user: {
|
44
44
|
gender: { male: 'Male', female: 'Female'}
|
45
45
|
} } }) do
|
@@ -50,38 +50,38 @@ class CollectionSelectInputTest < ActionView::TestCase
|
|
50
50
|
end
|
51
51
|
end
|
52
52
|
|
53
|
-
test 'input
|
53
|
+
test 'input marks the selected value by default' do
|
54
54
|
@user.name = "Carlos"
|
55
55
|
with_input_for @user, :name, :select, collection: ['Jose', 'Carlos']
|
56
56
|
assert_select 'select option[selected=selected]', 'Carlos'
|
57
57
|
end
|
58
58
|
|
59
|
-
test 'input
|
59
|
+
test 'input accepts html options as the last element of collection' do
|
60
60
|
with_input_for @user, :name, :select, collection: [['Jose', class: 'foo']]
|
61
61
|
assert_select 'select.select#user_name'
|
62
62
|
assert_select 'select option.foo', 'Jose'
|
63
63
|
end
|
64
64
|
|
65
|
-
test 'input
|
65
|
+
test 'input marks the selected value also when using integers' do
|
66
66
|
@user.age = 18
|
67
67
|
with_input_for @user, :age, :select, collection: 18..60
|
68
68
|
assert_select 'select option[selected=selected]', '18'
|
69
69
|
end
|
70
70
|
|
71
|
-
test 'input
|
71
|
+
test 'input marks the selected value when using booleans and select' do
|
72
72
|
@user.active = false
|
73
73
|
with_input_for @user, :active, :select
|
74
74
|
assert_no_select 'select option[selected][value=true]', 'Yes'
|
75
75
|
assert_select 'select option[selected][value=false]', 'No'
|
76
76
|
end
|
77
77
|
|
78
|
-
test 'input
|
78
|
+
test 'input sets the correct value when using a collection that includes floats' do
|
79
79
|
with_input_for @user, :age, :select, collection: [2.0, 2.5, 3.0, 3.5, 4.0, 4.5]
|
80
80
|
assert_select 'select option[value="2.0"]'
|
81
81
|
assert_select 'select option[value="2.5"]'
|
82
82
|
end
|
83
83
|
|
84
|
-
test 'input
|
84
|
+
test 'input sets the correct values when using a collection that uses mixed values' do
|
85
85
|
with_input_for @user, :age, :select, collection: ["Hello Kitty", 2, 4.5, :johnny, nil, true, false]
|
86
86
|
assert_select 'select option[value="Hello Kitty"]'
|
87
87
|
assert_select 'select option[value="2"]'
|
@@ -92,17 +92,17 @@ class CollectionSelectInputTest < ActionView::TestCase
|
|
92
92
|
assert_select 'select option[value="false"]'
|
93
93
|
end
|
94
94
|
|
95
|
-
test 'input
|
95
|
+
test 'input includes a blank option even if :include_blank is set to false if the collection includes a nil value' do
|
96
96
|
with_input_for @user, :age, :select, collection: [nil], include_blank: false
|
97
97
|
assert_select 'select option[value=""]'
|
98
98
|
end
|
99
99
|
|
100
|
-
test 'input
|
100
|
+
test 'input automatically sets include blank' do
|
101
101
|
with_input_for @user, :age, :select, collection: 18..30
|
102
102
|
assert_select 'select option[value=]', ''
|
103
103
|
end
|
104
104
|
|
105
|
-
test 'input
|
105
|
+
test 'input translates include blank when set to :translate' do
|
106
106
|
store_translations(:en, simple_form: { include_blanks: { user: {
|
107
107
|
age: 'Rather not say'
|
108
108
|
} } }) do
|
@@ -111,7 +111,7 @@ class CollectionSelectInputTest < ActionView::TestCase
|
|
111
111
|
end
|
112
112
|
end
|
113
113
|
|
114
|
-
test 'input
|
114
|
+
test 'input translates include blank with a default' do
|
115
115
|
store_translations(:en, simple_form: { include_blanks: { defaults: {
|
116
116
|
age: 'Rather not say',
|
117
117
|
} } }) do
|
@@ -120,7 +120,7 @@ class CollectionSelectInputTest < ActionView::TestCase
|
|
120
120
|
end
|
121
121
|
end
|
122
122
|
|
123
|
-
test 'input
|
123
|
+
test 'input does not translate include blank when set to a string' do
|
124
124
|
store_translations(:en, simple_form: { include_blanks: { user: {
|
125
125
|
age: 'Rather not say'
|
126
126
|
} } }) do
|
@@ -129,7 +129,7 @@ class CollectionSelectInputTest < ActionView::TestCase
|
|
129
129
|
end
|
130
130
|
end
|
131
131
|
|
132
|
-
test 'input
|
132
|
+
test 'input does not translate include blank when automatically set' do
|
133
133
|
store_translations(:en, simple_form: { include_blanks: { user: {
|
134
134
|
age: 'Rather not say'
|
135
135
|
} } }) do
|
@@ -138,7 +138,7 @@ class CollectionSelectInputTest < ActionView::TestCase
|
|
138
138
|
end
|
139
139
|
end
|
140
140
|
|
141
|
-
test 'input
|
141
|
+
test 'input does not translate include blank when set to true' do
|
142
142
|
store_translations(:en, simple_form: { include_blanks: { user: {
|
143
143
|
age: 'Rather not say'
|
144
144
|
} } }) do
|
@@ -147,7 +147,7 @@ class CollectionSelectInputTest < ActionView::TestCase
|
|
147
147
|
end
|
148
148
|
end
|
149
149
|
|
150
|
-
test 'input
|
150
|
+
test 'input does not translate include blank when set to false' do
|
151
151
|
store_translations(:en, simple_form: { include_blanks: { user: {
|
152
152
|
age: 'Rather not say'
|
153
153
|
} } }) do
|
@@ -156,22 +156,22 @@ class CollectionSelectInputTest < ActionView::TestCase
|
|
156
156
|
end
|
157
157
|
end
|
158
158
|
|
159
|
-
test 'input
|
159
|
+
test 'input does not set include blank if otherwise is told' do
|
160
160
|
with_input_for @user, :age, :select, collection: 18..30, include_blank: false
|
161
161
|
assert_no_select 'select option[value=]'
|
162
162
|
end
|
163
163
|
|
164
|
-
test 'input
|
164
|
+
test 'input does not set include blank if prompt is given' do
|
165
165
|
with_input_for @user, :age, :select, collection: 18..30, prompt: "Please select foo"
|
166
166
|
assert_no_select 'select option[value=]', ''
|
167
167
|
end
|
168
168
|
|
169
|
-
test 'input
|
169
|
+
test 'input does not set include blank if multiple is given' do
|
170
170
|
with_input_for @user, :age, :select, collection: 18..30, input_html: { multiple: true }
|
171
171
|
assert_no_select 'select option[value=]', ''
|
172
172
|
end
|
173
173
|
|
174
|
-
test 'input
|
174
|
+
test 'input translates prompt when set to :translate' do
|
175
175
|
store_translations(:en, simple_form: { prompts: { user: {
|
176
176
|
age: 'Select age:'
|
177
177
|
} } }) do
|
@@ -180,7 +180,7 @@ class CollectionSelectInputTest < ActionView::TestCase
|
|
180
180
|
end
|
181
181
|
end
|
182
182
|
|
183
|
-
test 'input
|
183
|
+
test 'input translates prompt with a default' do
|
184
184
|
store_translations(:en, simple_form: { prompts: { defaults: {
|
185
185
|
age: 'Select age:',
|
186
186
|
} } }) do
|
@@ -189,7 +189,7 @@ class CollectionSelectInputTest < ActionView::TestCase
|
|
189
189
|
end
|
190
190
|
end
|
191
191
|
|
192
|
-
test 'input
|
192
|
+
test 'input does not translate prompt when set to a string' do
|
193
193
|
store_translations(:en, simple_form: { prompts: { user: {
|
194
194
|
age: 'Select age:'
|
195
195
|
} } }) do
|
@@ -198,7 +198,7 @@ class CollectionSelectInputTest < ActionView::TestCase
|
|
198
198
|
end
|
199
199
|
end
|
200
200
|
|
201
|
-
test 'input
|
201
|
+
test 'input does not translate prompt when set to false' do
|
202
202
|
store_translations(:en, simple_form: { prompts: { user: {
|
203
203
|
age: 'Select age:'
|
204
204
|
} } }) do
|
@@ -207,7 +207,7 @@ class CollectionSelectInputTest < ActionView::TestCase
|
|
207
207
|
end
|
208
208
|
end
|
209
209
|
|
210
|
-
test 'input
|
210
|
+
test 'input uses Rails prompt translation as a fallback' do
|
211
211
|
store_translations(:en, helpers: { select: {
|
212
212
|
prompt: 'Select value:'
|
213
213
|
} }) do
|
@@ -216,14 +216,14 @@ class CollectionSelectInputTest < ActionView::TestCase
|
|
216
216
|
end
|
217
217
|
end
|
218
218
|
|
219
|
-
test 'input
|
219
|
+
test 'input detects label and value on collections' do
|
220
220
|
users = [User.build(id: 1, name: "Jose"), User.build(id: 2, name: "Carlos")]
|
221
221
|
with_input_for @user, :description, :select, collection: users
|
222
222
|
assert_select 'select option[value=1]', 'Jose'
|
223
223
|
assert_select 'select option[value=2]', 'Carlos'
|
224
224
|
end
|
225
225
|
|
226
|
-
test 'input
|
226
|
+
test 'input disables the anothers components when the option is a object' do
|
227
227
|
with_input_for @user, :description, :select, collection: ["Jose", "Carlos"], disabled: true
|
228
228
|
assert_no_select 'select option[value=Jose][disabled=disabled]', 'Jose'
|
229
229
|
assert_no_select 'select option[value=Carlos][disabled=disabled]', 'Carlos'
|
@@ -231,7 +231,7 @@ class CollectionSelectInputTest < ActionView::TestCase
|
|
231
231
|
assert_select 'div.disabled'
|
232
232
|
end
|
233
233
|
|
234
|
-
test 'input
|
234
|
+
test 'input does not disable the anothers components when the option is a object' do
|
235
235
|
with_input_for @user, :description, :select, collection: ["Jose", "Carlos"], disabled: 'Jose'
|
236
236
|
assert_select 'select option[value=Jose][disabled=disabled]', 'Jose'
|
237
237
|
assert_no_select 'select option[value=Carlos][disabled=disabled]', 'Carlos'
|
@@ -239,7 +239,7 @@ class CollectionSelectInputTest < ActionView::TestCase
|
|
239
239
|
assert_no_select 'div.disabled'
|
240
240
|
end
|
241
241
|
|
242
|
-
test 'input
|
242
|
+
test 'input allows overriding label and value method using a lambda for collection selects' do
|
243
243
|
with_input_for @user, :name, :select,
|
244
244
|
collection: ['Jose', 'Carlos'],
|
245
245
|
label_method: lambda { |i| i.upcase },
|
@@ -248,7 +248,7 @@ class CollectionSelectInputTest < ActionView::TestCase
|
|
248
248
|
assert_select 'select option[value=carlos]', "CARLOS"
|
249
249
|
end
|
250
250
|
|
251
|
-
test 'input
|
251
|
+
test 'input allows overriding only label but not value method using a lambda for collection select' do
|
252
252
|
with_input_for @user, :name, :select,
|
253
253
|
collection: ['Jose', 'Carlos'],
|
254
254
|
label_method: lambda { |i| i.upcase }
|
@@ -256,7 +256,7 @@ class CollectionSelectInputTest < ActionView::TestCase
|
|
256
256
|
assert_select 'select option[value=Carlos]', "CARLOS"
|
257
257
|
end
|
258
258
|
|
259
|
-
test 'input
|
259
|
+
test 'input allows overriding only value but not label method using a lambda for collection select' do
|
260
260
|
with_input_for @user, :name, :select,
|
261
261
|
collection: ['Jose', 'Carlos'],
|
262
262
|
value_method: lambda { |i| i.downcase }
|
@@ -264,39 +264,39 @@ class CollectionSelectInputTest < ActionView::TestCase
|
|
264
264
|
assert_select 'select option[value=carlos]', "Carlos"
|
265
265
|
end
|
266
266
|
|
267
|
-
test 'input
|
267
|
+
test 'input allows symbols for collections' do
|
268
268
|
with_input_for @user, :name, :select, collection: [:jose, :carlos]
|
269
269
|
assert_select 'select.select#user_name'
|
270
270
|
assert_select 'select option[value=jose]', 'jose'
|
271
271
|
assert_select 'select option[value=carlos]', 'carlos'
|
272
272
|
end
|
273
273
|
|
274
|
-
test 'collection input with select type
|
274
|
+
test 'collection input with select type generates required html attribute only with blank option' do
|
275
275
|
with_input_for @user, :name, :select, include_blank: true, collection: ['Jose', 'Carlos']
|
276
276
|
assert_select 'select.required'
|
277
277
|
assert_select 'select[required]'
|
278
278
|
end
|
279
279
|
|
280
|
-
test 'collection input with select type
|
280
|
+
test 'collection input with select type generates required html attribute only with blank option or prompt' do
|
281
281
|
with_input_for @user, :name, :select, prompt: 'Name...', collection: ['Jose', 'Carlos']
|
282
282
|
assert_select 'select.required'
|
283
283
|
assert_select 'select[required]'
|
284
284
|
end
|
285
285
|
|
286
|
-
test 'collection input with select type
|
286
|
+
test 'collection input with select type does not generate required html attribute without blank option' do
|
287
287
|
with_input_for @user, :name, :select, include_blank: false, collection: ['Jose', 'Carlos']
|
288
288
|
assert_select 'select.required'
|
289
289
|
assert_no_select 'select[required]'
|
290
290
|
assert_no_select 'select[aria-required=true]'
|
291
291
|
end
|
292
292
|
|
293
|
-
test 'collection input with select type with multiple attribute
|
293
|
+
test 'collection input with select type with multiple attribute generates required html attribute without blank option' do
|
294
294
|
with_input_for @user, :name, :select, include_blank: false, input_html: { multiple: true }, collection: ['Jose', 'Carlos']
|
295
295
|
assert_select 'select.required'
|
296
296
|
assert_select 'select[required]'
|
297
297
|
end
|
298
298
|
|
299
|
-
test 'collection input with select type with multiple attribute
|
299
|
+
test 'collection input with select type with multiple attribute generates required html attribute with blank option' do
|
300
300
|
with_input_for @user, :name, :select, include_blank: true, input_html: { multiple: true }, collection: ['Jose', 'Carlos']
|
301
301
|
assert_select 'select.required'
|
302
302
|
assert_select 'select[required]'
|
@@ -326,7 +326,7 @@ class CollectionSelectInputTest < ActionView::TestCase
|
|
326
326
|
assert_select 'select[aria-required]'
|
327
327
|
end
|
328
328
|
|
329
|
-
test 'input
|
329
|
+
test 'input allows disabled options with a lambda for collection select' do
|
330
330
|
with_input_for @user, :name, :select, collection: ["Carlos", "Antonio"],
|
331
331
|
disabled: lambda { |x| x == "Carlos" }
|
332
332
|
assert_select 'select option[value=Carlos][disabled=disabled]', 'Carlos'
|
@@ -334,7 +334,7 @@ class CollectionSelectInputTest < ActionView::TestCase
|
|
334
334
|
assert_no_select 'select option[value=Antonio][disabled]'
|
335
335
|
end
|
336
336
|
|
337
|
-
test 'input
|
337
|
+
test 'input allows disabled and label method with lambdas for collection select' do
|
338
338
|
with_input_for @user, :name, :select, collection: ["Carlos", "Antonio"],
|
339
339
|
disabled: lambda { |x| x == "Carlos" }, label_method: lambda { |x| x.upcase }
|
340
340
|
assert_select 'select option[value=Carlos][disabled=disabled]', 'CARLOS'
|
@@ -342,7 +342,7 @@ class CollectionSelectInputTest < ActionView::TestCase
|
|
342
342
|
assert_no_select 'select option[value=Antonio][disabled]'
|
343
343
|
end
|
344
344
|
|
345
|
-
test 'input
|
345
|
+
test 'input allows a non lambda disabled option with lambda label method for collections' do
|
346
346
|
with_input_for @user, :name, :select, collection: ["Carlos", "Antonio"],
|
347
347
|
disabled: "Carlos", label_method: lambda { |x| x.upcase }
|
348
348
|
assert_select 'select option[value=Carlos][disabled=disabled]', 'CARLOS'
|
@@ -350,7 +350,7 @@ class CollectionSelectInputTest < ActionView::TestCase
|
|
350
350
|
assert_no_select 'select option[value=Antonio][disabled]'
|
351
351
|
end
|
352
352
|
|
353
|
-
test 'input
|
353
|
+
test 'input allows selected and label method with lambdas for collection select' do
|
354
354
|
with_input_for @user, :name, :select, collection: ["Carlos", "Antonio"],
|
355
355
|
selected: lambda { |x| x == "Carlos" }, label_method: lambda { |x| x.upcase }
|
356
356
|
assert_select 'select option[value=Carlos][selected=selected]', 'CARLOS'
|
@@ -358,7 +358,7 @@ class CollectionSelectInputTest < ActionView::TestCase
|
|
358
358
|
assert_no_select 'select option[value=Antonio][selected]'
|
359
359
|
end
|
360
360
|
|
361
|
-
test 'input
|
361
|
+
test 'input allows a non lambda selected option with lambda label method for collection select' do
|
362
362
|
with_input_for @user, :name, :select, collection: ["Carlos", "Antonio"],
|
363
363
|
selected: "Carlos", label_method: lambda { |x| x.upcase }
|
364
364
|
assert_select 'select option[value=Carlos][selected=selected]', 'CARLOS'
|
@@ -366,7 +366,7 @@ class CollectionSelectInputTest < ActionView::TestCase
|
|
366
366
|
assert_no_select 'select option[value=Antonio][selected]'
|
367
367
|
end
|
368
368
|
|
369
|
-
test 'input
|
369
|
+
test 'input does not override default selection through attribute value with label method as lambda for collection select' do
|
370
370
|
@user.name = "Carlos"
|
371
371
|
with_input_for @user, :name, :select, collection: ["Carlos", "Antonio"],
|
372
372
|
label_method: lambda { |x| x.upcase }
|