simple_form 2.1.0 → 3.2.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 +7 -0
- data/CHANGELOG.md +77 -33
- data/MIT-LICENSE +1 -1
- data/README.md +387 -187
- data/lib/generators/simple_form/install_generator.rb +4 -4
- data/lib/generators/simple_form/templates/README +3 -4
- data/lib/generators/simple_form/templates/config/initializers/simple_form.rb +45 -22
- data/lib/generators/simple_form/templates/config/initializers/simple_form_bootstrap.rb +128 -24
- data/lib/generators/simple_form/templates/config/initializers/simple_form_foundation.rb +87 -6
- data/lib/generators/simple_form/templates/config/locales/simple_form.en.yml +7 -2
- data/lib/simple_form/action_view_extensions/builder.rb +2 -319
- data/lib/simple_form/action_view_extensions/form_helper.rb +8 -11
- data/lib/simple_form/components/errors.rb +28 -2
- data/lib/simple_form/components/hints.rb +8 -3
- data/lib/simple_form/components/html5.rb +6 -3
- data/lib/simple_form/components/label_input.rb +20 -2
- data/lib/simple_form/components/labels.rb +14 -10
- data/lib/simple_form/components/maxlength.rb +2 -9
- data/lib/simple_form/components/min_max.rb +1 -1
- data/lib/simple_form/components/pattern.rb +3 -3
- data/lib/simple_form/components/placeholders.rb +2 -2
- data/lib/simple_form/components/readonly.rb +1 -1
- data/lib/simple_form/components.rb +1 -1
- data/lib/simple_form/error_notification.rb +2 -2
- data/lib/simple_form/form_builder.rb +262 -107
- data/lib/simple_form/helpers.rb +6 -6
- data/lib/simple_form/inputs/base.rb +37 -16
- data/lib/simple_form/inputs/block_input.rb +2 -2
- data/lib/simple_form/inputs/boolean_input.rb +33 -18
- data/lib/simple_form/inputs/collection_input.rb +34 -13
- data/lib/simple_form/inputs/collection_radio_buttons_input.rb +7 -12
- data/lib/simple_form/inputs/collection_select_input.rb +4 -2
- data/lib/simple_form/inputs/date_time_input.rb +23 -9
- 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 +3 -8
- data/lib/simple_form/inputs/password_input.rb +4 -3
- 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 -3
- data/lib/simple_form/inputs/text_input.rb +4 -2
- data/lib/simple_form/railtie.rb +14 -0
- data/lib/simple_form/tags.rb +68 -0
- data/lib/simple_form/version.rb +1 -1
- data/lib/simple_form/wrappers/builder.rb +11 -35
- data/lib/simple_form/wrappers/leaf.rb +28 -0
- data/lib/simple_form/wrappers/many.rb +7 -7
- data/lib/simple_form/wrappers/root.rb +2 -2
- data/lib/simple_form/wrappers/single.rb +5 -3
- data/lib/simple_form/wrappers.rb +2 -1
- data/lib/simple_form.rb +99 -52
- data/test/action_view_extensions/builder_test.rb +113 -127
- data/test/action_view_extensions/form_helper_test.rb +58 -30
- data/test/components/label_test.rb +83 -83
- data/test/form_builder/association_test.rb +96 -61
- data/test/form_builder/button_test.rb +14 -14
- data/test/form_builder/error_notification_test.rb +9 -9
- data/test/form_builder/error_test.rb +159 -34
- data/test/form_builder/general_test.rb +176 -121
- data/test/form_builder/hint_test.rb +43 -37
- data/test/form_builder/input_field_test.rb +99 -52
- data/test/form_builder/label_test.rb +67 -15
- data/test/form_builder/wrapper_test.rb +157 -41
- data/test/generators/simple_form_generator_test.rb +4 -4
- data/test/inputs/boolean_input_test.rb +92 -24
- data/test/inputs/collection_check_boxes_input_test.rb +150 -71
- data/test/inputs/collection_radio_buttons_input_test.rb +213 -113
- data/test/inputs/collection_select_input_test.rb +221 -85
- data/test/inputs/datetime_input_test.rb +125 -47
- data/test/inputs/disabled_test.rb +25 -25
- data/test/inputs/discovery_test.rb +60 -10
- data/test/inputs/file_input_test.rb +3 -3
- data/test/inputs/general_test.rb +48 -32
- data/test/inputs/grouped_collection_select_input_test.rb +76 -27
- data/test/inputs/hidden_input_test.rb +6 -5
- data/test/inputs/numeric_input_test.rb +46 -46
- data/test/inputs/priority_input_test.rb +21 -15
- data/test/inputs/readonly_test.rb +31 -31
- data/test/inputs/required_test.rb +30 -18
- data/test/inputs/string_input_test.rb +53 -52
- data/test/inputs/text_input_test.rb +15 -8
- data/test/simple_form_test.rb +8 -0
- data/test/support/discovery_inputs.rb +32 -2
- data/test/support/misc_helpers.rb +130 -29
- data/test/support/mock_controller.rb +6 -6
- data/test/support/models.rb +125 -71
- data/test/test_helper.rb +28 -35
- metadata +17 -29
- data/lib/simple_form/action_view_extensions/builder.rb.orig +0 -247
- data/lib/simple_form/core_ext/hash.rb +0 -16
- data/lib/simple_form/form_builder.rb.orig +0 -486
- data/lib/simple_form/version.rb.orig +0 -7
@@ -8,95 +8,114 @@ 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 allows overriding default form class' do
|
17
|
+
swap SimpleForm, default_form_class: "my_custom_class" do
|
18
|
+
with_concat_form_for :user, html: { class: "override_class" }
|
19
|
+
assert_no_select 'form.my_custom_class'
|
20
|
+
assert_select 'form.override_class'
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
# Remove this test when SimpleForm.form_class is removed in 4.x
|
25
|
+
test 'SimpleForm allows overriding default form class, but not form class' do
|
26
|
+
ActiveSupport::Deprecation.silence do
|
27
|
+
swap SimpleForm, form_class: "fixed_class", default_form_class: "my_custom_class" do
|
28
|
+
with_concat_form_for :user, html: { class: "override_class" }
|
29
|
+
assert_no_select 'form.my_custom_class'
|
30
|
+
assert_select 'form.fixed_class.override_class'
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
test 'SimpleForm uses default browser validations by default' do
|
17
36
|
with_concat_form_for(:user)
|
18
37
|
assert_no_select 'form[novalidate]'
|
19
38
|
end
|
20
39
|
|
21
|
-
test 'SimpleForm
|
22
|
-
swap SimpleForm, :
|
40
|
+
test 'SimpleForm does not use default browser validations if specified in the configuration options' do
|
41
|
+
swap SimpleForm, browser_validations: false do
|
23
42
|
with_concat_form_for(:user)
|
24
43
|
assert_select 'form[novalidate="novalidate"]'
|
25
44
|
end
|
26
45
|
end
|
27
46
|
|
28
|
-
test '
|
29
|
-
with_concat_form_for(:user, :
|
47
|
+
test 'disabled browser validations overrides default configuration' do
|
48
|
+
with_concat_form_for(:user, html: { novalidate: true })
|
30
49
|
assert_select 'form[novalidate="novalidate"]'
|
31
50
|
end
|
32
51
|
|
33
|
-
test '
|
34
|
-
swap SimpleForm, :
|
35
|
-
with_concat_form_for(:user, :
|
52
|
+
test 'enabled browser validations overrides disabled configuration' do
|
53
|
+
swap SimpleForm, browser_validations: false do
|
54
|
+
with_concat_form_for(:user, html: { novalidate: false })
|
36
55
|
assert_no_select 'form[novalidate]'
|
37
56
|
end
|
38
57
|
end
|
39
58
|
|
40
|
-
test 'SimpleForm
|
41
|
-
with_concat_form_for(:user, :
|
59
|
+
test 'SimpleForm adds object name as css class to form when object is not present' do
|
60
|
+
with_concat_form_for(:user, html: { novalidate: true })
|
42
61
|
assert_select 'form.simple_form.user'
|
43
62
|
end
|
44
63
|
|
45
|
-
test 'SimpleForm
|
46
|
-
with_concat_form_for(:user, :
|
64
|
+
test 'SimpleForm adds :as option as css class to form when object is not present' do
|
65
|
+
with_concat_form_for(:user, as: 'superuser')
|
47
66
|
assert_select 'form.simple_form.superuser'
|
48
67
|
end
|
49
68
|
|
50
|
-
test 'SimpleForm
|
69
|
+
test 'SimpleForm adds object class name with new prefix as css class to form if record is not persisted' do
|
51
70
|
@user.new_record!
|
52
71
|
with_concat_form_for(@user)
|
53
72
|
assert_select 'form.simple_form.new_user'
|
54
73
|
end
|
55
74
|
|
56
|
-
test 'SimpleForm
|
75
|
+
test 'SimpleForm adds :as option with new prefix as css class to form if record is not persisted' do
|
57
76
|
@user.new_record!
|
58
|
-
with_concat_form_for(@user, :
|
77
|
+
with_concat_form_for(@user, as: 'superuser')
|
59
78
|
assert_select 'form.simple_form.new_superuser'
|
60
79
|
end
|
61
80
|
|
62
|
-
test 'SimpleForm
|
81
|
+
test 'SimpleForm adds edit class prefix as css class to form if record is persisted' do
|
63
82
|
with_concat_form_for(@user)
|
64
83
|
assert_select 'form.simple_form.edit_user'
|
65
84
|
end
|
66
85
|
|
67
|
-
test 'SimpleForm
|
68
|
-
with_concat_form_for(@user, :
|
86
|
+
test 'SimpleForm adds :as options with edit prefix as css class to form if record is persisted' do
|
87
|
+
with_concat_form_for(@user, as: 'superuser')
|
69
88
|
assert_select 'form.simple_form.edit_superuser'
|
70
89
|
end
|
71
90
|
|
72
|
-
test 'SimpleForm
|
91
|
+
test 'SimpleForm adds last object name as css class to form when there is array of objects' do
|
73
92
|
with_concat_form_for([Company.new, @user])
|
74
93
|
assert_select 'form.simple_form.edit_user'
|
75
94
|
end
|
76
95
|
|
77
|
-
test 'SimpleForm
|
78
|
-
with_concat_form_for(:user, :
|
96
|
+
test 'SimpleForm does not add object class to form if css_class is specified' do
|
97
|
+
with_concat_form_for(:user, html: { class: nil })
|
79
98
|
assert_no_select 'form.user'
|
80
99
|
end
|
81
100
|
|
82
|
-
test 'SimpleForm
|
83
|
-
with_concat_form_for(:user, :
|
101
|
+
test 'SimpleForm adds custom class to form if css_class is specified' do
|
102
|
+
with_concat_form_for(:user, html: { class: 'my_class' })
|
84
103
|
assert_select 'form.my_class'
|
85
104
|
end
|
86
105
|
|
87
|
-
test '
|
88
|
-
with_concat_form_for(:user, :
|
106
|
+
test 'passes options to SimpleForm' do
|
107
|
+
with_concat_form_for(:user, url: '/account', html: { id: 'my_form' })
|
89
108
|
assert_select 'form#my_form'
|
90
|
-
assert_select 'form[action
|
109
|
+
assert_select 'form[action="/account"]'
|
91
110
|
end
|
92
111
|
|
93
|
-
test '
|
112
|
+
test 'form_for yields an instance of FormBuilder' do
|
94
113
|
with_concat_form_for(:user) do |f|
|
95
114
|
assert f.instance_of?(SimpleForm::FormBuilder)
|
96
115
|
end
|
97
116
|
end
|
98
117
|
|
99
|
-
test '
|
118
|
+
test 'fields_for with a hash like model yields an instance of FormBuilder' do
|
100
119
|
with_concat_fields_for(:author, HashBackedAuthor.new) do |f|
|
101
120
|
assert f.instance_of?(SimpleForm::FormBuilder)
|
102
121
|
f.input :name
|
@@ -131,10 +150,19 @@ class FormHelperTest < ActionView::TestCase
|
|
131
150
|
end
|
132
151
|
end
|
133
152
|
|
153
|
+
test 'SimpleForm for swaps default action view field_error_proc' do
|
154
|
+
expected_error_proc = lambda {}
|
155
|
+
swap SimpleForm, field_error_proc: expected_error_proc do
|
156
|
+
simple_form_for :user do |f|
|
157
|
+
assert_equal expected_error_proc, ::ActionView::Base.field_error_proc
|
158
|
+
end
|
159
|
+
end
|
160
|
+
end
|
161
|
+
|
134
162
|
private
|
135
163
|
|
136
164
|
def swap_field_error_proc(expected_error_proc = lambda {})
|
137
|
-
swap ActionView::Base, :
|
165
|
+
swap ActionView::Base, field_error_proc: expected_error_proc do
|
138
166
|
yield
|
139
167
|
|
140
168
|
assert_equal expected_error_proc, ActionView::Base.field_error_proc
|
@@ -7,54 +7,54 @@ 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
|
23
|
-
with_label_for @user, :name, :string, :
|
22
|
+
test 'label allows a customized description' do
|
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
|
33
|
-
with_label_for @user, :company_id, :string, :
|
32
|
+
test 'label uses human attribute name based on association name' do
|
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
|
-
store_translations(:en, :
|
40
|
-
:
|
39
|
+
store_translations(:en, simple_form: { labels: { user: {
|
40
|
+
new: { description: 'Nova descrição' }
|
41
41
|
} } }) do
|
42
42
|
with_label_for @user, :description, :text
|
43
43
|
assert_select 'label[for=user_description]', /Nova descrição/
|
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
|
-
store_translations(:en, :
|
50
|
-
:
|
49
|
+
store_translations(:en, simple_form: { labels: { user: {
|
50
|
+
new: { description: 'Nova descrição' }
|
51
51
|
} } }) do
|
52
52
|
with_label_for @user, :description, :text
|
53
53
|
assert_select 'label[for=user_description]', /Nova descrição/
|
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,25 +63,25 @@ class IsolatedLabelTest < ActionView::TestCase
|
|
63
63
|
assert_select 'label[for=user_description]'
|
64
64
|
end
|
65
65
|
|
66
|
-
test 'label
|
67
|
-
store_translations(:en, :
|
68
|
-
:
|
66
|
+
test 'label uses i18n based on model and attribute to lookup translation' do
|
67
|
+
store_translations(:en, simple_form: { labels: { user: {
|
68
|
+
description: 'Descrição'
|
69
69
|
} } }) do
|
70
70
|
with_label_for @user, :description, :text
|
71
71
|
assert_select 'label[for=user_description]', /Descrição/
|
72
72
|
end
|
73
73
|
end
|
74
74
|
|
75
|
-
test 'label
|
76
|
-
store_translations(:en, :
|
75
|
+
test 'label uses i18n under defaults to lookup translation' do
|
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
|
83
|
-
swap SimpleForm, :
|
84
|
-
store_translations(:en, :
|
82
|
+
test 'label does not use i18n label if translate is false' do
|
83
|
+
swap SimpleForm, translate_labels: false do
|
84
|
+
store_translations(:en, simple_form: { labels: { defaults: { age: 'Idade' } } }) do
|
85
85
|
with_label_for @user, :age, :integer
|
86
86
|
assert_select 'label[for=user_age]', /Age/
|
87
87
|
end
|
@@ -89,29 +89,29 @@ class IsolatedLabelTest < ActionView::TestCase
|
|
89
89
|
end
|
90
90
|
|
91
91
|
test 'label uses i18n with lookup for association name' do
|
92
|
-
store_translations(:en, :
|
93
|
-
:
|
92
|
+
store_translations(:en, simple_form: { labels: {
|
93
|
+
user: { company: 'My company!' }
|
94
94
|
} }) do
|
95
|
-
with_label_for @user, :company_id, :string, :
|
95
|
+
with_label_for @user, :company_id, :string, setup_association: true
|
96
96
|
assert_select 'label[for=user_company_id]', /My company!/
|
97
97
|
end
|
98
98
|
end
|
99
99
|
|
100
100
|
test 'label uses i18n under defaults namespace to lookup for association name' do
|
101
|
-
store_translations(:en, :
|
102
|
-
:
|
101
|
+
store_translations(:en, simple_form: { labels: {
|
102
|
+
defaults: { company: 'Plataformatec' }
|
103
103
|
} }) do
|
104
|
-
with_label_for @user, :company, :string, :
|
104
|
+
with_label_for @user, :company, :string, setup_association: true
|
105
105
|
|
106
106
|
assert_select 'form label', /Plataformatec/
|
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
|
-
store_translations(:en, :
|
114
|
-
:
|
113
|
+
store_translations(:en, simple_form: { labels: {
|
114
|
+
user: { name: 'Usuario', company: { name: 'Nome da empresa' } }
|
115
115
|
} }) do
|
116
116
|
with_concat_form_for @user do |f|
|
117
117
|
concat f.input :name
|
@@ -125,12 +125,12 @@ 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
|
-
store_translations(:en, :
|
132
|
-
:
|
133
|
-
:
|
131
|
+
store_translations(:en, simple_form: { labels: {
|
132
|
+
user: { name: 'Usuario' },
|
133
|
+
company: { name: 'Nome da empresa' }
|
134
134
|
} }) do
|
135
135
|
with_concat_form_for @user do |f|
|
136
136
|
concat f.input :name
|
@@ -144,16 +144,16 @@ 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
|
-
store_translations(:en, :
|
151
|
-
:
|
152
|
-
:
|
150
|
+
store_translations(:en, simple_form: { labels: {
|
151
|
+
user: { name: 'Usuario' },
|
152
|
+
tags: { name: 'Nome da empresa' }
|
153
153
|
} }) do
|
154
154
|
with_concat_form_for @user do |f|
|
155
155
|
concat f.input :name
|
156
|
-
concat(f.simple_fields_for(:tags, :
|
156
|
+
concat(f.simple_fields_for(:tags, child_index: "new_index") do |tags_form|
|
157
157
|
concat(tags_form.input :name)
|
158
158
|
end)
|
159
159
|
end
|
@@ -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,8 +176,8 @@ class IsolatedLabelTest < ActionView::TestCase
|
|
176
176
|
assert_select 'label.datetime'
|
177
177
|
end
|
178
178
|
|
179
|
-
test 'label
|
180
|
-
swap SimpleForm, :
|
179
|
+
test 'label does not have css class from type when generate_additional_classes_for does not include :label' do
|
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'
|
183
183
|
with_label_for @user, :description, :text
|
@@ -191,22 +191,22 @@ class IsolatedLabelTest < ActionView::TestCase
|
|
191
191
|
end
|
192
192
|
end
|
193
193
|
|
194
|
-
test 'label
|
195
|
-
swap SimpleForm, :
|
194
|
+
test 'label does not generate empty css class' do
|
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
|
209
|
-
swap SimpleForm, :
|
208
|
+
test 'label does not obtain required from ActiveModel::Validations when generate_additional_classes_for does not include :label' do
|
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'
|
212
212
|
with_label_for @validating_user, :status, :string
|
@@ -214,110 +214,110 @@ class IsolatedLabelTest < ActionView::TestCase
|
|
214
214
|
end
|
215
215
|
end
|
216
216
|
|
217
|
-
test 'label
|
218
|
-
with_label_for @validating_user, :name, :string, :
|
217
|
+
test 'label allows overriding required when ActiveModel::Validations is included' do
|
218
|
+
with_label_for @validating_user, :name, :string, required: false
|
219
219
|
assert_select 'label.optional'
|
220
|
-
with_label_for @validating_user, :status, :string, :
|
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
|
230
|
-
with_label_for @user, :name, :string, :
|
229
|
+
test 'label is able to disable required when ActiveModel::Validations is not included' do
|
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
|
240
|
-
with_label_for @user, :name, :string, :
|
239
|
+
test 'label does not have required text in no required inputs' do
|
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
|
245
|
-
store_translations(:en, :
|
244
|
+
test 'label uses i18n to find required text' do
|
245
|
+
store_translations(:en, simple_form: { required: { text: 'campo requerido' } }) do
|
246
246
|
with_label_for @user, :name, :string
|
247
|
-
assert_select 'form label abbr[title=campo requerido]', '*'
|
247
|
+
assert_select 'form label abbr[title="campo requerido"]', '*'
|
248
248
|
end
|
249
249
|
end
|
250
250
|
|
251
|
-
test 'label
|
252
|
-
store_translations(:en, :
|
251
|
+
test 'label uses i18n to find required mark' do
|
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
|
259
|
-
store_translations(:en, :
|
258
|
+
test 'label uses i18n to find required string tag' do
|
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'
|
262
262
|
assert_select 'form label span.required[title=requerido]', '*'
|
263
263
|
end
|
264
264
|
end
|
265
265
|
|
266
|
-
test 'label
|
267
|
-
with_label_for @user, :name, :string, :
|
266
|
+
test 'label allows overwriting input id' do
|
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
|
272
|
-
with_label_for @user, :name, :string, :
|
271
|
+
test 'label allows overwriting of for attribute' do
|
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
|
277
|
-
with_label_for @user, :name, :string, :
|
276
|
+
test 'label allows overwriting of for attribute with input_html not containing id' do
|
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
|
282
|
-
with_label_for @user, :name, :string, :
|
281
|
+
test 'label uses default input id when it was not overridden' do
|
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
|
292
|
-
with_label_for @user, :sex, :select, :
|
291
|
+
test 'label includes for attribute for select collection' do
|
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
|
297
|
-
store_translations(:en, :
|
298
|
-
:
|
296
|
+
test 'label uses i18n properly when object is not present' do
|
297
|
+
store_translations(:en, simple_form: { labels: {
|
298
|
+
project: { name: 'Nome' }
|
299
299
|
} }) do
|
300
300
|
with_label_for :project, :name, :string
|
301
301
|
assert_select 'label[for=project_name]', /Nome/
|
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
|
-
with_label_for :project, :description, :string, :
|
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
|
313
|
-
swap SimpleForm, :
|
312
|
+
test 'label adds chosen label class' do
|
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'
|
316
316
|
end
|
317
317
|
end
|
318
318
|
|
319
319
|
test 'label strips extra classes even when label_class is nil' do
|
320
|
-
swap SimpleForm, :
|
320
|
+
swap SimpleForm, label_class: nil do
|
321
321
|
with_label_for @user, :name, :string
|
322
322
|
assert_select "label[class='string required']"
|
323
323
|
assert_no_select "label[class='string required ']"
|