simple_form 3.0.4 → 3.1.0.rc2
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 +35 -43
- data/MIT-LICENSE +1 -1
- data/README.md +179 -73
- data/lib/generators/simple_form/install_generator.rb +2 -2
- data/lib/generators/simple_form/templates/README +3 -4
- data/lib/generators/simple_form/templates/config/initializers/simple_form.rb +25 -5
- data/lib/generators/simple_form/templates/config/initializers/simple_form_bootstrap.rb +108 -24
- data/lib/generators/simple_form/templates/config/initializers/simple_form_foundation.rb +1 -1
- data/lib/generators/simple_form/templates/config/locales/simple_form.en.yml +7 -2
- data/lib/simple_form/action_view_extensions/form_helper.rb +1 -1
- data/lib/simple_form/components/errors.rb +27 -5
- data/lib/simple_form/components/hints.rb +2 -2
- data/lib/simple_form/components/html5.rb +1 -1
- data/lib/simple_form/components/label_input.rb +20 -2
- data/lib/simple_form/components/labels.rb +10 -6
- data/lib/simple_form/components/maxlength.rb +1 -1
- data/lib/simple_form/components/min_max.rb +1 -1
- data/lib/simple_form/components/pattern.rb +1 -1
- data/lib/simple_form/components/placeholders.rb +2 -2
- data/lib/simple_form/components/readonly.rb +1 -1
- data/lib/simple_form/form_builder.rb +121 -74
- data/lib/simple_form/helpers.rb +5 -5
- data/lib/simple_form/inputs/base.rb +34 -12
- data/lib/simple_form/inputs/block_input.rb +1 -1
- data/lib/simple_form/inputs/boolean_input.rb +27 -14
- data/lib/simple_form/inputs/collection_input.rb +32 -9
- data/lib/simple_form/inputs/collection_radio_buttons_input.rb +6 -11
- data/lib/simple_form/inputs/collection_select_input.rb +4 -2
- data/lib/simple_form/inputs/date_time_input.rb +12 -2
- data/lib/simple_form/inputs/file_input.rb +4 -2
- data/lib/simple_form/inputs/grouped_collection_select_input.rb +15 -3
- data/lib/simple_form/inputs/hidden_input.rb +4 -2
- data/lib/simple_form/inputs/numeric_input.rb +5 -4
- data/lib/simple_form/inputs/password_input.rb +4 -2
- data/lib/simple_form/inputs/priority_input.rb +4 -2
- data/lib/simple_form/inputs/range_input.rb +1 -1
- data/lib/simple_form/inputs/string_input.rb +4 -2
- data/lib/simple_form/inputs/text_input.rb +4 -2
- data/lib/simple_form/railtie.rb +7 -0
- data/lib/simple_form/tags.rb +8 -0
- data/lib/simple_form/version.rb +1 -1
- data/lib/simple_form/wrappers/builder.rb +6 -6
- data/lib/simple_form/wrappers/leaf.rb +28 -0
- data/lib/simple_form/wrappers/many.rb +6 -6
- data/lib/simple_form/wrappers/root.rb +1 -1
- data/lib/simple_form/wrappers/single.rb +5 -3
- data/lib/simple_form/wrappers.rb +1 -0
- data/lib/simple_form.rb +46 -6
- data/test/action_view_extensions/builder_test.rb +5 -5
- data/test/action_view_extensions/form_helper_test.rb +13 -13
- data/test/components/label_test.rb +36 -36
- data/test/form_builder/association_test.rb +21 -4
- data/test/form_builder/button_test.rb +5 -5
- data/test/form_builder/error_notification_test.rb +1 -1
- data/test/form_builder/error_test.rb +68 -49
- data/test/form_builder/general_test.rb +67 -62
- data/test/form_builder/hint_test.rb +15 -15
- data/test/form_builder/input_field_test.rb +33 -49
- data/test/form_builder/label_test.rb +44 -12
- data/test/form_builder/wrapper_test.rb +120 -19
- data/test/generators/simple_form_generator_test.rb +2 -2
- data/test/inputs/boolean_input_test.rb +54 -6
- data/test/inputs/collection_check_boxes_input_test.rb +63 -17
- data/test/inputs/collection_radio_buttons_input_test.rb +112 -36
- data/test/inputs/collection_select_input_test.rb +141 -36
- data/test/inputs/datetime_input_test.rb +116 -49
- data/test/inputs/disabled_test.rb +15 -15
- data/test/inputs/discovery_test.rb +56 -6
- 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 +38 -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 +41 -21
- data/test/inputs/text_input_test.rb +4 -4
- data/test/simple_form_test.rb +8 -0
- data/test/support/discovery_inputs.rb +32 -2
- data/test/support/misc_helpers.rb +66 -6
- data/test/support/models.rb +50 -24
- metadata +7 -7
|
@@ -8,17 +8,17 @@ class FormHelperTest < ActionView::TestCase
|
|
|
8
8
|
end
|
|
9
9
|
end
|
|
10
10
|
|
|
11
|
-
test 'SimpleForm
|
|
11
|
+
test 'SimpleForm adds default class to form' do
|
|
12
12
|
with_concat_form_for(:user)
|
|
13
13
|
assert_select 'form.simple_form'
|
|
14
14
|
end
|
|
15
15
|
|
|
16
|
-
test 'SimpleForm
|
|
16
|
+
test 'SimpleForm uses default browser validations by default' do
|
|
17
17
|
with_concat_form_for(:user)
|
|
18
18
|
assert_no_select 'form[novalidate]'
|
|
19
19
|
end
|
|
20
20
|
|
|
21
|
-
test 'SimpleForm
|
|
21
|
+
test 'SimpleForm does not use default browser validations if specified in the configuration options' do
|
|
22
22
|
swap SimpleForm, browser_validations: false do
|
|
23
23
|
with_concat_form_for(:user)
|
|
24
24
|
assert_select 'form[novalidate="novalidate"]'
|
|
@@ -37,54 +37,54 @@ class FormHelperTest < ActionView::TestCase
|
|
|
37
37
|
end
|
|
38
38
|
end
|
|
39
39
|
|
|
40
|
-
test 'SimpleForm
|
|
40
|
+
test 'SimpleForm adds object name as css class to form when object is not present' do
|
|
41
41
|
with_concat_form_for(:user, html: { novalidate: true })
|
|
42
42
|
assert_select 'form.simple_form.user'
|
|
43
43
|
end
|
|
44
44
|
|
|
45
|
-
test 'SimpleForm
|
|
45
|
+
test 'SimpleForm adds :as option as css class to form when object is not present' do
|
|
46
46
|
with_concat_form_for(:user, as: 'superuser')
|
|
47
47
|
assert_select 'form.simple_form.superuser'
|
|
48
48
|
end
|
|
49
49
|
|
|
50
|
-
test 'SimpleForm
|
|
50
|
+
test 'SimpleForm adds object class name with new prefix as css class to form if record is not persisted' do
|
|
51
51
|
@user.new_record!
|
|
52
52
|
with_concat_form_for(@user)
|
|
53
53
|
assert_select 'form.simple_form.new_user'
|
|
54
54
|
end
|
|
55
55
|
|
|
56
|
-
test 'SimpleForm
|
|
56
|
+
test 'SimpleForm adds :as option with new prefix as css class to form if record is not persisted' do
|
|
57
57
|
@user.new_record!
|
|
58
58
|
with_concat_form_for(@user, as: 'superuser')
|
|
59
59
|
assert_select 'form.simple_form.new_superuser'
|
|
60
60
|
end
|
|
61
61
|
|
|
62
|
-
test 'SimpleForm
|
|
62
|
+
test 'SimpleForm adds edit class prefix as css class to form if record is persisted' do
|
|
63
63
|
with_concat_form_for(@user)
|
|
64
64
|
assert_select 'form.simple_form.edit_user'
|
|
65
65
|
end
|
|
66
66
|
|
|
67
|
-
test 'SimpleForm
|
|
67
|
+
test 'SimpleForm adds :as options with edit prefix as css class to form if record is persisted' do
|
|
68
68
|
with_concat_form_for(@user, as: 'superuser')
|
|
69
69
|
assert_select 'form.simple_form.edit_superuser'
|
|
70
70
|
end
|
|
71
71
|
|
|
72
|
-
test 'SimpleForm
|
|
72
|
+
test 'SimpleForm adds last object name as css class to form when there is array of objects' do
|
|
73
73
|
with_concat_form_for([Company.new, @user])
|
|
74
74
|
assert_select 'form.simple_form.edit_user'
|
|
75
75
|
end
|
|
76
76
|
|
|
77
|
-
test 'SimpleForm
|
|
77
|
+
test 'SimpleForm does not add object class to form if css_class is specified' do
|
|
78
78
|
with_concat_form_for(:user, html: { class: nil })
|
|
79
79
|
assert_no_select 'form.user'
|
|
80
80
|
end
|
|
81
81
|
|
|
82
|
-
test 'SimpleForm
|
|
82
|
+
test 'SimpleForm adds custom class to form if css_class is specified' do
|
|
83
83
|
with_concat_form_for(:user, html: { class: 'my_class' })
|
|
84
84
|
assert_select 'form.my_class'
|
|
85
85
|
end
|
|
86
86
|
|
|
87
|
-
test '
|
|
87
|
+
test 'passes options to SimpleForm' do
|
|
88
88
|
with_concat_form_for(:user, url: '/account', html: { id: 'my_form' })
|
|
89
89
|
assert_select 'form#my_form'
|
|
90
90
|
assert_select 'form[action=/account]'
|
|
@@ -7,34 +7,34 @@ class IsolatedLabelTest < ActionView::TestCase
|
|
|
7
7
|
SimpleForm::Inputs::Base.reset_i18n_cache :translate_required_html
|
|
8
8
|
end
|
|
9
9
|
|
|
10
|
-
def with_label_for(object, attribute_name, type, options={})
|
|
10
|
+
def with_label_for(object, attribute_name, type, options = {})
|
|
11
11
|
with_concat_form_for(object) do |f|
|
|
12
12
|
options[:reflection] = Association.new(Company, :company, {}) if options.delete(:setup_association)
|
|
13
13
|
SimpleForm::Inputs::Base.new(f, attribute_name, nil, type, options).label
|
|
14
14
|
end
|
|
15
15
|
end
|
|
16
16
|
|
|
17
|
-
test 'label
|
|
17
|
+
test 'label generates a default humanized description' do
|
|
18
18
|
with_label_for @user, :name, :string
|
|
19
19
|
assert_select 'label[for=user_name]', /Name/
|
|
20
20
|
end
|
|
21
21
|
|
|
22
|
-
test 'label
|
|
22
|
+
test 'label allows a customized description' do
|
|
23
23
|
with_label_for @user, :name, :string, label: 'My label!'
|
|
24
24
|
assert_select 'label[for=user_name]', /My label!/
|
|
25
25
|
end
|
|
26
26
|
|
|
27
|
-
test 'label
|
|
27
|
+
test 'label uses human attribute name from object when available' do
|
|
28
28
|
with_label_for @user, :description, :text
|
|
29
29
|
assert_select 'label[for=user_description]', /User Description!/
|
|
30
30
|
end
|
|
31
31
|
|
|
32
|
-
test 'label
|
|
32
|
+
test 'label uses human attribute name based on association name' do
|
|
33
33
|
with_label_for @user, :company_id, :string, setup_association: true
|
|
34
34
|
assert_select 'label', /Company Human Name!/
|
|
35
35
|
end
|
|
36
36
|
|
|
37
|
-
test 'label
|
|
37
|
+
test 'label uses i18n based on model, action, and attribute to lookup translation' do
|
|
38
38
|
@controller.action_name = "new"
|
|
39
39
|
store_translations(:en, simple_form: { labels: { user: {
|
|
40
40
|
new: { description: 'Nova descrição' }
|
|
@@ -44,7 +44,7 @@ class IsolatedLabelTest < ActionView::TestCase
|
|
|
44
44
|
end
|
|
45
45
|
end
|
|
46
46
|
|
|
47
|
-
test 'label
|
|
47
|
+
test 'label fallbacks to new when action is create' do
|
|
48
48
|
@controller.action_name = "create"
|
|
49
49
|
store_translations(:en, simple_form: { labels: { user: {
|
|
50
50
|
new: { description: 'Nova descrição' }
|
|
@@ -54,7 +54,7 @@ class IsolatedLabelTest < ActionView::TestCase
|
|
|
54
54
|
end
|
|
55
55
|
end
|
|
56
56
|
|
|
57
|
-
test 'label
|
|
57
|
+
test 'label does not explode while looking for i18n translation when action is not set' do
|
|
58
58
|
def @controller.action_name; nil; end
|
|
59
59
|
|
|
60
60
|
assert_nothing_raised do
|
|
@@ -63,7 +63,7 @@ class IsolatedLabelTest < ActionView::TestCase
|
|
|
63
63
|
assert_select 'label[for=user_description]'
|
|
64
64
|
end
|
|
65
65
|
|
|
66
|
-
test 'label
|
|
66
|
+
test 'label uses i18n based on model and attribute to lookup translation' do
|
|
67
67
|
store_translations(:en, simple_form: { labels: { user: {
|
|
68
68
|
description: 'Descrição'
|
|
69
69
|
} } }) do
|
|
@@ -72,14 +72,14 @@ class IsolatedLabelTest < ActionView::TestCase
|
|
|
72
72
|
end
|
|
73
73
|
end
|
|
74
74
|
|
|
75
|
-
test 'label
|
|
75
|
+
test 'label uses i18n under defaults to lookup translation' do
|
|
76
76
|
store_translations(:en, simple_form: { labels: { defaults: { age: 'Idade' } } }) do
|
|
77
77
|
with_label_for @user, :age, :integer
|
|
78
78
|
assert_select 'label[for=user_age]', /Idade/
|
|
79
79
|
end
|
|
80
80
|
end
|
|
81
81
|
|
|
82
|
-
test 'label
|
|
82
|
+
test 'label does not use i18n label if translate is false' do
|
|
83
83
|
swap SimpleForm, translate_labels: false do
|
|
84
84
|
store_translations(:en, simple_form: { labels: { defaults: { age: 'Idade' } } }) do
|
|
85
85
|
with_label_for @user, :age, :integer
|
|
@@ -107,7 +107,7 @@ class IsolatedLabelTest < ActionView::TestCase
|
|
|
107
107
|
end
|
|
108
108
|
end
|
|
109
109
|
|
|
110
|
-
test 'label
|
|
110
|
+
test 'label does correct i18n lookup for nested models with nested translation' do
|
|
111
111
|
@user.company = Company.new(1, 'Empresa')
|
|
112
112
|
|
|
113
113
|
store_translations(:en, simple_form: { labels: {
|
|
@@ -125,7 +125,7 @@ class IsolatedLabelTest < ActionView::TestCase
|
|
|
125
125
|
end
|
|
126
126
|
end
|
|
127
127
|
|
|
128
|
-
test 'label
|
|
128
|
+
test 'label does correct i18n lookup for nested models with no nested translation' do
|
|
129
129
|
@user.company = Company.new(1, 'Empresa')
|
|
130
130
|
|
|
131
131
|
store_translations(:en, simple_form: { labels: {
|
|
@@ -144,7 +144,7 @@ class IsolatedLabelTest < ActionView::TestCase
|
|
|
144
144
|
end
|
|
145
145
|
end
|
|
146
146
|
|
|
147
|
-
test 'label
|
|
147
|
+
test 'label does correct i18n lookup for nested has_many models with no nested translation' do
|
|
148
148
|
@user.tags = [Tag.new(1, 'Empresa')]
|
|
149
149
|
|
|
150
150
|
store_translations(:en, simple_form: { labels: {
|
|
@@ -163,7 +163,7 @@ class IsolatedLabelTest < ActionView::TestCase
|
|
|
163
163
|
end
|
|
164
164
|
end
|
|
165
165
|
|
|
166
|
-
test 'label
|
|
166
|
+
test 'label has css class from type' do
|
|
167
167
|
with_label_for @user, :name, :string
|
|
168
168
|
assert_select 'label.string'
|
|
169
169
|
with_label_for @user, :description, :text
|
|
@@ -176,7 +176,7 @@ class IsolatedLabelTest < ActionView::TestCase
|
|
|
176
176
|
assert_select 'label.datetime'
|
|
177
177
|
end
|
|
178
178
|
|
|
179
|
-
test 'label
|
|
179
|
+
test 'label does not have css class from type when generate_additional_classes_for does not include :label' do
|
|
180
180
|
swap SimpleForm, generate_additional_classes_for: [:wrapper, :input] do
|
|
181
181
|
with_label_for @user, :name, :string
|
|
182
182
|
assert_no_select 'label.string'
|
|
@@ -191,21 +191,21 @@ class IsolatedLabelTest < ActionView::TestCase
|
|
|
191
191
|
end
|
|
192
192
|
end
|
|
193
193
|
|
|
194
|
-
test 'label
|
|
194
|
+
test 'label does not generate empty css class' do
|
|
195
195
|
swap SimpleForm, generate_additional_classes_for: [:wrapper, :input] do
|
|
196
196
|
with_label_for @user, :name, :string
|
|
197
197
|
assert_no_select 'label[class]'
|
|
198
198
|
end
|
|
199
199
|
end
|
|
200
200
|
|
|
201
|
-
test 'label
|
|
201
|
+
test 'label obtains required from ActiveModel::Validations when it is included' do
|
|
202
202
|
with_label_for @validating_user, :name, :string
|
|
203
203
|
assert_select 'label.required'
|
|
204
204
|
with_label_for @validating_user, :status, :string
|
|
205
205
|
assert_select 'label.optional'
|
|
206
206
|
end
|
|
207
207
|
|
|
208
|
-
test 'label
|
|
208
|
+
test 'label does not obtain required from ActiveModel::Validations when generate_additional_classes_for does not include :label' do
|
|
209
209
|
swap SimpleForm, generate_additional_classes_for: [:wrapper, :input] do
|
|
210
210
|
with_label_for @validating_user, :name, :string
|
|
211
211
|
assert_no_select 'label.required'
|
|
@@ -214,48 +214,48 @@ class IsolatedLabelTest < ActionView::TestCase
|
|
|
214
214
|
end
|
|
215
215
|
end
|
|
216
216
|
|
|
217
|
-
test 'label
|
|
217
|
+
test 'label allows overriding required when ActiveModel::Validations is included' do
|
|
218
218
|
with_label_for @validating_user, :name, :string, required: false
|
|
219
219
|
assert_select 'label.optional'
|
|
220
220
|
with_label_for @validating_user, :status, :string, required: true
|
|
221
221
|
assert_select 'label.required'
|
|
222
222
|
end
|
|
223
223
|
|
|
224
|
-
test 'label
|
|
224
|
+
test 'label is required by default when ActiveModel::Validations is not included' do
|
|
225
225
|
with_label_for @user, :name, :string
|
|
226
226
|
assert_select 'label.required'
|
|
227
227
|
end
|
|
228
228
|
|
|
229
|
-
test 'label
|
|
229
|
+
test 'label is able to disable required when ActiveModel::Validations is not included' do
|
|
230
230
|
with_label_for @user, :name, :string, required: false
|
|
231
231
|
assert_no_select 'label.required'
|
|
232
232
|
end
|
|
233
233
|
|
|
234
|
-
test 'label
|
|
234
|
+
test 'label adds required text when required' do
|
|
235
235
|
with_label_for @user, :name, :string
|
|
236
236
|
assert_select 'label.required abbr[title=required]', '*'
|
|
237
237
|
end
|
|
238
238
|
|
|
239
|
-
test 'label
|
|
239
|
+
test 'label does not have required text in no required inputs' do
|
|
240
240
|
with_label_for @user, :name, :string, required: false
|
|
241
241
|
assert_no_select 'form label abbr'
|
|
242
242
|
end
|
|
243
243
|
|
|
244
|
-
test 'label
|
|
244
|
+
test 'label uses i18n to find required text' do
|
|
245
245
|
store_translations(:en, simple_form: { required: { text: 'campo requerido' } }) do
|
|
246
246
|
with_label_for @user, :name, :string
|
|
247
247
|
assert_select 'form label abbr[title=campo requerido]', '*'
|
|
248
248
|
end
|
|
249
249
|
end
|
|
250
250
|
|
|
251
|
-
test 'label
|
|
251
|
+
test 'label uses i18n to find required mark' do
|
|
252
252
|
store_translations(:en, simple_form: { required: { mark: '*-*' } }) do
|
|
253
253
|
with_label_for @user, :name, :string
|
|
254
254
|
assert_select 'form label abbr', '*-*'
|
|
255
255
|
end
|
|
256
256
|
end
|
|
257
257
|
|
|
258
|
-
test 'label
|
|
258
|
+
test 'label uses i18n to find required string tag' do
|
|
259
259
|
store_translations(:en, simple_form: { required: { html: '<span class="required" title="requerido">*</span>' } }) do
|
|
260
260
|
with_label_for @user, :name, :string
|
|
261
261
|
assert_no_select 'form label abbr'
|
|
@@ -263,37 +263,37 @@ class IsolatedLabelTest < ActionView::TestCase
|
|
|
263
263
|
end
|
|
264
264
|
end
|
|
265
265
|
|
|
266
|
-
test 'label
|
|
266
|
+
test 'label allows overwriting input id' do
|
|
267
267
|
with_label_for @user, :name, :string, input_html: { id: 'my_new_id' }
|
|
268
268
|
assert_select 'label[for=my_new_id]'
|
|
269
269
|
end
|
|
270
270
|
|
|
271
|
-
test 'label
|
|
271
|
+
test 'label allows overwriting of for attribute' do
|
|
272
272
|
with_label_for @user, :name, :string, label_html: { for: 'my_new_id' }
|
|
273
273
|
assert_select 'label[for=my_new_id]'
|
|
274
274
|
end
|
|
275
275
|
|
|
276
|
-
test 'label
|
|
276
|
+
test 'label allows overwriting of for attribute with input_html not containing id' do
|
|
277
277
|
with_label_for @user, :name, :string, label_html: { for: 'my_new_id' }, input_html: { class: 'foo' }
|
|
278
278
|
assert_select 'label[for=my_new_id]'
|
|
279
279
|
end
|
|
280
280
|
|
|
281
|
-
test 'label
|
|
281
|
+
test 'label uses default input id when it was not overridden' do
|
|
282
282
|
with_label_for @user, :name, :string, input_html: { class: 'my_new_id' }
|
|
283
283
|
assert_select 'label[for=user_name]'
|
|
284
284
|
end
|
|
285
285
|
|
|
286
|
-
test 'label
|
|
286
|
+
test 'label is generated properly when object is not present' do
|
|
287
287
|
with_label_for :project, :name, :string
|
|
288
288
|
assert_select 'label[for=project_name]', /Name/
|
|
289
289
|
end
|
|
290
290
|
|
|
291
|
-
test 'label
|
|
291
|
+
test 'label includes for attribute for select collection' do
|
|
292
292
|
with_label_for @user, :sex, :select, collection: [:male, :female]
|
|
293
293
|
assert_select 'label[for=user_sex]'
|
|
294
294
|
end
|
|
295
295
|
|
|
296
|
-
test 'label
|
|
296
|
+
test 'label uses i18n properly when object is not present' do
|
|
297
297
|
store_translations(:en, simple_form: { labels: {
|
|
298
298
|
project: { name: 'Nome' }
|
|
299
299
|
} }) do
|
|
@@ -302,14 +302,14 @@ class IsolatedLabelTest < ActionView::TestCase
|
|
|
302
302
|
end
|
|
303
303
|
end
|
|
304
304
|
|
|
305
|
-
test 'label
|
|
305
|
+
test 'label adds required by default when object is not present' do
|
|
306
306
|
with_label_for :project, :name, :string
|
|
307
307
|
assert_select 'label.required[for=project_name]'
|
|
308
308
|
with_label_for :project, :description, :string, required: false
|
|
309
309
|
assert_no_select 'label.required[for=project_description]'
|
|
310
310
|
end
|
|
311
311
|
|
|
312
|
-
test 'label
|
|
312
|
+
test 'label adds chosen label class' do
|
|
313
313
|
swap SimpleForm, label_class: :my_custom_class do
|
|
314
314
|
with_label_for @user, :name, :string
|
|
315
315
|
assert_select 'label.my_custom_class'
|
|
@@ -8,7 +8,7 @@ class AssociationTest < ActionView::TestCase
|
|
|
8
8
|
end
|
|
9
9
|
end
|
|
10
10
|
|
|
11
|
-
test 'builder
|
|
11
|
+
test 'builder does not allow creating an association input when no object exists' do
|
|
12
12
|
assert_raise ArgumentError do
|
|
13
13
|
with_association_for :post, :author
|
|
14
14
|
end
|
|
@@ -113,6 +113,14 @@ class AssociationTest < ActionView::TestCase
|
|
|
113
113
|
assert_no_select 'form select option[value=3]'
|
|
114
114
|
end
|
|
115
115
|
|
|
116
|
+
test 'builder allows collection to have a scope' do
|
|
117
|
+
with_association_for @user, :special_pictures
|
|
118
|
+
assert_select 'form select.select#user_special_picture_ids'
|
|
119
|
+
assert_select 'form select option[value=3]', '3'
|
|
120
|
+
assert_no_select 'form select option[value=1]'
|
|
121
|
+
assert_no_select 'form select option[value=2]'
|
|
122
|
+
end
|
|
123
|
+
|
|
116
124
|
test 'builder marks the record which already belongs to the user' do
|
|
117
125
|
@user.company_id = 2
|
|
118
126
|
with_association_for @user, :company, as: :radio_buttons
|
|
@@ -122,7 +130,7 @@ class AssociationTest < ActionView::TestCase
|
|
|
122
130
|
end
|
|
123
131
|
|
|
124
132
|
# ASSOCIATIONS - FINDERS
|
|
125
|
-
test 'builder
|
|
133
|
+
test 'builder uses reflection conditions to find collection' do
|
|
126
134
|
with_association_for @user, :special_company
|
|
127
135
|
assert_select 'form select.select#user_special_company_id'
|
|
128
136
|
assert_select 'form select option[value=1]'
|
|
@@ -130,7 +138,7 @@ class AssociationTest < ActionView::TestCase
|
|
|
130
138
|
assert_no_select 'form select option[value=3]'
|
|
131
139
|
end
|
|
132
140
|
|
|
133
|
-
test 'builder
|
|
141
|
+
test 'builder allows overriding collection to association input' do
|
|
134
142
|
with_association_for @user, :company, include_blank: false,
|
|
135
143
|
collection: [Company.new(999, 'Teste')]
|
|
136
144
|
assert_select 'form select.select#user_company_id'
|
|
@@ -146,6 +154,15 @@ class AssociationTest < ActionView::TestCase
|
|
|
146
154
|
end
|
|
147
155
|
end
|
|
148
156
|
|
|
157
|
+
test 'builder does not call order if the given association does not respond to it' do
|
|
158
|
+
with_association_for @user, :pictures
|
|
159
|
+
assert_select 'form select.select#user_picture_ids'
|
|
160
|
+
assert_select 'form select[multiple=multiple]'
|
|
161
|
+
assert_select 'form select option[value=1]', 'Picture 1'
|
|
162
|
+
assert_select 'form select option[value=2]', 'Picture 2'
|
|
163
|
+
assert_select 'form select option[value=3]', 'Picture 3'
|
|
164
|
+
end
|
|
165
|
+
|
|
149
166
|
test 'builder creates a select with multiple options for collection associations' do
|
|
150
167
|
with_association_for @user, :tags
|
|
151
168
|
assert_select 'form select.select#user_tag_ids'
|
|
@@ -192,7 +209,7 @@ class AssociationTest < ActionView::TestCase
|
|
|
192
209
|
assert_select 'form ul li', count: 3
|
|
193
210
|
end
|
|
194
211
|
|
|
195
|
-
test 'builder with collection support
|
|
212
|
+
test 'builder with collection support does not change the options hash' do
|
|
196
213
|
options = { as: :check_boxes, collection_wrapper_tag: :ul, item_wrapper_tag: :li}
|
|
197
214
|
with_association_for @user, :tags, options
|
|
198
215
|
|
|
@@ -8,30 +8,30 @@ class ButtonTest < ActionView::TestCase
|
|
|
8
8
|
end
|
|
9
9
|
end
|
|
10
10
|
|
|
11
|
-
test 'builder
|
|
11
|
+
test 'builder creates buttons' do
|
|
12
12
|
with_button_for :post, :submit
|
|
13
13
|
assert_select 'form input.button[type=submit][value=Save Post]'
|
|
14
14
|
end
|
|
15
15
|
|
|
16
|
-
test 'builder
|
|
16
|
+
test 'builder creates buttons with options' do
|
|
17
17
|
with_button_for :post, :submit, class: 'my_button'
|
|
18
18
|
assert_select 'form input.button.my_button[type=submit][value=Save Post]'
|
|
19
19
|
end
|
|
20
20
|
|
|
21
|
-
test 'builder
|
|
21
|
+
test 'builder does not modify the options hash' do
|
|
22
22
|
options = { class: 'my_button' }
|
|
23
23
|
with_button_for :post, :submit, options
|
|
24
24
|
assert_select 'form input.button.my_button[type=submit][value=Save Post]'
|
|
25
25
|
assert_equal({ class: 'my_button' }, options)
|
|
26
26
|
end
|
|
27
27
|
|
|
28
|
-
test 'builder
|
|
28
|
+
test 'builder creates buttons for records' do
|
|
29
29
|
@user.new_record!
|
|
30
30
|
with_button_for @user, :submit
|
|
31
31
|
assert_select 'form input.button[type=submit][value=Create User]'
|
|
32
32
|
end
|
|
33
33
|
|
|
34
|
-
test "builder
|
|
34
|
+
test "builder uses the default class from the configuration" do
|
|
35
35
|
swap SimpleForm, button_class: 'btn' do
|
|
36
36
|
with_button_for :post, :submit
|
|
37
37
|
assert_select 'form input.btn[type=submit][value=Save Post]'
|
|
@@ -3,7 +3,7 @@ require 'test_helper'
|
|
|
3
3
|
|
|
4
4
|
# Tests for f.error_notification
|
|
5
5
|
class ErrorNotificationTest < ActionView::TestCase
|
|
6
|
-
def with_error_notification_for(object, options={}, &block)
|
|
6
|
+
def with_error_notification_for(object, options = {}, &block)
|
|
7
7
|
with_concat_form_for(object) do |f|
|
|
8
8
|
f.error_notification(options)
|
|
9
9
|
end
|