simple_form 2.1.3 → 3.0.0.rc
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +13 -50
- data/README.md +140 -116
- data/lib/generators/simple_form/install_generator.rb +4 -4
- data/lib/generators/simple_form/templates/README +2 -2
- data/lib/generators/simple_form/templates/config/initializers/simple_form.rb +13 -13
- data/lib/generators/simple_form/templates/config/initializers/simple_form_bootstrap.rb +16 -16
- data/lib/generators/simple_form/templates/config/initializers/simple_form_foundation.rb +3 -3
- data/lib/simple_form/action_view_extensions/builder.rb +1 -320
- data/lib/simple_form/action_view_extensions/form_helper.rb +2 -9
- data/lib/simple_form/components/errors.rb +1 -7
- data/lib/simple_form/components/hints.rb +2 -7
- data/lib/simple_form/components/html5.rb +5 -2
- data/lib/simple_form/components/labels.rb +4 -4
- data/lib/simple_form/components/maxlength.rb +1 -8
- data/lib/simple_form/components/pattern.rb +2 -2
- data/lib/simple_form/components.rb +1 -1
- data/lib/simple_form/error_notification.rb +2 -2
- data/lib/simple_form/form_builder.rb +148 -50
- data/lib/simple_form/helpers.rb +1 -1
- data/lib/simple_form/inputs/base.rb +3 -10
- data/lib/simple_form/inputs/block_input.rb +1 -1
- data/lib/simple_form/inputs/boolean_input.rb +6 -6
- data/lib/simple_form/inputs/collection_input.rb +7 -7
- data/lib/simple_form/inputs/numeric_input.rb +0 -6
- data/lib/simple_form/inputs/password_input.rb +0 -1
- data/lib/simple_form/inputs/string_input.rb +0 -1
- data/lib/simple_form/railtie.rb +7 -0
- data/lib/simple_form/tags.rb +61 -0
- data/lib/simple_form/version.rb +1 -1
- data/lib/simple_form/wrappers/builder.rb +5 -29
- data/lib/simple_form/wrappers/many.rb +1 -1
- data/lib/simple_form/wrappers/root.rb +1 -1
- data/lib/simple_form/wrappers.rb +1 -1
- data/lib/simple_form.rb +39 -47
- data/test/action_view_extensions/builder_test.rb +75 -95
- data/test/action_view_extensions/form_helper_test.rb +25 -16
- data/test/components/label_test.rb +46 -46
- data/test/form_builder/association_test.rb +39 -29
- data/test/form_builder/button_test.rb +4 -4
- data/test/form_builder/error_notification_test.rb +8 -8
- data/test/form_builder/error_test.rb +18 -65
- data/test/form_builder/general_test.rb +60 -74
- data/test/form_builder/hint_test.rb +23 -29
- data/test/form_builder/input_field_test.rb +12 -12
- data/test/form_builder/label_test.rb +6 -16
- data/test/form_builder/wrapper_test.rb +21 -21
- data/test/inputs/boolean_input_test.rb +23 -35
- data/test/inputs/collection_check_boxes_input_test.rb +61 -55
- data/test/inputs/collection_radio_buttons_input_test.rb +76 -79
- data/test/inputs/collection_select_input_test.rb +70 -51
- data/test/inputs/datetime_input_test.rb +17 -11
- data/test/inputs/disabled_test.rb +10 -10
- data/test/inputs/discovery_test.rb +4 -4
- data/test/inputs/file_input_test.rb +1 -1
- data/test/inputs/general_test.rb +12 -12
- data/test/inputs/grouped_collection_select_input_test.rb +20 -20
- data/test/inputs/hidden_input_test.rb +3 -2
- data/test/inputs/numeric_input_test.rb +3 -3
- data/test/inputs/priority_input_test.rb +9 -3
- data/test/inputs/readonly_test.rb +12 -12
- data/test/inputs/required_test.rb +5 -5
- data/test/inputs/string_input_test.rb +15 -25
- data/test/inputs/text_input_test.rb +1 -1
- data/test/support/misc_helpers.rb +46 -24
- data/test/support/mock_controller.rb +6 -6
- data/test/support/models.rb +62 -64
- data/test/test_helper.rb +20 -24
- metadata +37 -23
- data/lib/simple_form/core_ext/hash.rb +0 -16
|
@@ -7,27 +7,33 @@ class CollectionCheckBoxesInputTest < ActionView::TestCase
|
|
|
7
7
|
end
|
|
8
8
|
|
|
9
9
|
test 'input check boxes should not include for attribute by default' do
|
|
10
|
-
with_input_for @user, :gender, :check_boxes, :
|
|
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
15
|
test 'input check boxes should include for attribute when giving as html option' do
|
|
16
|
-
with_input_for @user, :gender, :check_boxes, :
|
|
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
20
|
test 'collection input with check_boxes type should not generate required html attribute' do
|
|
21
|
-
with_input_for @user, :name, :check_boxes, :
|
|
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 should not generate aria-required html attribute' do
|
|
27
|
+
with_input_for @user, :name, :check_boxes, collection: ['Jose', 'Carlos']
|
|
28
|
+
assert_select 'input.required'
|
|
29
|
+
assert_no_select 'input[aria-required]'
|
|
30
|
+
end
|
|
31
|
+
|
|
26
32
|
test 'input should do automatic collection translation for check_box types using defaults key' do
|
|
27
|
-
store_translations(:en, :
|
|
28
|
-
:
|
|
33
|
+
store_translations(:en, simple_form: { options: { defaults: {
|
|
34
|
+
gender: { male: 'Male', female: 'Female'}
|
|
29
35
|
} } } ) do
|
|
30
|
-
with_input_for @user, :gender, :check_boxes, :
|
|
36
|
+
with_input_for @user, :gender, :check_boxes, collection: [:male, :female]
|
|
31
37
|
assert_select 'input[type=checkbox][value=male]'
|
|
32
38
|
assert_select 'input[type=checkbox][value=female]'
|
|
33
39
|
assert_select 'label.collection_check_boxes', 'Male'
|
|
@@ -36,10 +42,10 @@ class CollectionCheckBoxesInputTest < ActionView::TestCase
|
|
|
36
42
|
end
|
|
37
43
|
|
|
38
44
|
test 'input should do automatic collection translation for check_box types using specific object key' do
|
|
39
|
-
store_translations(:en, :
|
|
40
|
-
:
|
|
45
|
+
store_translations(:en, simple_form: { options: { user: {
|
|
46
|
+
gender: { male: 'Male', female: 'Female'}
|
|
41
47
|
} } } ) do
|
|
42
|
-
with_input_for @user, :gender, :check_boxes, :
|
|
48
|
+
with_input_for @user, :gender, :check_boxes, collection: [:male, :female]
|
|
43
49
|
assert_select 'input[type=checkbox][value=male]'
|
|
44
50
|
assert_select 'input[type=checkbox][value=female]'
|
|
45
51
|
assert_select 'label.collection_check_boxes', 'Male'
|
|
@@ -50,100 +56,100 @@ class CollectionCheckBoxesInputTest < ActionView::TestCase
|
|
|
50
56
|
test 'input check boxes does not wrap the collection by default' do
|
|
51
57
|
with_input_for @user, :active, :check_boxes
|
|
52
58
|
|
|
53
|
-
assert_select 'form input[type=checkbox]', :
|
|
59
|
+
assert_select 'form input[type=checkbox]', count: 2
|
|
54
60
|
assert_no_select 'form ul'
|
|
55
61
|
end
|
|
56
62
|
|
|
57
63
|
test 'input check boxes wraps the collection in the configured collection wrapper tag' do
|
|
58
|
-
swap SimpleForm, :
|
|
64
|
+
swap SimpleForm, collection_wrapper_tag: :ul do
|
|
59
65
|
with_input_for @user, :active, :check_boxes
|
|
60
66
|
|
|
61
|
-
assert_select 'form ul input[type=checkbox]', :
|
|
67
|
+
assert_select 'form ul input[type=checkbox]', count: 2
|
|
62
68
|
end
|
|
63
69
|
end
|
|
64
70
|
|
|
65
71
|
test 'input check boxes does not wrap the collection when configured with falsy values' do
|
|
66
|
-
swap SimpleForm, :
|
|
72
|
+
swap SimpleForm, collection_wrapper_tag: false do
|
|
67
73
|
with_input_for @user, :active, :check_boxes
|
|
68
74
|
|
|
69
|
-
assert_select 'form input[type=checkbox]', :
|
|
75
|
+
assert_select 'form input[type=checkbox]', count: 2
|
|
70
76
|
assert_no_select 'form ul'
|
|
71
77
|
end
|
|
72
78
|
end
|
|
73
79
|
|
|
74
80
|
test 'input check boxes allows overriding the collection wrapper tag at input level' do
|
|
75
|
-
swap SimpleForm, :
|
|
76
|
-
with_input_for @user, :active, :check_boxes, :
|
|
81
|
+
swap SimpleForm, collection_wrapper_tag: :ul do
|
|
82
|
+
with_input_for @user, :active, :check_boxes, collection_wrapper_tag: :section
|
|
77
83
|
|
|
78
|
-
assert_select 'form section input[type=checkbox]', :
|
|
84
|
+
assert_select 'form section input[type=checkbox]', count: 2
|
|
79
85
|
assert_no_select 'form ul'
|
|
80
86
|
end
|
|
81
87
|
end
|
|
82
88
|
|
|
83
89
|
test 'input check boxes allows disabling the collection wrapper tag at input level' do
|
|
84
|
-
swap SimpleForm, :
|
|
85
|
-
with_input_for @user, :active, :check_boxes, :
|
|
90
|
+
swap SimpleForm, collection_wrapper_tag: :ul do
|
|
91
|
+
with_input_for @user, :active, :check_boxes, collection_wrapper_tag: false
|
|
86
92
|
|
|
87
|
-
assert_select 'form input[type=checkbox]', :
|
|
93
|
+
assert_select 'form input[type=checkbox]', count: 2
|
|
88
94
|
assert_no_select 'form ul'
|
|
89
95
|
end
|
|
90
96
|
end
|
|
91
97
|
|
|
92
98
|
test 'input check boxes renders the wrapper tag with the configured wrapper class' do
|
|
93
|
-
swap SimpleForm, :
|
|
99
|
+
swap SimpleForm, collection_wrapper_tag: :ul, collection_wrapper_class: 'inputs-list' do
|
|
94
100
|
with_input_for @user, :active, :check_boxes
|
|
95
101
|
|
|
96
|
-
assert_select 'form ul.inputs-list input[type=checkbox]', :
|
|
102
|
+
assert_select 'form ul.inputs-list input[type=checkbox]', count: 2
|
|
97
103
|
end
|
|
98
104
|
end
|
|
99
105
|
|
|
100
106
|
test 'input check boxes allows giving wrapper class at input level only' do
|
|
101
|
-
swap SimpleForm, :
|
|
102
|
-
with_input_for @user, :active, :check_boxes, :
|
|
107
|
+
swap SimpleForm, collection_wrapper_tag: :ul do
|
|
108
|
+
with_input_for @user, :active, :check_boxes, collection_wrapper_class: 'items-list'
|
|
103
109
|
|
|
104
|
-
assert_select 'form ul.items-list input[type=checkbox]', :
|
|
110
|
+
assert_select 'form ul.items-list input[type=checkbox]', count: 2
|
|
105
111
|
end
|
|
106
112
|
end
|
|
107
113
|
|
|
108
114
|
test 'input check boxes uses both configured and given wrapper classes for wrapper tag' do
|
|
109
|
-
swap SimpleForm, :
|
|
110
|
-
with_input_for @user, :active, :check_boxes, :
|
|
115
|
+
swap SimpleForm, collection_wrapper_tag: :ul, collection_wrapper_class: 'inputs-list' do
|
|
116
|
+
with_input_for @user, :active, :check_boxes, collection_wrapper_class: 'items-list'
|
|
111
117
|
|
|
112
|
-
assert_select 'form ul.inputs-list.items-list input[type=checkbox]', :
|
|
118
|
+
assert_select 'form ul.inputs-list.items-list input[type=checkbox]', count: 2
|
|
113
119
|
end
|
|
114
120
|
end
|
|
115
121
|
|
|
116
122
|
test 'input check boxes wraps each item in the configured item wrapper tag' do
|
|
117
|
-
swap SimpleForm, :
|
|
123
|
+
swap SimpleForm, item_wrapper_tag: :li do
|
|
118
124
|
with_input_for @user, :active, :check_boxes
|
|
119
125
|
|
|
120
|
-
assert_select 'form li input[type=checkbox]', :
|
|
126
|
+
assert_select 'form li input[type=checkbox]', count: 2
|
|
121
127
|
end
|
|
122
128
|
end
|
|
123
129
|
|
|
124
130
|
test 'input check boxes does not wrap items when configured with falsy values' do
|
|
125
|
-
swap SimpleForm, :
|
|
131
|
+
swap SimpleForm, item_wrapper_tag: false do
|
|
126
132
|
with_input_for @user, :active, :check_boxes
|
|
127
133
|
|
|
128
|
-
assert_select 'form input[type=checkbox]', :
|
|
134
|
+
assert_select 'form input[type=checkbox]', count: 2
|
|
129
135
|
assert_no_select 'form li'
|
|
130
136
|
end
|
|
131
137
|
end
|
|
132
138
|
|
|
133
139
|
test 'input check boxes allows overriding the item wrapper tag at input level' do
|
|
134
|
-
swap SimpleForm, :
|
|
135
|
-
with_input_for @user, :active, :check_boxes, :
|
|
140
|
+
swap SimpleForm, item_wrapper_tag: :li do
|
|
141
|
+
with_input_for @user, :active, :check_boxes, item_wrapper_tag: :dl
|
|
136
142
|
|
|
137
|
-
assert_select 'form dl input[type=checkbox]', :
|
|
143
|
+
assert_select 'form dl input[type=checkbox]', count: 2
|
|
138
144
|
assert_no_select 'form li'
|
|
139
145
|
end
|
|
140
146
|
end
|
|
141
147
|
|
|
142
148
|
test 'input check boxes allows disabling the item wrapper tag at input level' do
|
|
143
|
-
swap SimpleForm, :
|
|
144
|
-
with_input_for @user, :active, :check_boxes, :
|
|
149
|
+
swap SimpleForm, item_wrapper_tag: :ul do
|
|
150
|
+
with_input_for @user, :active, :check_boxes, item_wrapper_tag: false
|
|
145
151
|
|
|
146
|
-
assert_select 'form input[type=checkbox]', :
|
|
152
|
+
assert_select 'form input[type=checkbox]', count: 2
|
|
147
153
|
assert_no_select 'form li'
|
|
148
154
|
end
|
|
149
155
|
end
|
|
@@ -151,41 +157,41 @@ class CollectionCheckBoxesInputTest < ActionView::TestCase
|
|
|
151
157
|
test 'input check boxes wraps items in a span tag by default' do
|
|
152
158
|
with_input_for @user, :active, :check_boxes
|
|
153
159
|
|
|
154
|
-
assert_select 'form span input[type=checkbox]', :
|
|
160
|
+
assert_select 'form span input[type=checkbox]', count: 2
|
|
155
161
|
end
|
|
156
162
|
|
|
157
163
|
test 'input check boxes renders the item wrapper tag with a default class "checkbox"' do
|
|
158
|
-
with_input_for @user, :active, :check_boxes, :
|
|
164
|
+
with_input_for @user, :active, :check_boxes, item_wrapper_tag: :li
|
|
159
165
|
|
|
160
|
-
assert_select 'form li.checkbox input[type=checkbox]', :
|
|
166
|
+
assert_select 'form li.checkbox input[type=checkbox]', count: 2
|
|
161
167
|
end
|
|
162
168
|
|
|
163
169
|
test 'input check boxes renders the item wrapper tag with the configured item wrapper class' do
|
|
164
|
-
swap SimpleForm, :
|
|
170
|
+
swap SimpleForm, item_wrapper_tag: :li, item_wrapper_class: 'item' do
|
|
165
171
|
with_input_for @user, :active, :check_boxes
|
|
166
172
|
|
|
167
|
-
assert_select 'form li.checkbox.item input[type=checkbox]', :
|
|
173
|
+
assert_select 'form li.checkbox.item input[type=checkbox]', count: 2
|
|
168
174
|
end
|
|
169
175
|
end
|
|
170
176
|
|
|
171
177
|
test 'input check boxes allows giving item wrapper class at input level only' do
|
|
172
|
-
swap SimpleForm, :
|
|
173
|
-
with_input_for @user, :active, :check_boxes, :
|
|
178
|
+
swap SimpleForm, item_wrapper_tag: :li do
|
|
179
|
+
with_input_for @user, :active, :check_boxes, item_wrapper_class: 'item'
|
|
174
180
|
|
|
175
|
-
assert_select 'form li.checkbox.item input[type=checkbox]', :
|
|
181
|
+
assert_select 'form li.checkbox.item input[type=checkbox]', count: 2
|
|
176
182
|
end
|
|
177
183
|
end
|
|
178
184
|
|
|
179
185
|
test 'input check boxes uses both configured and given item wrapper classes for item wrapper tag' do
|
|
180
|
-
swap SimpleForm, :
|
|
181
|
-
with_input_for @user, :active, :check_boxes, :
|
|
186
|
+
swap SimpleForm, item_wrapper_tag: :li, item_wrapper_class: 'item' do
|
|
187
|
+
with_input_for @user, :active, :check_boxes, item_wrapper_class: 'inline'
|
|
182
188
|
|
|
183
|
-
assert_select 'form li.checkbox.item.inline input[type=checkbox]', :
|
|
189
|
+
assert_select 'form li.checkbox.item.inline input[type=checkbox]', count: 2
|
|
184
190
|
end
|
|
185
191
|
end
|
|
186
192
|
|
|
187
193
|
test 'input check boxes respects the nested boolean style config, generating nested label > input' do
|
|
188
|
-
swap SimpleForm, :
|
|
194
|
+
swap SimpleForm, boolean_style: :nested do
|
|
189
195
|
with_input_for @user, :active, :check_boxes
|
|
190
196
|
|
|
191
197
|
assert_select 'label.checkbox > input#user_active_true[type=checkbox]'
|
|
@@ -197,7 +203,7 @@ class CollectionCheckBoxesInputTest < ActionView::TestCase
|
|
|
197
203
|
end
|
|
198
204
|
|
|
199
205
|
test 'input check boxes with nested style overrides configured item wrapper tag, forcing the :label' do
|
|
200
|
-
swap SimpleForm, :
|
|
206
|
+
swap SimpleForm, boolean_style: :nested, item_wrapper_tag: :li do
|
|
201
207
|
with_input_for @user, :active, :check_boxes
|
|
202
208
|
|
|
203
209
|
assert_select 'label.checkbox > input'
|
|
@@ -206,8 +212,8 @@ class CollectionCheckBoxesInputTest < ActionView::TestCase
|
|
|
206
212
|
end
|
|
207
213
|
|
|
208
214
|
test 'input check boxes with nested style overrides given item wrapper tag, forcing the :label' do
|
|
209
|
-
swap SimpleForm, :
|
|
210
|
-
with_input_for @user, :active, :check_boxes, :
|
|
215
|
+
swap SimpleForm, boolean_style: :nested do
|
|
216
|
+
with_input_for @user, :active, :check_boxes, item_wrapper_tag: :li
|
|
211
217
|
|
|
212
218
|
assert_select 'label.checkbox > input'
|
|
213
219
|
assert_no_select 'li'
|
|
@@ -215,8 +221,8 @@ class CollectionCheckBoxesInputTest < ActionView::TestCase
|
|
|
215
221
|
end
|
|
216
222
|
|
|
217
223
|
test 'input check boxes with nested style accepts giving extra wrapper classes' do
|
|
218
|
-
swap SimpleForm, :
|
|
219
|
-
with_input_for @user, :active, :check_boxes, :
|
|
224
|
+
swap SimpleForm, boolean_style: :nested do
|
|
225
|
+
with_input_for @user, :active, :check_boxes, item_wrapper_class: "inline"
|
|
220
226
|
|
|
221
227
|
assert_select 'label.checkbox.inline > input'
|
|
222
228
|
end
|
|
@@ -6,15 +6,6 @@ class CollectionRadioButtonsInputTest < ActionView::TestCase
|
|
|
6
6
|
SimpleForm::Inputs::CollectionRadioButtonsInput.reset_i18n_cache :boolean_collection
|
|
7
7
|
end
|
|
8
8
|
|
|
9
|
-
test 'input :as => :radio is deprecated in favor of :as => :radio_buttons' do
|
|
10
|
-
assert_deprecated "[SIMPLE_FORM] Using `:as => :radio` as " \
|
|
11
|
-
"input type is deprecated, please change it to `:as => :radio_buttons`." do
|
|
12
|
-
with_input_for @user, :active, :radio
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
assert_select 'input[type=radio].radio_buttons', :count => 2
|
|
16
|
-
end
|
|
17
|
-
|
|
18
9
|
test 'input should generate boolean radio buttons by default for radio types' do
|
|
19
10
|
with_input_for @user, :active, :radio_buttons
|
|
20
11
|
assert_select 'input[type=radio][value=true].radio_buttons#user_active_true'
|
|
@@ -28,7 +19,7 @@ class CollectionRadioButtonsInputTest < ActionView::TestCase
|
|
|
28
19
|
end
|
|
29
20
|
|
|
30
21
|
test 'input as radio should use i18n to translate internal labels' do
|
|
31
|
-
store_translations(:en, :
|
|
22
|
+
store_translations(:en, simple_form: { yes: 'Sim', no: 'Não' }) do
|
|
32
23
|
with_input_for @user, :active, :radio_buttons
|
|
33
24
|
assert_select 'label[for=user_active_true]', 'Sim'
|
|
34
25
|
assert_select 'label[for=user_active_false]', 'Não'
|
|
@@ -36,13 +27,13 @@ class CollectionRadioButtonsInputTest < ActionView::TestCase
|
|
|
36
27
|
end
|
|
37
28
|
|
|
38
29
|
test 'input radio should not include for attribute by default' do
|
|
39
|
-
with_input_for @user, :gender, :radio_buttons, :
|
|
30
|
+
with_input_for @user, :gender, :radio_buttons, collection: [:male, :female]
|
|
40
31
|
assert_select 'label'
|
|
41
32
|
assert_no_select 'label[for=user_gender]'
|
|
42
33
|
end
|
|
43
34
|
|
|
44
35
|
test 'input radio should include for attribute when giving as html option' do
|
|
45
|
-
with_input_for @user, :gender, :radio_buttons, :
|
|
36
|
+
with_input_for @user, :gender, :radio_buttons, collection: [:male, :female], label_html: { for: 'gender' }
|
|
46
37
|
assert_select 'label[for=gender]'
|
|
47
38
|
end
|
|
48
39
|
|
|
@@ -54,7 +45,7 @@ class CollectionRadioButtonsInputTest < ActionView::TestCase
|
|
|
54
45
|
end
|
|
55
46
|
|
|
56
47
|
test 'input should allow overriding collection for radio types' do
|
|
57
|
-
with_input_for @user, :name, :radio_buttons, :
|
|
48
|
+
with_input_for @user, :name, :radio_buttons, collection: ['Jose', 'Carlos']
|
|
58
49
|
assert_select 'input[type=radio][value=Jose]'
|
|
59
50
|
assert_select 'input[type=radio][value=Carlos]'
|
|
60
51
|
assert_select 'label.collection_radio_buttons', 'Jose'
|
|
@@ -62,10 +53,10 @@ class CollectionRadioButtonsInputTest < ActionView::TestCase
|
|
|
62
53
|
end
|
|
63
54
|
|
|
64
55
|
test 'input should do automatic collection translation for radio types using defaults key' do
|
|
65
|
-
store_translations(:en, :
|
|
66
|
-
:
|
|
56
|
+
store_translations(:en, simple_form: { options: { defaults: {
|
|
57
|
+
gender: { male: 'Male', female: 'Female'}
|
|
67
58
|
} } } ) do
|
|
68
|
-
with_input_for @user, :gender, :radio_buttons, :
|
|
59
|
+
with_input_for @user, :gender, :radio_buttons, collection: [:male, :female]
|
|
69
60
|
assert_select 'input[type=radio][value=male]'
|
|
70
61
|
assert_select 'input[type=radio][value=female]'
|
|
71
62
|
assert_select 'label.collection_radio_buttons', 'Male'
|
|
@@ -74,10 +65,10 @@ class CollectionRadioButtonsInputTest < ActionView::TestCase
|
|
|
74
65
|
end
|
|
75
66
|
|
|
76
67
|
test 'input should do automatic collection translation for radio types using specific object key' do
|
|
77
|
-
store_translations(:en, :
|
|
78
|
-
:
|
|
68
|
+
store_translations(:en, simple_form: { options: { user: {
|
|
69
|
+
gender: { male: 'Male', female: 'Female'}
|
|
79
70
|
} } } ) do
|
|
80
|
-
with_input_for @user, :gender, :radio_buttons, :
|
|
71
|
+
with_input_for @user, :gender, :radio_buttons, collection: [:male, :female]
|
|
81
72
|
assert_select 'input[type=radio][value=male]'
|
|
82
73
|
assert_select 'input[type=radio][value=female]'
|
|
83
74
|
assert_select 'label.collection_radio_buttons', 'Male'
|
|
@@ -87,12 +78,12 @@ class CollectionRadioButtonsInputTest < ActionView::TestCase
|
|
|
87
78
|
|
|
88
79
|
test 'input should mark the current radio value by default' do
|
|
89
80
|
@user.name = "Carlos"
|
|
90
|
-
with_input_for @user, :name, :radio_buttons, :
|
|
81
|
+
with_input_for @user, :name, :radio_buttons, collection: ['Jose', 'Carlos']
|
|
91
82
|
assert_select 'input[type=radio][value=Carlos][checked=checked]'
|
|
92
83
|
end
|
|
93
84
|
|
|
94
85
|
test 'input should allow using a collection with text/value arrays' do
|
|
95
|
-
with_input_for @user, :name, :radio_buttons, :
|
|
86
|
+
with_input_for @user, :name, :radio_buttons, collection: [['Jose', 'jose'], ['Carlos', 'carlos']]
|
|
96
87
|
assert_select 'input[type=radio][value=jose]'
|
|
97
88
|
assert_select 'input[type=radio][value=carlos]'
|
|
98
89
|
assert_select 'label.collection_radio_buttons', 'Jose'
|
|
@@ -100,32 +91,32 @@ class CollectionRadioButtonsInputTest < ActionView::TestCase
|
|
|
100
91
|
end
|
|
101
92
|
|
|
102
93
|
test 'input should allow using a collection with a Proc' do
|
|
103
|
-
with_input_for @user, :name, :radio_buttons, :
|
|
94
|
+
with_input_for @user, :name, :radio_buttons, collection: Proc.new { ['Jose', 'Carlos' ] }
|
|
104
95
|
assert_select 'label.collection_radio_buttons', 'Jose'
|
|
105
96
|
assert_select 'label.collection_radio_buttons', 'Carlos'
|
|
106
97
|
end
|
|
107
98
|
|
|
108
99
|
test 'input should allow overriding only label method for collections' do
|
|
109
100
|
with_input_for @user, :name, :radio_buttons,
|
|
110
|
-
:
|
|
111
|
-
:
|
|
101
|
+
collection: ['Jose', 'Carlos'],
|
|
102
|
+
label_method: :upcase
|
|
112
103
|
assert_select 'label.collection_radio_buttons', 'JOSE'
|
|
113
104
|
assert_select 'label.collection_radio_buttons', 'CARLOS'
|
|
114
105
|
end
|
|
115
106
|
|
|
116
107
|
test 'input should allow overriding only value method for collections' do
|
|
117
108
|
with_input_for @user, :name, :radio_buttons,
|
|
118
|
-
:
|
|
119
|
-
:
|
|
109
|
+
collection: ['Jose', 'Carlos'],
|
|
110
|
+
value_method: :upcase
|
|
120
111
|
assert_select 'input[type=radio][value=JOSE]'
|
|
121
112
|
assert_select 'input[type=radio][value=CARLOS]'
|
|
122
113
|
end
|
|
123
114
|
|
|
124
115
|
test 'input should allow overriding label and value method for collections' do
|
|
125
116
|
with_input_for @user, :name, :radio_buttons,
|
|
126
|
-
:
|
|
127
|
-
:
|
|
128
|
-
:
|
|
117
|
+
collection: ['Jose', 'Carlos'],
|
|
118
|
+
label_method: :upcase,
|
|
119
|
+
value_method: :downcase
|
|
129
120
|
assert_select 'input[type=radio][value=jose]'
|
|
130
121
|
assert_select 'input[type=radio][value=carlos]'
|
|
131
122
|
assert_select 'label.collection_radio_buttons', 'JOSE'
|
|
@@ -134,9 +125,9 @@ class CollectionRadioButtonsInputTest < ActionView::TestCase
|
|
|
134
125
|
|
|
135
126
|
test 'input should allow overriding label and value method using a lambda for collections' do
|
|
136
127
|
with_input_for @user, :name, :radio_buttons,
|
|
137
|
-
:
|
|
138
|
-
:
|
|
139
|
-
:
|
|
128
|
+
collection: ['Jose', 'Carlos'],
|
|
129
|
+
label_method: lambda { |i| i.upcase },
|
|
130
|
+
value_method: lambda { |i| i.downcase }
|
|
140
131
|
assert_select 'input[type=radio][value=jose]'
|
|
141
132
|
assert_select 'input[type=radio][value=carlos]'
|
|
142
133
|
assert_select 'label.collection_radio_buttons', 'JOSE'
|
|
@@ -144,108 +135,114 @@ class CollectionRadioButtonsInputTest < ActionView::TestCase
|
|
|
144
135
|
end
|
|
145
136
|
|
|
146
137
|
test 'collection input with radio type should generate required html attribute' do
|
|
147
|
-
with_input_for @user, :name, :radio_buttons, :
|
|
138
|
+
with_input_for @user, :name, :radio_buttons, collection: ['Jose', 'Carlos']
|
|
148
139
|
assert_select 'input[type=radio].required'
|
|
149
140
|
assert_select 'input[type=radio][required]'
|
|
150
141
|
end
|
|
151
142
|
|
|
143
|
+
test 'collection input with radio type should generate aria-required html attribute' do
|
|
144
|
+
with_input_for @user, :name, :radio_buttons, collection: ['Jose', 'Carlos']
|
|
145
|
+
assert_select 'input[type=radio].required'
|
|
146
|
+
assert_select 'input[type=radio][aria-required=true]'
|
|
147
|
+
end
|
|
148
|
+
|
|
152
149
|
test 'input radio does not wrap the collection by default' do
|
|
153
150
|
with_input_for @user, :active, :radio_buttons
|
|
154
151
|
|
|
155
|
-
assert_select 'form input[type=radio]', :
|
|
152
|
+
assert_select 'form input[type=radio]', count: 2
|
|
156
153
|
assert_no_select 'form ul'
|
|
157
154
|
end
|
|
158
155
|
|
|
159
156
|
test 'input radio wraps the collection in the configured collection wrapper tag' do
|
|
160
|
-
swap SimpleForm, :
|
|
157
|
+
swap SimpleForm, collection_wrapper_tag: :ul do
|
|
161
158
|
with_input_for @user, :active, :radio_buttons
|
|
162
159
|
|
|
163
|
-
assert_select 'form ul input[type=radio]', :
|
|
160
|
+
assert_select 'form ul input[type=radio]', count: 2
|
|
164
161
|
end
|
|
165
162
|
end
|
|
166
163
|
|
|
167
164
|
test 'input radio does not wrap the collection when configured with falsy values' do
|
|
168
|
-
swap SimpleForm, :
|
|
165
|
+
swap SimpleForm, collection_wrapper_tag: false do
|
|
169
166
|
with_input_for @user, :active, :radio_buttons
|
|
170
167
|
|
|
171
|
-
assert_select 'form input[type=radio]', :
|
|
168
|
+
assert_select 'form input[type=radio]', count: 2
|
|
172
169
|
assert_no_select 'form ul'
|
|
173
170
|
end
|
|
174
171
|
end
|
|
175
172
|
|
|
176
173
|
test 'input radio allows overriding the collection wrapper tag at input level' do
|
|
177
|
-
swap SimpleForm, :
|
|
178
|
-
with_input_for @user, :active, :radio_buttons, :
|
|
174
|
+
swap SimpleForm, collection_wrapper_tag: :ul do
|
|
175
|
+
with_input_for @user, :active, :radio_buttons, collection_wrapper_tag: :section
|
|
179
176
|
|
|
180
|
-
assert_select 'form section input[type=radio]', :
|
|
177
|
+
assert_select 'form section input[type=radio]', count: 2
|
|
181
178
|
assert_no_select 'form ul'
|
|
182
179
|
end
|
|
183
180
|
end
|
|
184
181
|
|
|
185
182
|
test 'input radio allows disabling the collection wrapper tag at input level' do
|
|
186
|
-
swap SimpleForm, :
|
|
187
|
-
with_input_for @user, :active, :radio_buttons, :
|
|
183
|
+
swap SimpleForm, collection_wrapper_tag: :ul do
|
|
184
|
+
with_input_for @user, :active, :radio_buttons, collection_wrapper_tag: false
|
|
188
185
|
|
|
189
|
-
assert_select 'form input[type=radio]', :
|
|
186
|
+
assert_select 'form input[type=radio]', count: 2
|
|
190
187
|
assert_no_select 'form ul'
|
|
191
188
|
end
|
|
192
189
|
end
|
|
193
190
|
|
|
194
191
|
test 'input radio renders the wrapper tag with the configured wrapper class' do
|
|
195
|
-
swap SimpleForm, :
|
|
192
|
+
swap SimpleForm, collection_wrapper_tag: :ul, collection_wrapper_class: 'inputs-list' do
|
|
196
193
|
with_input_for @user, :active, :radio_buttons
|
|
197
194
|
|
|
198
|
-
assert_select 'form ul.inputs-list input[type=radio]', :
|
|
195
|
+
assert_select 'form ul.inputs-list input[type=radio]', count: 2
|
|
199
196
|
end
|
|
200
197
|
end
|
|
201
198
|
|
|
202
199
|
test 'input radio allows giving wrapper class at input level only' do
|
|
203
|
-
swap SimpleForm, :
|
|
204
|
-
with_input_for @user, :active, :radio_buttons, :
|
|
200
|
+
swap SimpleForm, collection_wrapper_tag: :ul do
|
|
201
|
+
with_input_for @user, :active, :radio_buttons, collection_wrapper_class: 'items-list'
|
|
205
202
|
|
|
206
|
-
assert_select 'form ul.items-list input[type=radio]', :
|
|
203
|
+
assert_select 'form ul.items-list input[type=radio]', count: 2
|
|
207
204
|
end
|
|
208
205
|
end
|
|
209
206
|
|
|
210
207
|
test 'input radio uses both configured and given wrapper classes for wrapper tag' do
|
|
211
|
-
swap SimpleForm, :
|
|
212
|
-
with_input_for @user, :active, :radio_buttons, :
|
|
208
|
+
swap SimpleForm, collection_wrapper_tag: :ul, collection_wrapper_class: 'inputs-list' do
|
|
209
|
+
with_input_for @user, :active, :radio_buttons, collection_wrapper_class: 'items-list'
|
|
213
210
|
|
|
214
|
-
assert_select 'form ul.inputs-list.items-list input[type=radio]', :
|
|
211
|
+
assert_select 'form ul.inputs-list.items-list input[type=radio]', count: 2
|
|
215
212
|
end
|
|
216
213
|
end
|
|
217
214
|
|
|
218
215
|
test 'input radio wraps each item in the configured item wrapper tag' do
|
|
219
|
-
swap SimpleForm, :
|
|
216
|
+
swap SimpleForm, item_wrapper_tag: :li do
|
|
220
217
|
with_input_for @user, :active, :radio_buttons
|
|
221
218
|
|
|
222
|
-
assert_select 'form li input[type=radio]', :
|
|
219
|
+
assert_select 'form li input[type=radio]', count: 2
|
|
223
220
|
end
|
|
224
221
|
end
|
|
225
222
|
|
|
226
223
|
test 'input radio does not wrap items when configured with falsy values' do
|
|
227
|
-
swap SimpleForm, :
|
|
224
|
+
swap SimpleForm, item_wrapper_tag: false do
|
|
228
225
|
with_input_for @user, :active, :radio_buttons
|
|
229
226
|
|
|
230
|
-
assert_select 'form input[type=radio]', :
|
|
227
|
+
assert_select 'form input[type=radio]', count: 2
|
|
231
228
|
assert_no_select 'form li'
|
|
232
229
|
end
|
|
233
230
|
end
|
|
234
231
|
|
|
235
232
|
test 'input radio allows overriding the item wrapper tag at input level' do
|
|
236
|
-
swap SimpleForm, :
|
|
237
|
-
with_input_for @user, :active, :radio_buttons, :
|
|
233
|
+
swap SimpleForm, item_wrapper_tag: :li do
|
|
234
|
+
with_input_for @user, :active, :radio_buttons, item_wrapper_tag: :dl
|
|
238
235
|
|
|
239
|
-
assert_select 'form dl input[type=radio]', :
|
|
236
|
+
assert_select 'form dl input[type=radio]', count: 2
|
|
240
237
|
assert_no_select 'form li'
|
|
241
238
|
end
|
|
242
239
|
end
|
|
243
240
|
|
|
244
241
|
test 'input radio allows disabling the item wrapper tag at input level' do
|
|
245
|
-
swap SimpleForm, :
|
|
246
|
-
with_input_for @user, :active, :radio_buttons, :
|
|
242
|
+
swap SimpleForm, item_wrapper_tag: :ul do
|
|
243
|
+
with_input_for @user, :active, :radio_buttons, item_wrapper_tag: false
|
|
247
244
|
|
|
248
|
-
assert_select 'form input[type=radio]', :
|
|
245
|
+
assert_select 'form input[type=radio]', count: 2
|
|
249
246
|
assert_no_select 'form li'
|
|
250
247
|
end
|
|
251
248
|
end
|
|
@@ -253,41 +250,41 @@ class CollectionRadioButtonsInputTest < ActionView::TestCase
|
|
|
253
250
|
test 'input radio wraps items in a span tag by default' do
|
|
254
251
|
with_input_for @user, :active, :radio_buttons
|
|
255
252
|
|
|
256
|
-
assert_select 'form span input[type=radio]', :
|
|
253
|
+
assert_select 'form span input[type=radio]', count: 2
|
|
257
254
|
end
|
|
258
255
|
|
|
259
256
|
test 'input radio renders the item wrapper tag with a default class "radio"' do
|
|
260
|
-
with_input_for @user, :active, :radio_buttons, :
|
|
257
|
+
with_input_for @user, :active, :radio_buttons, item_wrapper_tag: :li
|
|
261
258
|
|
|
262
|
-
assert_select 'form li.radio input[type=radio]', :
|
|
259
|
+
assert_select 'form li.radio input[type=radio]', count: 2
|
|
263
260
|
end
|
|
264
261
|
|
|
265
262
|
test 'input radio renders the item wrapper tag with the configured item wrapper class' do
|
|
266
|
-
swap SimpleForm, :
|
|
263
|
+
swap SimpleForm, item_wrapper_tag: :li, item_wrapper_class: 'item' do
|
|
267
264
|
with_input_for @user, :active, :radio_buttons
|
|
268
265
|
|
|
269
|
-
assert_select 'form li.radio.item input[type=radio]', :
|
|
266
|
+
assert_select 'form li.radio.item input[type=radio]', count: 2
|
|
270
267
|
end
|
|
271
268
|
end
|
|
272
269
|
|
|
273
270
|
test 'input radio allows giving item wrapper class at input level only' do
|
|
274
|
-
swap SimpleForm, :
|
|
275
|
-
with_input_for @user, :active, :radio_buttons, :
|
|
271
|
+
swap SimpleForm, item_wrapper_tag: :li do
|
|
272
|
+
with_input_for @user, :active, :radio_buttons, item_wrapper_class: 'item'
|
|
276
273
|
|
|
277
|
-
assert_select 'form li.radio.item input[type=radio]', :
|
|
274
|
+
assert_select 'form li.radio.item input[type=radio]', count: 2
|
|
278
275
|
end
|
|
279
276
|
end
|
|
280
277
|
|
|
281
278
|
test 'input radio uses both configured and given item wrapper classes for item wrapper tag' do
|
|
282
|
-
swap SimpleForm, :
|
|
283
|
-
with_input_for @user, :active, :radio_buttons, :
|
|
279
|
+
swap SimpleForm, item_wrapper_tag: :li, item_wrapper_class: 'item' do
|
|
280
|
+
with_input_for @user, :active, :radio_buttons, item_wrapper_class: 'inline'
|
|
284
281
|
|
|
285
|
-
assert_select 'form li.radio.item.inline input[type=radio]', :
|
|
282
|
+
assert_select 'form li.radio.item.inline input[type=radio]', count: 2
|
|
286
283
|
end
|
|
287
284
|
end
|
|
288
285
|
|
|
289
286
|
test 'input radio respects the nested boolean style config, generating nested label > input' do
|
|
290
|
-
swap SimpleForm, :
|
|
287
|
+
swap SimpleForm, boolean_style: :nested do
|
|
291
288
|
with_input_for @user, :active, :radio_buttons
|
|
292
289
|
|
|
293
290
|
assert_select 'label.radio > input#user_active_true[type=radio]'
|
|
@@ -299,7 +296,7 @@ class CollectionRadioButtonsInputTest < ActionView::TestCase
|
|
|
299
296
|
end
|
|
300
297
|
|
|
301
298
|
test 'input radio with nested style overrides configured item wrapper tag, forcing the :label' do
|
|
302
|
-
swap SimpleForm, :
|
|
299
|
+
swap SimpleForm, boolean_style: :nested, item_wrapper_tag: :li do
|
|
303
300
|
with_input_for @user, :active, :radio_buttons
|
|
304
301
|
|
|
305
302
|
assert_select 'label.radio > input'
|
|
@@ -308,8 +305,8 @@ class CollectionRadioButtonsInputTest < ActionView::TestCase
|
|
|
308
305
|
end
|
|
309
306
|
|
|
310
307
|
test 'input radio with nested style overrides given item wrapper tag, forcing the :label' do
|
|
311
|
-
swap SimpleForm, :
|
|
312
|
-
with_input_for @user, :active, :radio_buttons, :
|
|
308
|
+
swap SimpleForm, boolean_style: :nested do
|
|
309
|
+
with_input_for @user, :active, :radio_buttons, item_wrapper_tag: :li
|
|
313
310
|
|
|
314
311
|
assert_select 'label.radio > input'
|
|
315
312
|
assert_no_select 'li'
|
|
@@ -317,8 +314,8 @@ class CollectionRadioButtonsInputTest < ActionView::TestCase
|
|
|
317
314
|
end
|
|
318
315
|
|
|
319
316
|
test 'input radio with nested style accepts giving extra wrapper classes' do
|
|
320
|
-
swap SimpleForm, :
|
|
321
|
-
with_input_for @user, :active, :radio_buttons, :
|
|
317
|
+
swap SimpleForm, boolean_style: :nested do
|
|
318
|
+
with_input_for @user, :active, :radio_buttons, item_wrapper_class: "inline"
|
|
322
319
|
|
|
323
320
|
assert_select 'label.radio.inline > input'
|
|
324
321
|
end
|