simple_form 5.2.0 → 5.3.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -1
- data/MIT-LICENSE +1 -1
- data/README.md +3 -4
- data/lib/simple_form/components/label_input.rb +1 -1
- data/lib/simple_form/form_builder.rb +1 -5
- data/lib/simple_form/railtie.rb +4 -0
- data/lib/simple_form/version.rb +1 -1
- data/lib/simple_form/wrappers/leaf.rb +1 -1
- data/lib/simple_form.rb +8 -4
- metadata +5 -85
- data/test/action_view_extensions/builder_test.rb +0 -634
- data/test/action_view_extensions/form_helper_test.rb +0 -172
- data/test/components/custom_components_test.rb +0 -62
- data/test/components/label_test.rb +0 -352
- data/test/form_builder/association_test.rb +0 -252
- data/test/form_builder/button_test.rb +0 -48
- data/test/form_builder/error_notification_test.rb +0 -80
- data/test/form_builder/error_test.rb +0 -281
- data/test/form_builder/general_test.rb +0 -539
- data/test/form_builder/hint_test.rb +0 -150
- data/test/form_builder/input_field_test.rb +0 -195
- data/test/form_builder/label_test.rb +0 -136
- data/test/form_builder/wrapper_test.rb +0 -378
- data/test/generators/simple_form_generator_test.rb +0 -43
- data/test/inputs/boolean_input_test.rb +0 -256
- data/test/inputs/collection_check_boxes_input_test.rb +0 -323
- data/test/inputs/collection_radio_buttons_input_test.rb +0 -446
- data/test/inputs/collection_select_input_test.rb +0 -380
- data/test/inputs/color_input_test.rb +0 -10
- data/test/inputs/country_input_test.rb +0 -36
- data/test/inputs/datetime_input_test.rb +0 -176
- data/test/inputs/disabled_test.rb +0 -92
- data/test/inputs/discovery_test.rb +0 -142
- data/test/inputs/file_input_test.rb +0 -17
- data/test/inputs/general_test.rb +0 -133
- data/test/inputs/grouped_collection_select_input_test.rb +0 -196
- data/test/inputs/hidden_input_test.rb +0 -32
- data/test/inputs/numeric_input_test.rb +0 -177
- data/test/inputs/readonly_test.rb +0 -102
- data/test/inputs/required_test.rb +0 -158
- data/test/inputs/rich_text_area_input_test.rb +0 -15
- data/test/inputs/string_input_test.rb +0 -158
- data/test/inputs/text_input_test.rb +0 -37
- data/test/inputs/time_zone_input_test.rb +0 -36
- data/test/simple_form_test.rb +0 -18
- data/test/support/discovery_inputs.rb +0 -65
- data/test/support/misc_helpers.rb +0 -274
- data/test/support/mock_controller.rb +0 -30
- data/test/support/models.rb +0 -357
- data/test/test_helper.rb +0 -95
@@ -1,177 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
# encoding: UTF-8
|
3
|
-
require 'test_helper'
|
4
|
-
|
5
|
-
class NumericInputTest < ActionView::TestCase
|
6
|
-
test 'input generates an integer text field for integer attributes ' do
|
7
|
-
with_input_for @user, :age, :integer
|
8
|
-
assert_select 'input[type=number].integer#user_age'
|
9
|
-
end
|
10
|
-
|
11
|
-
test 'input generates a float text field for float attributes ' do
|
12
|
-
with_input_for @user, :age, :float
|
13
|
-
assert_select 'input[type=number].float#user_age'
|
14
|
-
end
|
15
|
-
|
16
|
-
test 'input generates a decimal text field for decimal attributes ' do
|
17
|
-
with_input_for @user, :age, :decimal
|
18
|
-
assert_select 'input[type=number].decimal#user_age'
|
19
|
-
end
|
20
|
-
|
21
|
-
test 'input does not generate min attribute by default' do
|
22
|
-
with_input_for @user, :age, :integer
|
23
|
-
assert_no_select 'input[min]'
|
24
|
-
end
|
25
|
-
|
26
|
-
test 'input does not generate max attribute by default' do
|
27
|
-
with_input_for @user, :age, :integer
|
28
|
-
assert_no_select 'input[max]'
|
29
|
-
end
|
30
|
-
|
31
|
-
test 'input infers min value from integer attributes with greater than validation' do
|
32
|
-
with_input_for @other_validating_user, :age, :float
|
33
|
-
assert_no_select 'input[min]'
|
34
|
-
|
35
|
-
with_input_for @other_validating_user, :age, :integer
|
36
|
-
assert_select 'input[min="18"]'
|
37
|
-
end
|
38
|
-
|
39
|
-
test 'input infers min value from integer attributes with greater than validation using symbol' do
|
40
|
-
with_input_for @validating_user, :amount, :float
|
41
|
-
assert_no_select 'input[min]'
|
42
|
-
|
43
|
-
with_input_for @validating_user, :amount, :integer
|
44
|
-
assert_select 'input[min="11"]'
|
45
|
-
end
|
46
|
-
|
47
|
-
test 'input infers min value from integer attributes with greater than or equal to validation using symbol' do
|
48
|
-
with_input_for @validating_user, :attempts, :float
|
49
|
-
assert_select 'input[min="1"]'
|
50
|
-
|
51
|
-
with_input_for @validating_user, :attempts, :integer
|
52
|
-
assert_select 'input[min="1"]'
|
53
|
-
end
|
54
|
-
|
55
|
-
test 'input infers min value from integer attributes with greater than validation using proc' do
|
56
|
-
with_input_for @other_validating_user, :amount, :float
|
57
|
-
assert_no_select 'input[min]'
|
58
|
-
|
59
|
-
with_input_for @other_validating_user, :amount, :integer
|
60
|
-
assert_select 'input[min="20"]'
|
61
|
-
end
|
62
|
-
|
63
|
-
test 'input infers min value from integer attributes with greater than or equal to validation using proc' do
|
64
|
-
with_input_for @other_validating_user, :attempts, :float
|
65
|
-
assert_select 'input[min="19"]'
|
66
|
-
|
67
|
-
with_input_for @other_validating_user, :attempts, :integer
|
68
|
-
assert_select 'input[min="19"]'
|
69
|
-
end
|
70
|
-
|
71
|
-
test 'input infers max value from attributes with less than validation' do
|
72
|
-
with_input_for @other_validating_user, :age, :float
|
73
|
-
assert_no_select 'input[max]'
|
74
|
-
|
75
|
-
with_input_for @other_validating_user, :age, :integer
|
76
|
-
assert_select 'input[max="99"]'
|
77
|
-
end
|
78
|
-
|
79
|
-
test 'input infers max value from attributes with less than validation using symbol' do
|
80
|
-
with_input_for @validating_user, :amount, :float
|
81
|
-
assert_no_select 'input[max]'
|
82
|
-
|
83
|
-
with_input_for @validating_user, :amount, :integer
|
84
|
-
assert_select 'input[max="99"]'
|
85
|
-
end
|
86
|
-
|
87
|
-
test 'input infers max value from attributes with less than or equal to validation using symbol' do
|
88
|
-
with_input_for @validating_user, :attempts, :float
|
89
|
-
assert_select 'input[max="100"]'
|
90
|
-
|
91
|
-
with_input_for @validating_user, :attempts, :integer
|
92
|
-
assert_select 'input[max="100"]'
|
93
|
-
end
|
94
|
-
|
95
|
-
test 'input infers max value from attributes with less than validation using proc' do
|
96
|
-
with_input_for @other_validating_user, :amount, :float
|
97
|
-
assert_no_select 'input[max]'
|
98
|
-
|
99
|
-
with_input_for @other_validating_user, :amount, :integer
|
100
|
-
assert_select 'input[max="118"]'
|
101
|
-
end
|
102
|
-
|
103
|
-
test 'input infers max value from attributes with less than or equal to validation using proc' do
|
104
|
-
with_input_for @other_validating_user, :attempts, :float
|
105
|
-
assert_select 'input[max="119"]'
|
106
|
-
|
107
|
-
with_input_for @other_validating_user, :attempts, :integer
|
108
|
-
assert_select 'input[max="119"]'
|
109
|
-
end
|
110
|
-
|
111
|
-
test 'input has step value of any except for integer attribute' do
|
112
|
-
with_input_for @validating_user, :age, :float
|
113
|
-
assert_select 'input[step="any"]'
|
114
|
-
|
115
|
-
with_input_for @validating_user, :age, :integer
|
116
|
-
assert_select 'input[step="1"]'
|
117
|
-
|
118
|
-
with_input_for @validating_user, :age, :integer, as: :decimal, input_html: { step: 0.5 }
|
119
|
-
assert_select 'input[step="0.5"]'
|
120
|
-
end
|
121
|
-
|
122
|
-
test 'numeric input does not generate placeholder by default' do
|
123
|
-
with_input_for @user, :age, :integer
|
124
|
-
assert_no_select 'input[placeholder]'
|
125
|
-
end
|
126
|
-
|
127
|
-
test 'numeric input accepts the placeholder option' do
|
128
|
-
with_input_for @user, :age, :integer, placeholder: 'Put in your age'
|
129
|
-
assert_select 'input.integer[placeholder="Put in your age"]'
|
130
|
-
end
|
131
|
-
|
132
|
-
test 'numeric input uses i18n to translate placeholder text' do
|
133
|
-
store_translations(:en, simple_form: { placeholders: { user: {
|
134
|
-
age: 'Age goes here'
|
135
|
-
} } }) do
|
136
|
-
with_input_for @user, :age, :integer
|
137
|
-
assert_select 'input.integer[placeholder="Age goes here"]'
|
138
|
-
end
|
139
|
-
end
|
140
|
-
|
141
|
-
# Numeric input but HTML5 disabled
|
142
|
-
test 'when not using HTML5 input does not generate field with type number and use text instead' do
|
143
|
-
swap_wrapper do
|
144
|
-
with_input_for @user, :age, :integer
|
145
|
-
assert_no_select "input[type=number]"
|
146
|
-
assert_no_select "input#user_age[text]"
|
147
|
-
end
|
148
|
-
end
|
149
|
-
|
150
|
-
test 'when not using HTML5 input does not use min or max or step attributes' do
|
151
|
-
swap_wrapper do
|
152
|
-
with_input_for @validating_user, :age, :integer
|
153
|
-
assert_no_select "input[type=number]"
|
154
|
-
assert_no_select "input[min]"
|
155
|
-
assert_no_select "input[max]"
|
156
|
-
assert_no_select "input[step]"
|
157
|
-
end
|
158
|
-
end
|
159
|
-
|
160
|
-
%i[integer float decimal].each do |type|
|
161
|
-
test "#{type} input infers min value from attributes with greater than or equal validation" do
|
162
|
-
with_input_for @validating_user, :age, type
|
163
|
-
assert_select 'input[min="18"]'
|
164
|
-
end
|
165
|
-
|
166
|
-
test "#{type} input infers the max value from attributes with less than or equal to validation" do
|
167
|
-
with_input_for @validating_user, :age, type
|
168
|
-
assert_select 'input[max="99"]'
|
169
|
-
end
|
170
|
-
end
|
171
|
-
|
172
|
-
test 'min_max does not emit max value as bare string' do
|
173
|
-
with_input_for @other_validating_user, :age, :integer
|
174
|
-
assert_select 'input[max]'
|
175
|
-
assert_no_select 'div', %r{^99}
|
176
|
-
end
|
177
|
-
end
|
@@ -1,102 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
require 'test_helper'
|
3
|
-
|
4
|
-
class ReadonlyTest < ActionView::TestCase
|
5
|
-
test 'string input generates readonly elements when readonly option is true' do
|
6
|
-
with_input_for @user, :name, :string, readonly: true
|
7
|
-
assert_select 'input.string.readonly[readonly]'
|
8
|
-
end
|
9
|
-
|
10
|
-
test 'text input generates readonly elements when readonly option is true' do
|
11
|
-
with_input_for @user, :description, :text, readonly: true
|
12
|
-
assert_select 'textarea.text.readonly[readonly]'
|
13
|
-
end
|
14
|
-
|
15
|
-
test 'numeric input generates readonly elements when readonly option is true' do
|
16
|
-
with_input_for @user, :age, :integer, readonly: true
|
17
|
-
assert_select 'input.integer.readonly[readonly]'
|
18
|
-
end
|
19
|
-
|
20
|
-
test 'date input generates readonly elements when readonly option is true' do
|
21
|
-
with_input_for @user, :born_at, :date, readonly: true
|
22
|
-
assert_select 'select.date.readonly[readonly]'
|
23
|
-
end
|
24
|
-
|
25
|
-
test 'datetime input generates readonly elements when readonly option is true' do
|
26
|
-
with_input_for @user, :created_at, :datetime, readonly: true
|
27
|
-
assert_select 'select.datetime.readonly[readonly]'
|
28
|
-
end
|
29
|
-
|
30
|
-
test 'string input generates readonly elements when readonly option is false' do
|
31
|
-
with_input_for @user, :name, :string, readonly: false
|
32
|
-
assert_no_select 'input.string.readonly[readonly]'
|
33
|
-
end
|
34
|
-
|
35
|
-
test 'text input generates readonly elements when readonly option is false' do
|
36
|
-
with_input_for @user, :description, :text, readonly: false
|
37
|
-
assert_no_select 'textarea.text.readonly[readonly]'
|
38
|
-
end
|
39
|
-
|
40
|
-
test 'numeric input generates readonly elements when readonly option is false' do
|
41
|
-
with_input_for @user, :age, :integer, readonly: false
|
42
|
-
assert_no_select 'input.integer.readonly[readonly]'
|
43
|
-
end
|
44
|
-
|
45
|
-
test 'date input generates readonly elements when readonly option is false' do
|
46
|
-
with_input_for @user, :born_at, :date, readonly: false
|
47
|
-
assert_no_select 'select.date.readonly[readonly]'
|
48
|
-
end
|
49
|
-
|
50
|
-
test 'datetime input generates readonly elements when readonly option is false' do
|
51
|
-
with_input_for @user, :created_at, :datetime, readonly: false
|
52
|
-
assert_no_select 'select.datetime.readonly[readonly]'
|
53
|
-
end
|
54
|
-
|
55
|
-
test 'string input generates readonly elements when readonly option is not present' do
|
56
|
-
with_input_for @user, :name, :string
|
57
|
-
assert_no_select 'input.string.readonly[readonly]'
|
58
|
-
end
|
59
|
-
|
60
|
-
test 'text input generates readonly elements when readonly option is not present' do
|
61
|
-
with_input_for @user, :description, :text
|
62
|
-
assert_no_select 'textarea.text.readonly[readonly]'
|
63
|
-
end
|
64
|
-
|
65
|
-
test 'numeric input generates readonly elements when readonly option is not present' do
|
66
|
-
with_input_for @user, :age, :integer
|
67
|
-
assert_no_select 'input.integer.readonly[readonly]'
|
68
|
-
end
|
69
|
-
|
70
|
-
test 'date input generates readonly elements when readonly option is not present' do
|
71
|
-
with_input_for @user, :born_at, :date
|
72
|
-
assert_no_select 'select.date.readonly[readonly]'
|
73
|
-
end
|
74
|
-
|
75
|
-
test 'datetime input generates readonly elements when readonly option is not present' do
|
76
|
-
with_input_for @user, :created_at, :datetime
|
77
|
-
assert_no_select 'select.datetime.readonly[readonly]'
|
78
|
-
end
|
79
|
-
|
80
|
-
test 'input generates readonly attribute when the field is readonly and the object is persisted' do
|
81
|
-
with_input_for @user, :credit_card, :string, readonly: :lookup
|
82
|
-
assert_select 'input.string.readonly[readonly]'
|
83
|
-
end
|
84
|
-
|
85
|
-
test 'input does not generate readonly attribute when the field is readonly and the object is not persisted' do
|
86
|
-
@user.new_record!
|
87
|
-
with_input_for @user, :credit_card, :string, readonly: :lookup
|
88
|
-
assert_no_select 'input.string.readonly[readonly]'
|
89
|
-
end
|
90
|
-
|
91
|
-
test 'input does not generate readonly attribute when the field is not readonly and the object is persisted' do
|
92
|
-
with_input_for @user, :name, :string
|
93
|
-
assert_no_select 'input.string.readonly[readonly]'
|
94
|
-
end
|
95
|
-
|
96
|
-
test 'input does not generate readonly attribute when the component is not used' do
|
97
|
-
swap_wrapper do
|
98
|
-
with_input_for @user, :credit_card, :string
|
99
|
-
assert_no_select 'input.string.readonly[readonly]'
|
100
|
-
end
|
101
|
-
end
|
102
|
-
end
|
@@ -1,158 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
require 'test_helper'
|
3
|
-
|
4
|
-
class RequiredTest < ActionView::TestCase
|
5
|
-
# REQUIRED AND PRESENCE VALIDATION
|
6
|
-
test 'builder input obtains required from ActiveModel::Validations when it is included' do
|
7
|
-
with_form_for @validating_user, :name
|
8
|
-
assert_select 'input.required[required]#validating_user_name'
|
9
|
-
with_form_for @validating_user, :status
|
10
|
-
assert_select 'input.optional#validating_user_status'
|
11
|
-
end
|
12
|
-
|
13
|
-
test 'builder input allows overriding required when ActiveModel::Validations is included' do
|
14
|
-
with_form_for @validating_user, :name, required: false
|
15
|
-
assert_select 'input.optional#validating_user_name'
|
16
|
-
with_form_for @validating_user, :status, required: true
|
17
|
-
assert_select 'input.required[required]#validating_user_status'
|
18
|
-
end
|
19
|
-
|
20
|
-
test 'builder input is required by default when ActiveModel::Validations is not included' do
|
21
|
-
with_form_for @user, :name
|
22
|
-
assert_select 'input.required[required]#user_name'
|
23
|
-
end
|
24
|
-
|
25
|
-
test 'builder input does not be required by default when ActiveModel::Validations is not included if option is set to false' do
|
26
|
-
swap SimpleForm, required_by_default: false do
|
27
|
-
with_form_for @user, :name
|
28
|
-
assert_select 'input.optional#user_name'
|
29
|
-
assert_no_select 'input[required]'
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
test 'when not using browser validations, input does not generate required html attribute' do
|
34
|
-
swap SimpleForm, browser_validations: false do
|
35
|
-
with_input_for @user, :name, :string
|
36
|
-
assert_select 'input[type=text].required'
|
37
|
-
assert_no_select 'input[type=text][required]'
|
38
|
-
assert_no_select 'input[type=text][aria-required]'
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
test 'when not using browser validations, when required option is set to false, input does not generate required html attribute' do
|
43
|
-
swap SimpleForm, browser_validations: false do
|
44
|
-
with_input_for @user, :name, :string, required: false
|
45
|
-
assert_no_select 'input[type=text].required'
|
46
|
-
assert_no_select 'input[type=text][required]'
|
47
|
-
assert_no_select 'input[type=text][aria-required]'
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
test 'when not using browser validations, when required option is set to true, input generates required html attribute' do
|
52
|
-
swap SimpleForm, browser_validations: false do
|
53
|
-
with_input_for @user, :name, :string, required: true
|
54
|
-
assert_select 'input[type=text].required'
|
55
|
-
assert_select 'input[type=text][required]'
|
56
|
-
assert_select 'input[type=text][aria-required]'
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
test 'when not using browser validations, when required option is true in the wrapper, input does not generate required html attribute' do
|
61
|
-
swap SimpleForm, browser_validations: false do
|
62
|
-
swap_wrapper :default, self.custom_wrapper_with_required_input do
|
63
|
-
with_concat_form_for(@user) do |f|
|
64
|
-
concat f.input :name
|
65
|
-
end
|
66
|
-
assert_select 'input[type=text].required'
|
67
|
-
assert_no_select 'input[type=text][required]'
|
68
|
-
assert_no_select 'input[type=text][aria-required]'
|
69
|
-
end
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
test 'builder input allows disabling required when ActiveModel::Validations is not included' do
|
74
|
-
with_form_for @user, :name, required: false
|
75
|
-
assert_no_select 'input.required'
|
76
|
-
assert_no_select 'input[required]'
|
77
|
-
assert_select 'input.optional#user_name'
|
78
|
-
end
|
79
|
-
|
80
|
-
test 'when not the required component the input does not have the required attribute but has the required class' do
|
81
|
-
swap_wrapper do
|
82
|
-
with_input_for @user, :name, :string
|
83
|
-
assert_select 'input[type=text].required'
|
84
|
-
assert_no_select 'input[type=text][required]'
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
|
-
# VALIDATORS :if :unless
|
89
|
-
test 'builder input does not be required when ActiveModel::Validations is included and if option is present' do
|
90
|
-
with_form_for @validating_user, :age
|
91
|
-
assert_no_select 'input.required'
|
92
|
-
assert_no_select 'input[required]'
|
93
|
-
assert_select 'input.optional#validating_user_age'
|
94
|
-
end
|
95
|
-
|
96
|
-
test 'builder input does not be required when ActiveModel::Validations is included and unless option is present' do
|
97
|
-
with_form_for @validating_user, :amount
|
98
|
-
assert_no_select 'input.required'
|
99
|
-
assert_no_select 'input[required]'
|
100
|
-
assert_select 'input.optional#validating_user_amount'
|
101
|
-
end
|
102
|
-
|
103
|
-
# VALIDATORS :on
|
104
|
-
test 'builder input is required when validation is on create and is not persisted' do
|
105
|
-
@validating_user.new_record!
|
106
|
-
with_form_for @validating_user, :action
|
107
|
-
assert_select 'input.required'
|
108
|
-
assert_select 'input[required]'
|
109
|
-
assert_select 'input.required[required]#validating_user_action'
|
110
|
-
end
|
111
|
-
|
112
|
-
test 'builder input does not be required when validation is on create and is persisted' do
|
113
|
-
with_form_for @validating_user, :action
|
114
|
-
assert_no_select 'input.required'
|
115
|
-
assert_no_select 'input[required]'
|
116
|
-
assert_select 'input.optional#validating_user_action'
|
117
|
-
end
|
118
|
-
|
119
|
-
test 'builder input is required when validation is on save' do
|
120
|
-
with_form_for @validating_user, :credit_limit
|
121
|
-
assert_select 'input.required'
|
122
|
-
assert_select 'input[required]'
|
123
|
-
assert_select 'input.required[required]#validating_user_credit_limit'
|
124
|
-
|
125
|
-
@validating_user.new_record!
|
126
|
-
with_form_for @validating_user, :credit_limit
|
127
|
-
assert_select 'input.required'
|
128
|
-
assert_select 'input[required]'
|
129
|
-
assert_select 'input.required[required]#validating_user_credit_limit'
|
130
|
-
end
|
131
|
-
|
132
|
-
test 'builder input is required when validation is on update and is persisted' do
|
133
|
-
with_form_for @validating_user, :phone_number
|
134
|
-
assert_select 'input.required'
|
135
|
-
assert_select 'input[required]'
|
136
|
-
assert_select 'input.required[required]#validating_user_phone_number'
|
137
|
-
end
|
138
|
-
|
139
|
-
test 'builder input does not be required when validation is on update and is not persisted' do
|
140
|
-
@validating_user.new_record!
|
141
|
-
with_form_for @validating_user, :phone_number
|
142
|
-
assert_no_select 'input.required'
|
143
|
-
assert_no_select 'input[required]'
|
144
|
-
assert_select 'input.optional#validating_user_phone_number'
|
145
|
-
end
|
146
|
-
|
147
|
-
test 'builder input does not generate required html attribute when option is set to false when it is set to true in wrapper' do
|
148
|
-
swap SimpleForm, browser_validations: true do
|
149
|
-
swap_wrapper :default, self.custom_wrapper_with_required_input do
|
150
|
-
with_concat_form_for(@user) do |f|
|
151
|
-
concat f.input :name, required: false
|
152
|
-
end
|
153
|
-
assert_no_select 'input[type=text][required]'
|
154
|
-
assert_no_select 'input[type=text][aria-required]'
|
155
|
-
end
|
156
|
-
end
|
157
|
-
end
|
158
|
-
end
|
@@ -1,15 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
# encoding: UTF-8
|
3
|
-
require 'test_helper'
|
4
|
-
|
5
|
-
class RichTextAreaInputTest < ActionView::TestCase
|
6
|
-
test 'input generates a text area for text attributes' do
|
7
|
-
with_input_for @user, :description, :text
|
8
|
-
assert_select 'textarea.text#user_description'
|
9
|
-
end
|
10
|
-
|
11
|
-
test 'input generates a text area for text attributes that accept placeholder' do
|
12
|
-
with_input_for @user, :description, :text, placeholder: 'Put in some text'
|
13
|
-
assert_select 'textarea.text[placeholder="Put in some text"]'
|
14
|
-
end
|
15
|
-
end
|
@@ -1,158 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
# encoding: UTF-8
|
3
|
-
require 'test_helper'
|
4
|
-
|
5
|
-
class StringInputTest < ActionView::TestCase
|
6
|
-
test 'input maps text field to string attribute' do
|
7
|
-
with_input_for @user, :name, :string
|
8
|
-
assert_select "input#user_name[type=text][name='user[name]'][value='New in SimpleForm!']"
|
9
|
-
end
|
10
|
-
|
11
|
-
test 'input maps text field to citext attribute' do
|
12
|
-
with_input_for @user, :name, :citext
|
13
|
-
assert_select "input#user_name[type=text][name='user[name]'][value='New in SimpleForm!']"
|
14
|
-
end
|
15
|
-
|
16
|
-
test 'input generates a password field for password attributes' do
|
17
|
-
with_input_for @user, :password, :password
|
18
|
-
assert_select "input#user_password.password[type=password][name='user[password]']"
|
19
|
-
end
|
20
|
-
|
21
|
-
test 'input gets maxlength from column definition for string attributes' do
|
22
|
-
with_input_for @user, :name, :string
|
23
|
-
assert_select 'input.string[maxlength="100"]'
|
24
|
-
end
|
25
|
-
|
26
|
-
test 'input does not get maxlength from column without size definition for string attributes' do
|
27
|
-
with_input_for @user, :action, :string
|
28
|
-
assert_no_select 'input.string[maxlength]'
|
29
|
-
end
|
30
|
-
|
31
|
-
test 'input gets maxlength from column definition for password attributes' do
|
32
|
-
with_input_for @user, :password, :password
|
33
|
-
assert_select 'input.password[type=password][maxlength="100"]'
|
34
|
-
end
|
35
|
-
|
36
|
-
test 'input infers maxlength column definition from validation when present' do
|
37
|
-
with_input_for @validating_user, :name, :string
|
38
|
-
assert_select 'input.string[maxlength="25"]'
|
39
|
-
end
|
40
|
-
|
41
|
-
test 'input infers minlength column definition from validation when present' do
|
42
|
-
with_input_for @validating_user, :name, :string
|
43
|
-
assert_select 'input.string[minlength="5"]'
|
44
|
-
end
|
45
|
-
|
46
|
-
test 'input gets maxlength from validation when :is option present' do
|
47
|
-
with_input_for @validating_user, :home_picture, :string
|
48
|
-
assert_select 'input.string[maxlength="12"]'
|
49
|
-
end
|
50
|
-
|
51
|
-
test 'input gets minlength from validation when :is option present' do
|
52
|
-
with_input_for @validating_user, :home_picture, :string
|
53
|
-
assert_select 'input.string[minlength="12"]'
|
54
|
-
end
|
55
|
-
|
56
|
-
test 'input maxlength is the column limit plus one to make room for decimal point' do
|
57
|
-
with_input_for @user, :credit_limit, :string
|
58
|
-
|
59
|
-
assert_select 'input.string[maxlength="16"]'
|
60
|
-
end
|
61
|
-
|
62
|
-
test 'input does not generate placeholder by default' do
|
63
|
-
with_input_for @user, :name, :string
|
64
|
-
assert_no_select 'input[placeholder]'
|
65
|
-
end
|
66
|
-
|
67
|
-
test 'input accepts the placeholder option' do
|
68
|
-
with_input_for @user, :name, :string, placeholder: 'Put in some text'
|
69
|
-
assert_select 'input.string[placeholder="Put in some text"]'
|
70
|
-
end
|
71
|
-
|
72
|
-
test 'input generates a password field for password attributes that accept placeholder' do
|
73
|
-
with_input_for @user, :password, :password, placeholder: 'Password Confirmation'
|
74
|
-
assert_select 'input[type=password].password[placeholder="Password Confirmation"]#user_password'
|
75
|
-
end
|
76
|
-
|
77
|
-
test 'input does not infer pattern from attributes by default' do
|
78
|
-
with_input_for @other_validating_user, :country, :string
|
79
|
-
assert_no_select 'input[pattern="\w+"]'
|
80
|
-
end
|
81
|
-
|
82
|
-
test 'input infers pattern from attributes' do
|
83
|
-
with_input_for @other_validating_user, :country, :string, pattern: true
|
84
|
-
assert_select "input:match('pattern', ?)", /\w+/
|
85
|
-
end
|
86
|
-
|
87
|
-
test 'input infers pattern from attributes using proc' do
|
88
|
-
with_input_for @other_validating_user, :name, :string, pattern: true
|
89
|
-
assert_select "input:match('pattern', ?)", /\w+/
|
90
|
-
end
|
91
|
-
|
92
|
-
test 'input does not infer pattern from attributes if root default is false' do
|
93
|
-
swap_wrapper do
|
94
|
-
with_input_for @other_validating_user, :country, :string
|
95
|
-
assert_no_select 'input[pattern="\w+"]'
|
96
|
-
end
|
97
|
-
end
|
98
|
-
|
99
|
-
test 'input uses given pattern from attributes' do
|
100
|
-
with_input_for @other_validating_user, :country, :string, input_html: { pattern: "\\d+" }
|
101
|
-
assert_select "input:match('pattern', ?)", /\\d+/
|
102
|
-
end
|
103
|
-
|
104
|
-
test 'input does not use pattern if model has :without validation option' do
|
105
|
-
with_input_for @other_validating_user, :description, :string, pattern: true
|
106
|
-
assert_no_select 'input[pattern="\d+"]'
|
107
|
-
end
|
108
|
-
|
109
|
-
test 'input uses i18n to translate placeholder text' do
|
110
|
-
store_translations(:en, simple_form: { placeholders: { user: {
|
111
|
-
name: 'Name goes here'
|
112
|
-
} } }) do
|
113
|
-
with_input_for @user, :name, :string
|
114
|
-
assert_select 'input.string[placeholder="Name goes here"]'
|
115
|
-
end
|
116
|
-
end
|
117
|
-
|
118
|
-
test 'input uses custom i18n scope to translate placeholder text' do
|
119
|
-
store_translations(:en, my_scope: { placeholders: { user: {
|
120
|
-
name: 'Name goes here'
|
121
|
-
} } }) do
|
122
|
-
swap SimpleForm, i18n_scope: :my_scope do
|
123
|
-
with_input_for @user, :name, :string
|
124
|
-
assert_select 'input.string[placeholder="Name goes here"]'
|
125
|
-
end
|
126
|
-
end
|
127
|
-
end
|
128
|
-
|
129
|
-
%i[email url search tel].each do |type|
|
130
|
-
test "input allows type #{type}" do
|
131
|
-
with_input_for @user, :name, type
|
132
|
-
assert_select "input.string.#{type}"
|
133
|
-
assert_select "input[type=#{type}]"
|
134
|
-
end
|
135
|
-
|
136
|
-
test "input does not allow type #{type} if HTML5 compatibility is disabled" do
|
137
|
-
swap_wrapper do
|
138
|
-
with_input_for @user, :name, type
|
139
|
-
assert_select "input[type=text]"
|
140
|
-
assert_no_select "input[type=#{type}]"
|
141
|
-
end
|
142
|
-
end
|
143
|
-
end
|
144
|
-
|
145
|
-
test 'input strips extra spaces from class html attribute with default classes' do
|
146
|
-
with_input_for @user, :name, :string
|
147
|
-
assert_select "input[class='string required']"
|
148
|
-
assert_no_select "input[class='string required ']"
|
149
|
-
assert_no_select "input[class=' string required']"
|
150
|
-
end
|
151
|
-
|
152
|
-
test 'input strips extra spaces from class html attribute when giving a custom class' do
|
153
|
-
with_input_for @user, :name, :string, input_html: { class: "my_input" }
|
154
|
-
assert_select "input[class='string required my_input']"
|
155
|
-
assert_no_select "input[class='string required my_input ']"
|
156
|
-
assert_no_select "input[class=' string required my_input']"
|
157
|
-
end
|
158
|
-
end
|
@@ -1,37 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
# encoding: UTF-8
|
3
|
-
require 'test_helper'
|
4
|
-
|
5
|
-
class TextInputTest < ActionView::TestCase
|
6
|
-
test 'input generates a text area for text attributes' do
|
7
|
-
with_input_for @user, :description, :text
|
8
|
-
assert_select 'textarea.text#user_description'
|
9
|
-
end
|
10
|
-
|
11
|
-
test 'input generates a text area for text attributes that accept placeholder' do
|
12
|
-
with_input_for @user, :description, :text, placeholder: 'Put in some text'
|
13
|
-
assert_select 'textarea.text[placeholder="Put in some text"]'
|
14
|
-
end
|
15
|
-
|
16
|
-
test 'input generates a placeholder from the translations' do
|
17
|
-
store_translations(:en, simple_form: { placeholders: { user: { name: "placeholder from i18n en.simple_form.placeholders.user.name" } } }) do
|
18
|
-
with_input_for @user, :name, :text
|
19
|
-
assert_select 'textarea.text[placeholder="placeholder from i18n en.simple_form.placeholders.user.name"]'
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
test 'input gets maxlength from column definition for text attributes' do
|
24
|
-
with_input_for @user, :description, :text
|
25
|
-
assert_select 'textarea.text[maxlength="200"]'
|
26
|
-
end
|
27
|
-
|
28
|
-
test 'input infers maxlength column definition from validation when present for text attributes' do
|
29
|
-
with_input_for @validating_user, :description, :text
|
30
|
-
assert_select 'textarea.text[maxlength="50"]'
|
31
|
-
end
|
32
|
-
|
33
|
-
test 'input infers minlength column definition from validation when present for text attributes' do
|
34
|
-
with_input_for @validating_user, :description, :text
|
35
|
-
assert_select 'textarea.text[minlength="15"]'
|
36
|
-
end
|
37
|
-
end
|
@@ -1,36 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
# encoding: UTF-8
|
3
|
-
require 'test_helper'
|
4
|
-
|
5
|
-
class TimeZoneInputTest < ActionView::TestCase
|
6
|
-
test 'input generates a time zone select field' do
|
7
|
-
with_input_for @user, :time_zone, :time_zone
|
8
|
-
assert_select 'select#user_time_zone'
|
9
|
-
assert_select 'select option[value=Brasilia]', '(GMT-03:00) Brasilia'
|
10
|
-
assert_no_select 'select option[value=""][disabled=disabled]'
|
11
|
-
end
|
12
|
-
|
13
|
-
test 'input generates a time zone select field with default' do
|
14
|
-
with_input_for @user, :time_zone, :time_zone, default: 'Brasilia'
|
15
|
-
assert_select 'select option[value=Brasilia][selected=selected]'
|
16
|
-
assert_no_select 'select option[value=""]'
|
17
|
-
end
|
18
|
-
|
19
|
-
test 'input generates a time zone select using options priority' do
|
20
|
-
with_input_for @user, :time_zone, :time_zone, priority: /Brasilia/
|
21
|
-
assert_select 'select option[value=""][disabled=disabled]'
|
22
|
-
assert_no_select 'select option[value=""]', /^$/
|
23
|
-
end
|
24
|
-
|
25
|
-
test 'input does generate select element with required html attribute' do
|
26
|
-
with_input_for @user, :time_zone, :time_zone
|
27
|
-
assert_select 'select.required'
|
28
|
-
assert_select 'select[required]'
|
29
|
-
end
|
30
|
-
|
31
|
-
test 'input does generate select element with aria-required html attribute' do
|
32
|
-
with_input_for @user, :time_zone, :time_zone
|
33
|
-
assert_select 'select.required'
|
34
|
-
assert_select 'select[aria-required]'
|
35
|
-
end
|
36
|
-
end
|