simple_form 3.1.0.rc2 → 3.1.0
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.
Potentially problematic release.
This version of simple_form might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/CHANGELOG.md +9 -1
- data/README.md +27 -10
- data/lib/generators/simple_form/install_generator.rb +2 -2
- data/lib/generators/simple_form/templates/config/initializers/simple_form.rb +3 -2
- data/lib/generators/simple_form/templates/config/initializers/simple_form_bootstrap.rb +8 -1
- data/lib/generators/simple_form/templates/config/initializers/simple_form_foundation.rb +85 -4
- data/lib/simple_form.rb +13 -2
- data/lib/simple_form/action_view_extensions/builder.rb +1 -0
- data/lib/simple_form/action_view_extensions/form_helper.rb +5 -1
- data/lib/simple_form/components/errors.rb +3 -5
- data/lib/simple_form/form_builder.rb +5 -4
- data/lib/simple_form/inputs/boolean_input.rb +1 -1
- data/lib/simple_form/inputs/collection_input.rb +2 -4
- data/lib/simple_form/tags.rb +2 -4
- data/lib/simple_form/version.rb +1 -1
- data/test/action_view_extensions/builder_test.rb +31 -31
- data/test/action_view_extensions/form_helper_test.rb +20 -1
- data/test/components/label_test.rb +1 -1
- data/test/form_builder/association_test.rb +37 -37
- data/test/form_builder/button_test.rb +5 -5
- data/test/form_builder/error_test.rb +70 -11
- data/test/form_builder/general_test.rb +24 -4
- data/test/form_builder/hint_test.rb +3 -3
- data/test/form_builder/input_field_test.rb +43 -3
- data/test/form_builder/label_test.rb +1 -1
- data/test/form_builder/wrapper_test.rb +18 -3
- data/test/generators/simple_form_generator_test.rb +2 -2
- data/test/inputs/boolean_input_test.rb +9 -1
- data/test/inputs/collection_check_boxes_input_test.rb +22 -0
- data/test/inputs/collection_radio_buttons_input_test.rb +25 -3
- data/test/inputs/collection_select_input_test.rb +17 -17
- data/test/inputs/datetime_input_test.rb +1 -1
- data/test/inputs/grouped_collection_select_input_test.rb +8 -8
- data/test/inputs/numeric_input_test.rb +19 -19
- data/test/inputs/priority_input_test.rb +6 -6
- data/test/inputs/string_input_test.rb +10 -10
- data/test/inputs/text_input_test.rb +3 -3
- data/test/support/misc_helpers.rb +6 -0
- data/test/support/models.rb +11 -1
- data/test/test_helper.rb +5 -1
- metadata +4 -4
@@ -50,7 +50,7 @@ class HintTest < ActionView::TestCase
|
|
50
50
|
|
51
51
|
test 'builder escapes hint text' do
|
52
52
|
with_hint_for @user, :name, hint: '<script>alert(1337)</script>'
|
53
|
-
|
53
|
+
assert_no_select 'span.hint script'
|
54
54
|
end
|
55
55
|
|
56
56
|
# Without attribute name
|
@@ -137,8 +137,8 @@ class HintTest < ActionView::TestCase
|
|
137
137
|
|
138
138
|
test 'hint with custom wrappers works' do
|
139
139
|
swap_wrapper do
|
140
|
-
with_hint_for @user, :name, hint: "
|
141
|
-
assert_select 'div.omg_hint', "
|
140
|
+
with_hint_for @user, :name, hint: "cannot be blank"
|
141
|
+
assert_select 'div.omg_hint', "cannot be blank"
|
142
142
|
end
|
143
143
|
end
|
144
144
|
end
|
@@ -76,7 +76,7 @@ class InputFieldTest < ActionView::TestCase
|
|
76
76
|
f.input_field :name
|
77
77
|
end
|
78
78
|
|
79
|
-
assert_select 'input.string[placeholder=Name goes here]'
|
79
|
+
assert_select 'input.string[placeholder="Name goes here"]'
|
80
80
|
end
|
81
81
|
end
|
82
82
|
|
@@ -85,7 +85,7 @@ class InputFieldTest < ActionView::TestCase
|
|
85
85
|
f.input_field :age, as: :integer
|
86
86
|
end
|
87
87
|
|
88
|
-
assert_select 'input[min=18]'
|
88
|
+
assert_select 'input[min="18"]'
|
89
89
|
end
|
90
90
|
|
91
91
|
test 'builder input_field does not use pattern component by default' do
|
@@ -125,7 +125,7 @@ class InputFieldTest < ActionView::TestCase
|
|
125
125
|
f.input_field :name, as: :string
|
126
126
|
end
|
127
127
|
|
128
|
-
assert_select 'input.string[maxlength=25]'
|
128
|
+
assert_select 'input.string[maxlength="25"]'
|
129
129
|
end
|
130
130
|
|
131
131
|
test 'builder collection input_field generates input tag with a clean HTML' do
|
@@ -146,4 +146,44 @@ class InputFieldTest < ActionView::TestCase
|
|
146
146
|
|
147
147
|
assert_no_select 'input.boolean[boolean_style]'
|
148
148
|
end
|
149
|
+
|
150
|
+
test 'build input_field without pattern component use the pattern string' do
|
151
|
+
swap_wrapper :default, self.custom_wrapper_with_html5_components do
|
152
|
+
with_concat_form_for(@user) do |f|
|
153
|
+
f.input_field :name, pattern: '\w+'
|
154
|
+
end
|
155
|
+
|
156
|
+
assert_select 'input[pattern="\w+"]'
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
160
|
+
test 'build input_field without placeholder component use the placeholder string' do
|
161
|
+
swap_wrapper :default, self.custom_wrapper_with_html5_components do
|
162
|
+
with_concat_form_for(@user) do |f|
|
163
|
+
f.input_field :name, placeholder: 'Placeholder'
|
164
|
+
end
|
165
|
+
|
166
|
+
assert_select 'input[placeholder="Placeholder"]'
|
167
|
+
end
|
168
|
+
end
|
169
|
+
|
170
|
+
test 'build input_field without maxlength component use the maxlength string' do
|
171
|
+
swap_wrapper :default, self.custom_wrapper_with_html5_components do
|
172
|
+
with_concat_form_for(@user) do |f|
|
173
|
+
f.input_field :name, maxlength: 5
|
174
|
+
end
|
175
|
+
|
176
|
+
assert_select 'input[maxlength="5"]'
|
177
|
+
end
|
178
|
+
end
|
179
|
+
|
180
|
+
test 'build input_field without readonly component use the readonly string' do
|
181
|
+
swap_wrapper :default, self.custom_wrapper_with_html5_components do
|
182
|
+
with_concat_form_for(@user) do |f|
|
183
|
+
f.input_field :name, readonly: true
|
184
|
+
end
|
185
|
+
|
186
|
+
assert_select 'input[readonly="readonly"]'
|
187
|
+
end
|
188
|
+
end
|
149
189
|
end
|
@@ -31,7 +31,7 @@ class LabelTest < ActionView::TestCase
|
|
31
31
|
|
32
32
|
test 'builder escapes label text' do
|
33
33
|
with_label_for @user, :name, label: '<script>alert(1337)</script>', required: false
|
34
|
-
|
34
|
+
assert_no_select 'label.string script'
|
35
35
|
end
|
36
36
|
|
37
37
|
test 'builder does not escape label text if it is safe' do
|
@@ -139,7 +139,7 @@ class WrapperTest < ActionView::TestCase
|
|
139
139
|
test 'custom wrappers can have full error message on attributes' do
|
140
140
|
swap_wrapper :default, self.custom_wrapper_with_full_error do
|
141
141
|
with_form_for @user, :name
|
142
|
-
assert_select 'span.error', "Name
|
142
|
+
assert_select 'span.error', "Name cannot be blank"
|
143
143
|
end
|
144
144
|
end
|
145
145
|
|
@@ -227,6 +227,21 @@ class WrapperTest < ActionView::TestCase
|
|
227
227
|
assert_select "section.custom_wrapper div.another_wrapper input.string"
|
228
228
|
end
|
229
229
|
|
230
|
+
test 'simple_fields_form reuses custom wrapper mapping per form basis' do
|
231
|
+
@user.company = Company.new(1, 'Empresa')
|
232
|
+
|
233
|
+
swap_wrapper :another do
|
234
|
+
with_concat_form_for @user, wrapper_mappings: { string: :another } do |f|
|
235
|
+
concat(f.simple_fields_for(:company) do |company_form|
|
236
|
+
concat(company_form.input(:name))
|
237
|
+
end)
|
238
|
+
end
|
239
|
+
end
|
240
|
+
|
241
|
+
assert_select "section.custom_wrapper div.another_wrapper label"
|
242
|
+
assert_select "section.custom_wrapper div.another_wrapper input.string"
|
243
|
+
end
|
244
|
+
|
230
245
|
test 'input accepts attributes in the DSL' do
|
231
246
|
swap_wrapper :default, self.custom_wrapper_with_input_class do
|
232
247
|
with_concat_form_for @user do |f|
|
@@ -270,8 +285,8 @@ class WrapperTest < ActionView::TestCase
|
|
270
285
|
|
271
286
|
test 'inline wrapper displays when there is content' do
|
272
287
|
swap_wrapper :default, self.custom_wrapper_with_wrapped_optional_component do
|
273
|
-
with_form_for @user, :name, hint: "
|
274
|
-
assert_select 'section.custom_wrapper div.no_output_wrapper p.omg_hint', "
|
288
|
+
with_form_for @user, :name, hint: "cannot be blank"
|
289
|
+
assert_select 'section.custom_wrapper div.no_output_wrapper p.omg_hint', "cannot be blank"
|
275
290
|
assert_select 'p.omg_hint'
|
276
291
|
end
|
277
292
|
end
|
@@ -29,8 +29,8 @@ class SimpleFormGeneratorTest < Rails::Generators::TestCase
|
|
29
29
|
run_generator %w(--foundation)
|
30
30
|
assert_file 'config/initializers/simple_form.rb',
|
31
31
|
/config\.default_wrapper = :default/, /config\.boolean_style = :nested/
|
32
|
-
assert_file 'config/initializers/simple_form_foundation.rb', /config\.wrappers :
|
33
|
-
/config\.default_wrapper = :
|
32
|
+
assert_file 'config/initializers/simple_form_foundation.rb', /config\.wrappers :vertical_form/,
|
33
|
+
/config\.default_wrapper = :vertical_form/, /config\.item_wrapper_tag = :div/
|
34
34
|
end
|
35
35
|
|
36
36
|
%W(erb haml slim).each do |engine|
|
@@ -57,7 +57,7 @@ class BooleanInputTest < ActionView::TestCase
|
|
57
57
|
test 'input boolean with nested escapes :inline_label with HTML' do
|
58
58
|
swap SimpleForm, boolean_style: :nested do
|
59
59
|
with_input_for @user, :active, :boolean, inline_label: '<b>I am so inline.</b>'
|
60
|
-
|
60
|
+
assert_no_select 'label.checkbox b'
|
61
61
|
end
|
62
62
|
end
|
63
63
|
|
@@ -197,4 +197,12 @@ class BooleanInputTest < ActionView::TestCase
|
|
197
197
|
end
|
198
198
|
end
|
199
199
|
end
|
200
|
+
|
201
|
+
test 'input boolean works with wrapper config defining a class for the input' do
|
202
|
+
swap_wrapper :default, self.custom_wrapper_with_input_class do
|
203
|
+
with_input_for @user, :active, :boolean
|
204
|
+
|
205
|
+
assert_select 'input.boolean.inline-class'
|
206
|
+
end
|
207
|
+
end
|
200
208
|
end
|
@@ -278,4 +278,26 @@ class CollectionCheckBoxesInputTest < ActionView::TestCase
|
|
278
278
|
assert_select 'span.custom'
|
279
279
|
end
|
280
280
|
end
|
281
|
+
|
282
|
+
test 'input check boxes with nested style and namespace uses the right for attribute' do
|
283
|
+
swap SimpleForm, include_default_input_wrapper_class: false, boolean_style: :nested do
|
284
|
+
with_concat_form_for @user, namespace: :foo do |f|
|
285
|
+
concat f.input :gender, as: :check_boxes, collection: [:male, :female]
|
286
|
+
end
|
287
|
+
|
288
|
+
assert_select 'label[for=foo_user_gender_male]'
|
289
|
+
assert_select 'label[for=foo_user_gender_female]'
|
290
|
+
end
|
291
|
+
end
|
292
|
+
|
293
|
+
test 'input check boxes with nested style and index uses the right for attribute' do
|
294
|
+
swap SimpleForm, include_default_input_wrapper_class: false, boolean_style: :nested do
|
295
|
+
with_concat_form_for @user, index: 1 do |f|
|
296
|
+
concat f.input :gender, as: :check_boxes, collection: [:male, :female]
|
297
|
+
end
|
298
|
+
|
299
|
+
assert_select 'label[for=user_1_gender_male]'
|
300
|
+
assert_select 'label[for=user_1_gender_female]'
|
301
|
+
end
|
302
|
+
end
|
281
303
|
end
|
@@ -100,8 +100,8 @@ class CollectionRadioButtonsInputTest < ActionView::TestCase
|
|
100
100
|
with_input_for @user, :gender, :radio_buttons, collection: [:male, :female]
|
101
101
|
assert_select 'input[type=radio][value=male]'
|
102
102
|
assert_select 'input[type=radio][value=female]'
|
103
|
-
assert_select 'label[for=user_gender_male]', 'Male'
|
104
|
-
assert_select 'label[for=user_gender_female]', 'Female'
|
103
|
+
assert_select 'label[for=user_gender_male] strong', 'Male'
|
104
|
+
assert_select 'label[for=user_gender_female] strong', 'Female'
|
105
105
|
end
|
106
106
|
end
|
107
107
|
end
|
@@ -393,7 +393,7 @@ class CollectionRadioButtonsInputTest < ActionView::TestCase
|
|
393
393
|
end
|
394
394
|
end
|
395
395
|
|
396
|
-
test 'input
|
396
|
+
test 'input radio custom wrapper class is included when include input wrapper class is falsey' do
|
397
397
|
swap SimpleForm, include_default_input_wrapper_class: false, boolean_style: :nested do
|
398
398
|
with_input_for @user, :gender, :radio_buttons, collection: [:male, :female], item_wrapper_class: 'custom'
|
399
399
|
|
@@ -401,4 +401,26 @@ class CollectionRadioButtonsInputTest < ActionView::TestCase
|
|
401
401
|
assert_select 'span.custom'
|
402
402
|
end
|
403
403
|
end
|
404
|
+
|
405
|
+
test 'input radio with nested style and namespace uses the right for attribute' do
|
406
|
+
swap SimpleForm, include_default_input_wrapper_class: false, boolean_style: :nested do
|
407
|
+
with_concat_form_for @user, namespace: :foo do |f|
|
408
|
+
concat f.input :gender, as: :radio_buttons, collection: [:male, :female]
|
409
|
+
end
|
410
|
+
|
411
|
+
assert_select 'label[for=foo_user_gender_male]'
|
412
|
+
assert_select 'label[for=foo_user_gender_female]'
|
413
|
+
end
|
414
|
+
end
|
415
|
+
|
416
|
+
test 'input radio with nested style and index uses the right for attribute' do
|
417
|
+
swap SimpleForm, include_default_input_wrapper_class: false, boolean_style: :nested do
|
418
|
+
with_concat_form_for @user, index: 1 do |f|
|
419
|
+
concat f.input :gender, as: :radio_buttons, collection: [:male, :female]
|
420
|
+
end
|
421
|
+
|
422
|
+
assert_select 'label[for=user_1_gender_male]'
|
423
|
+
assert_select 'label[for=user_1_gender_female]'
|
424
|
+
end
|
425
|
+
end
|
404
426
|
end
|
@@ -99,7 +99,7 @@ class CollectionSelectInputTest < ActionView::TestCase
|
|
99
99
|
|
100
100
|
test 'input automatically sets include blank' do
|
101
101
|
with_input_for @user, :age, :select, collection: 18..30
|
102
|
-
assert_select 'select option[value=]', ''
|
102
|
+
assert_select 'select option[value=""]', ''
|
103
103
|
end
|
104
104
|
|
105
105
|
test 'input translates include blank when set to :translate' do
|
@@ -107,7 +107,7 @@ class CollectionSelectInputTest < ActionView::TestCase
|
|
107
107
|
age: 'Rather not say'
|
108
108
|
} } }) do
|
109
109
|
with_input_for @user, :age, :select, collection: 18..30, include_blank: :translate
|
110
|
-
assert_select 'select option[value=]', 'Rather not say'
|
110
|
+
assert_select 'select option[value=""]', 'Rather not say'
|
111
111
|
end
|
112
112
|
end
|
113
113
|
|
@@ -116,7 +116,7 @@ class CollectionSelectInputTest < ActionView::TestCase
|
|
116
116
|
age: 'Rather not say',
|
117
117
|
} } }) do
|
118
118
|
with_input_for @user, :age, :select, collection: 18..30, include_blank: :translate
|
119
|
-
assert_select 'select option[value=]', 'Rather not say'
|
119
|
+
assert_select 'select option[value=""]', 'Rather not say'
|
120
120
|
end
|
121
121
|
end
|
122
122
|
|
@@ -125,7 +125,7 @@ class CollectionSelectInputTest < ActionView::TestCase
|
|
125
125
|
age: 'Rather not say'
|
126
126
|
} } }) do
|
127
127
|
with_input_for @user, :age, :select, collection: 18..30, include_blank: 'Young at heart'
|
128
|
-
assert_select 'select option[value=]', 'Young at heart'
|
128
|
+
assert_select 'select option[value=""]', 'Young at heart'
|
129
129
|
end
|
130
130
|
end
|
131
131
|
|
@@ -134,7 +134,7 @@ class CollectionSelectInputTest < ActionView::TestCase
|
|
134
134
|
age: 'Rather not say'
|
135
135
|
} } }) do
|
136
136
|
with_input_for @user, :age, :select, collection: 18..30
|
137
|
-
assert_select 'select option[value=]', ''
|
137
|
+
assert_select 'select option[value=""]', ''
|
138
138
|
end
|
139
139
|
end
|
140
140
|
|
@@ -143,7 +143,7 @@ class CollectionSelectInputTest < ActionView::TestCase
|
|
143
143
|
age: 'Rather not say'
|
144
144
|
} } }) do
|
145
145
|
with_input_for @user, :age, :select, collection: 18..30, include_blank: true
|
146
|
-
assert_select 'select option[value=]', ''
|
146
|
+
assert_select 'select option[value=""]', ''
|
147
147
|
end
|
148
148
|
end
|
149
149
|
|
@@ -152,23 +152,23 @@ class CollectionSelectInputTest < ActionView::TestCase
|
|
152
152
|
age: 'Rather not say'
|
153
153
|
} } }) do
|
154
154
|
with_input_for @user, :age, :select, collection: 18..30, include_blank: false
|
155
|
-
assert_no_select 'select option[value=]'
|
155
|
+
assert_no_select 'select option[value=""]'
|
156
156
|
end
|
157
157
|
end
|
158
158
|
|
159
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
|
-
assert_no_select 'select option[value=]'
|
161
|
+
assert_no_select 'select option[value=""]'
|
162
162
|
end
|
163
163
|
|
164
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
|
-
assert_no_select 'select option[value=]', ''
|
166
|
+
assert_no_select 'select option[value=""]', ''
|
167
167
|
end
|
168
168
|
|
169
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
|
-
assert_no_select 'select option[value=]', ''
|
171
|
+
assert_no_select 'select option[value=""]', ''
|
172
172
|
end
|
173
173
|
|
174
174
|
test 'input translates prompt when set to :translate' do
|
@@ -176,7 +176,7 @@ class CollectionSelectInputTest < ActionView::TestCase
|
|
176
176
|
age: 'Select age:'
|
177
177
|
} } }) do
|
178
178
|
with_input_for @user, :age, :select, collection: 18..30, prompt: :translate
|
179
|
-
assert_select 'select option[value=]', 'Select age:'
|
179
|
+
assert_select 'select option[value=""]', 'Select age:'
|
180
180
|
end
|
181
181
|
end
|
182
182
|
|
@@ -185,7 +185,7 @@ class CollectionSelectInputTest < ActionView::TestCase
|
|
185
185
|
age: 'Select age:',
|
186
186
|
} } }) do
|
187
187
|
with_input_for @user, :age, :select, collection: 18..30, prompt: :translate
|
188
|
-
assert_select 'select option[value=]', 'Select age:'
|
188
|
+
assert_select 'select option[value=""]', 'Select age:'
|
189
189
|
end
|
190
190
|
end
|
191
191
|
|
@@ -194,7 +194,7 @@ class CollectionSelectInputTest < ActionView::TestCase
|
|
194
194
|
age: 'Select age:'
|
195
195
|
} } }) do
|
196
196
|
with_input_for @user, :age, :select, collection: 18..30, prompt: 'Do it:'
|
197
|
-
assert_select 'select option[value=]', 'Do it:'
|
197
|
+
assert_select 'select option[value=""]', 'Do it:'
|
198
198
|
end
|
199
199
|
end
|
200
200
|
|
@@ -203,7 +203,7 @@ class CollectionSelectInputTest < ActionView::TestCase
|
|
203
203
|
age: 'Select age:'
|
204
204
|
} } }) do
|
205
205
|
with_input_for @user, :age, :select, collection: 18..30, prompt: false
|
206
|
-
assert_no_select 'select option[value=]'
|
206
|
+
assert_no_select 'select option[value=""]'
|
207
207
|
end
|
208
208
|
end
|
209
209
|
|
@@ -212,15 +212,15 @@ class CollectionSelectInputTest < ActionView::TestCase
|
|
212
212
|
prompt: 'Select value:'
|
213
213
|
} }) do
|
214
214
|
with_input_for @user, :age, :select, collection: 18..30, prompt: :translate
|
215
|
-
assert_select 'select option[value=]', "Select value:"
|
215
|
+
assert_select 'select option[value=""]', "Select value:"
|
216
216
|
end
|
217
217
|
end
|
218
218
|
|
219
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
|
-
assert_select 'select option[value=1]', 'Jose'
|
223
|
-
assert_select 'select option[value=2]', 'Carlos'
|
222
|
+
assert_select 'select option[value="1"]', 'Jose'
|
223
|
+
assert_select 'select option[value="2"]', 'Carlos'
|
224
224
|
end
|
225
225
|
|
226
226
|
test 'input disables the anothers components when the option is a object' do
|
@@ -102,7 +102,7 @@ class DateTimeInputWithoutHtml5Test < ActionView::TestCase
|
|
102
102
|
|
103
103
|
test 'input is able to pass :default to date select' do
|
104
104
|
with_input_for @user, :born_at, :date, default: Date.today, html5: false
|
105
|
-
assert_select "select.date option[value
|
105
|
+
assert_select "select.date option[value='#{Date.today.year}'][selected=selected]"
|
106
106
|
end
|
107
107
|
|
108
108
|
test 'input generates a date input for date attributes if HTML5 compatibility is explicitly enabled' do
|
@@ -109,8 +109,8 @@ class GroupedCollectionSelectInputTest < ActionView::TestCase
|
|
109
109
|
|
110
110
|
assert_select 'select.grouped_select#user_tag_ids' do
|
111
111
|
assert_select 'optgroup[label=Second]' do
|
112
|
-
assert_select 'option[value=7]', 'Bond'
|
113
|
-
assert_select 'option[value=47]', 'Hitman'
|
112
|
+
assert_select 'option[value="7"]', 'Bond'
|
113
|
+
assert_select 'option[value="47"]', 'Hitman'
|
114
114
|
end
|
115
115
|
end
|
116
116
|
end
|
@@ -155,14 +155,14 @@ class GroupedCollectionSelectInputTest < ActionView::TestCase
|
|
155
155
|
collection: tag_groups, group_method: :tags
|
156
156
|
|
157
157
|
assert_select 'select.grouped_select#user_tag_ids' do
|
158
|
-
assert_select 'optgroup[label=Group of Tags]' do
|
159
|
-
assert_select 'option[value=1]', 'Tag 1'
|
160
|
-
assert_select 'option[value=2]', 'Tag 2'
|
158
|
+
assert_select 'optgroup[label="Group of Tags"]' do
|
159
|
+
assert_select 'option[value="1"]', 'Tag 1'
|
160
|
+
assert_select 'option[value="2"]', 'Tag 2'
|
161
161
|
end
|
162
162
|
|
163
|
-
assert_select 'optgroup[label=Other group]' do
|
164
|
-
assert_select 'option[value=3]', 'Tag 3'
|
165
|
-
assert_select 'option[value=4]', 'Tag 4'
|
163
|
+
assert_select 'optgroup[label="Other group"]' do
|
164
|
+
assert_select 'option[value="3"]', 'Tag 3'
|
165
|
+
assert_select 'option[value="4"]', 'Tag 4'
|
166
166
|
end
|
167
167
|
end
|
168
168
|
end
|
@@ -32,7 +32,7 @@ class NumericInputTest < ActionView::TestCase
|
|
32
32
|
assert_no_select 'input[min]'
|
33
33
|
|
34
34
|
with_input_for @other_validating_user, :age, :integer
|
35
|
-
assert_select 'input[min=18]'
|
35
|
+
assert_select 'input[min="18"]'
|
36
36
|
end
|
37
37
|
|
38
38
|
test 'input infers min value from integer attributes with greater than validation using symbol' do
|
@@ -40,15 +40,15 @@ class NumericInputTest < ActionView::TestCase
|
|
40
40
|
assert_no_select 'input[min]'
|
41
41
|
|
42
42
|
with_input_for @validating_user, :amount, :integer
|
43
|
-
assert_select 'input[min=11]'
|
43
|
+
assert_select 'input[min="11"]'
|
44
44
|
end
|
45
45
|
|
46
46
|
test 'input infers min value from integer attributes with greater than or equal to validation using symbol' do
|
47
47
|
with_input_for @validating_user, :attempts, :float
|
48
|
-
assert_select 'input[min=1]'
|
48
|
+
assert_select 'input[min="1"]'
|
49
49
|
|
50
50
|
with_input_for @validating_user, :attempts, :integer
|
51
|
-
assert_select 'input[min=1]'
|
51
|
+
assert_select 'input[min="1"]'
|
52
52
|
end
|
53
53
|
|
54
54
|
test 'input infers min value from integer attributes with greater than validation using proc' do
|
@@ -56,15 +56,15 @@ class NumericInputTest < ActionView::TestCase
|
|
56
56
|
assert_no_select 'input[min]'
|
57
57
|
|
58
58
|
with_input_for @other_validating_user, :amount, :integer
|
59
|
-
assert_select 'input[min=20]'
|
59
|
+
assert_select 'input[min="20"]'
|
60
60
|
end
|
61
61
|
|
62
62
|
test 'input infers min value from integer attributes with greater than or equal to validation using proc' do
|
63
63
|
with_input_for @other_validating_user, :attempts, :float
|
64
|
-
assert_select 'input[min=19]'
|
64
|
+
assert_select 'input[min="19"]'
|
65
65
|
|
66
66
|
with_input_for @other_validating_user, :attempts, :integer
|
67
|
-
assert_select 'input[min=19]'
|
67
|
+
assert_select 'input[min="19"]'
|
68
68
|
end
|
69
69
|
|
70
70
|
test 'input infers max value from attributes with less than validation' do
|
@@ -72,7 +72,7 @@ class NumericInputTest < ActionView::TestCase
|
|
72
72
|
assert_no_select 'input[max]'
|
73
73
|
|
74
74
|
with_input_for @other_validating_user, :age, :integer
|
75
|
-
assert_select 'input[max=99]'
|
75
|
+
assert_select 'input[max="99"]'
|
76
76
|
end
|
77
77
|
|
78
78
|
test 'input infers max value from attributes with less than validation using symbol' do
|
@@ -80,15 +80,15 @@ class NumericInputTest < ActionView::TestCase
|
|
80
80
|
assert_no_select 'input[max]'
|
81
81
|
|
82
82
|
with_input_for @validating_user, :amount, :integer
|
83
|
-
assert_select 'input[max=99]'
|
83
|
+
assert_select 'input[max="99"]'
|
84
84
|
end
|
85
85
|
|
86
86
|
test 'input infers max value from attributes with less than or equal to validation using symbol' do
|
87
87
|
with_input_for @validating_user, :attempts, :float
|
88
|
-
assert_select 'input[max=100]'
|
88
|
+
assert_select 'input[max="100"]'
|
89
89
|
|
90
90
|
with_input_for @validating_user, :attempts, :integer
|
91
|
-
assert_select 'input[max=100]'
|
91
|
+
assert_select 'input[max="100"]'
|
92
92
|
end
|
93
93
|
|
94
94
|
test 'input infers max value from attributes with less than validation using proc' do
|
@@ -96,15 +96,15 @@ class NumericInputTest < ActionView::TestCase
|
|
96
96
|
assert_no_select 'input[max]'
|
97
97
|
|
98
98
|
with_input_for @other_validating_user, :amount, :integer
|
99
|
-
assert_select 'input[max=118]'
|
99
|
+
assert_select 'input[max="118"]'
|
100
100
|
end
|
101
101
|
|
102
102
|
test 'input infers max value from attributes with less than or equal to validation using proc' do
|
103
103
|
with_input_for @other_validating_user, :attempts, :float
|
104
|
-
assert_select 'input[max=119]'
|
104
|
+
assert_select 'input[max="119"]'
|
105
105
|
|
106
106
|
with_input_for @other_validating_user, :attempts, :integer
|
107
|
-
assert_select 'input[max=119]'
|
107
|
+
assert_select 'input[max="119"]'
|
108
108
|
end
|
109
109
|
|
110
110
|
test 'input has step value of any except for integer attribute' do
|
@@ -112,7 +112,7 @@ class NumericInputTest < ActionView::TestCase
|
|
112
112
|
assert_select 'input[step="any"]'
|
113
113
|
|
114
114
|
with_input_for @validating_user, :age, :integer
|
115
|
-
assert_select 'input[step=1]'
|
115
|
+
assert_select 'input[step="1"]'
|
116
116
|
end
|
117
117
|
|
118
118
|
test 'numeric input does not generate placeholder by default' do
|
@@ -122,7 +122,7 @@ class NumericInputTest < ActionView::TestCase
|
|
122
122
|
|
123
123
|
test 'numeric input accepts the placeholder option' do
|
124
124
|
with_input_for @user, :age, :integer, placeholder: 'Put in your age'
|
125
|
-
assert_select 'input.integer[placeholder=Put in your age]'
|
125
|
+
assert_select 'input.integer[placeholder="Put in your age"]'
|
126
126
|
end
|
127
127
|
|
128
128
|
test 'numeric input uses i18n to translate placeholder text' do
|
@@ -130,7 +130,7 @@ class NumericInputTest < ActionView::TestCase
|
|
130
130
|
age: 'Age goes here'
|
131
131
|
} } }) do
|
132
132
|
with_input_for @user, :age, :integer
|
133
|
-
assert_select 'input.integer[placeholder=Age goes here]'
|
133
|
+
assert_select 'input.integer[placeholder="Age goes here"]'
|
134
134
|
end
|
135
135
|
end
|
136
136
|
|
@@ -156,12 +156,12 @@ class NumericInputTest < ActionView::TestCase
|
|
156
156
|
[:integer, :float, :decimal].each do |type|
|
157
157
|
test "#{type} input infers min value from attributes with greater than or equal validation" do
|
158
158
|
with_input_for @validating_user, :age, type
|
159
|
-
assert_select 'input[min=18]'
|
159
|
+
assert_select 'input[min="18"]'
|
160
160
|
end
|
161
161
|
|
162
162
|
test "#{type} input infers the max value from attributes with less than or equal to validation" do
|
163
163
|
with_input_for @validating_user, :age, type
|
164
|
-
assert_select 'input[max=99]'
|
164
|
+
assert_select 'input[max="99"]'
|
165
165
|
end
|
166
166
|
end
|
167
167
|
|