af-client_side_validations 3.1.4.af1
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.
- data/client_side_validations.gemspec +34 -0
- data/lib/client_side_validations/action_view/form_builder.rb +160 -0
- data/lib/client_side_validations/action_view/form_helper.rb +92 -0
- data/lib/client_side_validations/action_view/form_tag_helper.rb +12 -0
- data/lib/client_side_validations/action_view.rb +14 -0
- data/lib/client_side_validations/active_model/acceptance.rb +10 -0
- data/lib/client_side_validations/active_model/exclusion.rb +15 -0
- data/lib/client_side_validations/active_model/format.rb +10 -0
- data/lib/client_side_validations/active_model/inclusion.rb +15 -0
- data/lib/client_side_validations/active_model/length.rb +24 -0
- data/lib/client_side_validations/active_model/numericality.rb +31 -0
- data/lib/client_side_validations/active_model/presence.rb +10 -0
- data/lib/client_side_validations/active_model.rb +60 -0
- data/lib/client_side_validations/active_record/middleware.rb +33 -0
- data/lib/client_side_validations/active_record/uniqueness.rb +28 -0
- data/lib/client_side_validations/active_record.rb +11 -0
- data/lib/client_side_validations/core_ext/range.rb +10 -0
- data/lib/client_side_validations/core_ext/regexp.rb +14 -0
- data/lib/client_side_validations/core_ext.rb +3 -0
- data/lib/client_side_validations/engine.rb +6 -0
- data/lib/client_side_validations/files.rb +8 -0
- data/lib/client_side_validations/formtastic.rb +21 -0
- data/lib/client_side_validations/middleware.rb +81 -0
- data/lib/client_side_validations/mongo_mapper/middleware.rb +20 -0
- data/lib/client_side_validations/mongo_mapper/uniqueness.rb +28 -0
- data/lib/client_side_validations/mongo_mapper.rb +9 -0
- data/lib/client_side_validations/mongoid/middleware.rb +20 -0
- data/lib/client_side_validations/mongoid/uniqueness.rb +28 -0
- data/lib/client_side_validations/mongoid.rb +9 -0
- data/lib/client_side_validations/simple_form.rb +24 -0
- data/lib/client_side_validations/version.rb +3 -0
- data/lib/client_side_validations.rb +13 -0
- data/lib/generators/client_side_validations/copy_asset_generator.rb +36 -0
- data/lib/generators/client_side_validations/install_generator.rb +45 -0
- data/lib/generators/templates/client_side_validations/README.rails.3.0 +6 -0
- data/lib/generators/templates/client_side_validations/README.rails.3.1 +7 -0
- data/lib/generators/templates/client_side_validations/initializer.rb +14 -0
- data/test/action_view/cases/helper.rb +176 -0
- data/test/action_view/cases/test_helpers.rb +666 -0
- data/test/action_view/cases/test_legacy_helpers.rb +217 -0
- data/test/action_view/models/comment.rb +35 -0
- data/test/action_view/models/post.rb +35 -0
- data/test/action_view/models.rb +3 -0
- data/test/active_model/cases/helper.rb +4 -0
- data/test/active_model/cases/test_acceptance_validator.rb +16 -0
- data/test/active_model/cases/test_base.rb +11 -0
- data/test/active_model/cases/test_confirmation_validator.rb +16 -0
- data/test/active_model/cases/test_exclusion_validator.rb +20 -0
- data/test/active_model/cases/test_format_validator.rb +21 -0
- data/test/active_model/cases/test_inclusion_validator.rb +21 -0
- data/test/active_model/cases/test_length_validator.rb +61 -0
- data/test/active_model/cases/test_numericality_validator.rb +46 -0
- data/test/active_model/cases/test_presence_validator.rb +16 -0
- data/test/active_model/cases/test_validations.rb +175 -0
- data/test/active_model/models/person.rb +17 -0
- data/test/active_record/cases/helper.rb +12 -0
- data/test/active_record/cases/test_base.rb +11 -0
- data/test/active_record/cases/test_middleware.rb +175 -0
- data/test/active_record/cases/test_uniqueness_validator.rb +50 -0
- data/test/active_record/models/guid.rb +7 -0
- data/test/active_record/models/user.rb +14 -0
- data/test/base_helper.rb +7 -0
- data/test/core_ext/cases/test_core_ext.rb +46 -0
- data/test/formtastic/cases/helper.rb +7 -0
- data/test/formtastic/cases/test_form_builder.rb +11 -0
- data/test/formtastic/cases/test_form_helper.rb +21 -0
- data/test/generators/cases/test_generators.rb +70 -0
- data/test/javascript/config.ru +3 -0
- data/test/javascript/public/test/callbacks/elementAfter.js +54 -0
- data/test/javascript/public/test/callbacks/elementBefore.js +54 -0
- data/test/javascript/public/test/callbacks/elementFail.js +70 -0
- data/test/javascript/public/test/callbacks/elementPass.js +70 -0
- data/test/javascript/public/test/callbacks/formAfter.js +45 -0
- data/test/javascript/public/test/callbacks/formBefore.js +45 -0
- data/test/javascript/public/test/callbacks/formFail.js +51 -0
- data/test/javascript/public/test/callbacks/formPass.js +50 -0
- data/test/javascript/public/test/form_builders/validateForm.js +66 -0
- data/test/javascript/public/test/form_builders/validateFormtastic.js +54 -0
- data/test/javascript/public/test/form_builders/validateNestedForm.js +66 -0
- data/test/javascript/public/test/form_builders/validateSimpleForm.js +57 -0
- data/test/javascript/public/test/settings.js +15 -0
- data/test/javascript/public/test/validateElement.js +209 -0
- data/test/javascript/public/test/validators/acceptance.js +42 -0
- data/test/javascript/public/test/validators/confirmation.js +25 -0
- data/test/javascript/public/test/validators/exclusion.js +41 -0
- data/test/javascript/public/test/validators/format.js +27 -0
- data/test/javascript/public/test/validators/inclusion.js +42 -0
- data/test/javascript/public/test/validators/length.js +76 -0
- data/test/javascript/public/test/validators/numericality.js +158 -0
- data/test/javascript/public/test/validators/presence.js +21 -0
- data/test/javascript/public/test/validators/uniqueness.js +107 -0
- data/test/javascript/public/vendor/jquery.metadata.js +122 -0
- data/test/javascript/public/vendor/qunit.css +196 -0
- data/test/javascript/public/vendor/qunit.js +1374 -0
- data/test/javascript/server.rb +84 -0
- data/test/javascript/views/index.erb +20 -0
- data/test/javascript/views/layout.erb +21 -0
- data/test/middleware/cases/helper.rb +18 -0
- data/test/middleware/cases/test_middleware.rb +8 -0
- data/test/mongo_mapper/cases/helper.rb +9 -0
- data/test/mongo_mapper/cases/test_base.rb +15 -0
- data/test/mongo_mapper/cases/test_middleware.rb +77 -0
- data/test/mongo_mapper/cases/test_uniqueness_validator.rb +50 -0
- data/test/mongo_mapper/models/magazine.rb +11 -0
- data/test/mongoid/cases/helper.rb +16 -0
- data/test/mongoid/cases/test_base.rb +15 -0
- data/test/mongoid/cases/test_middleware.rb +77 -0
- data/test/mongoid/cases/test_uniqueness_validator.rb +49 -0
- data/test/mongoid/models/book.rb +12 -0
- data/test/simple_form/cases/helper.rb +5 -0
- data/test/simple_form/cases/test_form_builder.rb +14 -0
- data/test/simple_form/cases/test_form_helper.rb +24 -0
- data/test/test_loader.rb +6 -0
- data/vendor/assets/javascripts/rails.validations.js +418 -0
- metadata +436 -0
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
require 'action_view/cases/helper'
|
|
2
|
+
|
|
3
|
+
class ClientSideValidations::LegacyActionViewHelpersTest < ActionView::TestCase
|
|
4
|
+
include ActionViewTestSetup
|
|
5
|
+
|
|
6
|
+
def test_text_field
|
|
7
|
+
form_for(@post) do |f|
|
|
8
|
+
concat f.text_field(:cost)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
expected = whole_form("/posts/123", "edit_post_123", "edit_post", "put") do
|
|
12
|
+
%{<input id="post_cost" name="post[cost]" size="30" type="text" />}
|
|
13
|
+
end
|
|
14
|
+
assert_equal expected, output_buffer
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def test_password_field
|
|
18
|
+
form_for(@post) do |f|
|
|
19
|
+
concat f.password_field(:cost)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
expected = whole_form("/posts/123", "edit_post_123", "edit_post", "put") do
|
|
23
|
+
%{<input id="post_cost" name="post[cost]" size="30" type="password" />}
|
|
24
|
+
end
|
|
25
|
+
assert_equal expected, output_buffer
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def test_file_field
|
|
29
|
+
form_for(@post) do |f|
|
|
30
|
+
concat f.file_field(:cost)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
expected = whole_form("/posts/123", "edit_post_123", "edit_post", :method => :put, :file => true) do
|
|
34
|
+
%{<input id="post_cost" name="post[cost]" type="file" />}
|
|
35
|
+
end
|
|
36
|
+
assert_equal expected, output_buffer
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def test_text_area
|
|
40
|
+
form_for(@post) do |f|
|
|
41
|
+
concat f.text_area(:cost)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
expected = whole_form("/posts/123", "edit_post_123", "edit_post", "put") do
|
|
45
|
+
%{<textarea cols="40" id="post_cost" name="post[cost]" rows="20"></textarea>}
|
|
46
|
+
end
|
|
47
|
+
assert_equal expected, output_buffer
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def test_search_field
|
|
51
|
+
form_for(@post) do |f|
|
|
52
|
+
concat f.search_field(:cost)
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
expected = whole_form("/posts/123", "edit_post_123", "edit_post", "put") do
|
|
56
|
+
%{<input id="post_cost" name="post[cost]" size="30" type="search" />}
|
|
57
|
+
end
|
|
58
|
+
assert_equal expected, output_buffer
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def test_telephone_field
|
|
62
|
+
form_for(@post) do |f|
|
|
63
|
+
concat f.telephone_field(:cost)
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
expected = whole_form("/posts/123", "edit_post_123", "edit_post", "put") do
|
|
67
|
+
%{<input id="post_cost" name="post[cost]" size="30" type="tel" />}
|
|
68
|
+
end
|
|
69
|
+
assert_equal expected, output_buffer
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def test_phone_field
|
|
73
|
+
form_for(@post) do |f|
|
|
74
|
+
concat f.phone_field(:cost)
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
expected = whole_form("/posts/123", "edit_post_123", "edit_post", "put") do
|
|
78
|
+
%{<input id="post_cost" name="post[cost]" size="30" type="tel" />}
|
|
79
|
+
end
|
|
80
|
+
assert_equal expected, output_buffer
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def test_url_field
|
|
84
|
+
form_for(@post) do |f|
|
|
85
|
+
concat f.url_field(:cost)
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
expected = whole_form("/posts/123", "edit_post_123", "edit_post", "put") do
|
|
89
|
+
%{<input id="post_cost" name="post[cost]" size="30" type="url" />}
|
|
90
|
+
end
|
|
91
|
+
assert_equal expected, output_buffer
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
def test_email_field
|
|
95
|
+
form_for(@post) do |f|
|
|
96
|
+
concat f.email_field(:cost)
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
expected = whole_form("/posts/123", "edit_post_123", "edit_post", "put") do
|
|
100
|
+
%{<input id="post_cost" name="post[cost]" size="30" type="email" />}
|
|
101
|
+
end
|
|
102
|
+
assert_equal expected, output_buffer
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
def test_number_field
|
|
106
|
+
form_for(@post) do |f|
|
|
107
|
+
concat f.number_field(:cost)
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
expected = whole_form("/posts/123", "edit_post_123", "edit_post", "put") do
|
|
111
|
+
%{<input id="post_cost" name="post[cost]" size="30" type="number" />}
|
|
112
|
+
end
|
|
113
|
+
assert_equal expected, output_buffer
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
def test_range_field
|
|
117
|
+
form_for(@post) do |f|
|
|
118
|
+
concat f.range_field(:cost)
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
expected = whole_form("/posts/123", "edit_post_123", "edit_post", "put") do
|
|
122
|
+
%{<input id="post_cost" name="post[cost]" size="30" type="range" />}
|
|
123
|
+
end
|
|
124
|
+
assert_equal expected, output_buffer
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
def test_check_box
|
|
128
|
+
form_for(@post) do |f|
|
|
129
|
+
concat f.check_box(:cost)
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
expected = whole_form("/posts/123", "edit_post_123", "edit_post", "put") do
|
|
133
|
+
%{<input name="post[cost]" type="hidden" value="0" />} +
|
|
134
|
+
%{<input id="post_cost" name="post[cost]" type="checkbox" value="1" />}
|
|
135
|
+
end
|
|
136
|
+
assert_equal expected, output_buffer
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
def test_radio_button
|
|
140
|
+
form_for(@post) do |f|
|
|
141
|
+
concat f.radio_button(:cost, "10")
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
expected = whole_form("/posts/123", "edit_post_123", "edit_post", "put") do
|
|
145
|
+
%{<input id="post_cost_10" name="post[cost]" type="radio" value="10" />}
|
|
146
|
+
end
|
|
147
|
+
assert_equal expected, output_buffer
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
def test_fields_for
|
|
151
|
+
result = fields_for(@comment) do |c|
|
|
152
|
+
c.text_field(:title)
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
expected = %{<input id="comment_title" name="comment[title]" size="30" type="text" />}
|
|
156
|
+
|
|
157
|
+
assert_equal expected, result
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
def test_select
|
|
161
|
+
form_for(@post) do |f|
|
|
162
|
+
concat f.select(:cost, [])
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
expected = whole_form("/posts/123", "edit_post_123", "edit_post", "put") do
|
|
166
|
+
%{<select id="post_cost" name="post[cost]"></select>}
|
|
167
|
+
end
|
|
168
|
+
assert_equal expected, output_buffer
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
def test_select_multiple
|
|
172
|
+
form_for(@post) do |f|
|
|
173
|
+
concat f.select(:cost, [], {}, :multiple => true)
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
expected = whole_form("/posts/123", "edit_post_123", "edit_post", "put") do
|
|
177
|
+
%{<select id="post_cost" multiple="multiple" name="post[cost][]"></select>}
|
|
178
|
+
end
|
|
179
|
+
assert_equal expected, output_buffer
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
def test_collection_select
|
|
183
|
+
form_for(@post) do |f|
|
|
184
|
+
concat f.collection_select(:cost, [], :id, :name)
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
expected = whole_form("/posts/123", "edit_post_123", "edit_post", "put") do
|
|
188
|
+
%{<select id="post_cost" name="post[cost]"></select>}
|
|
189
|
+
end
|
|
190
|
+
assert_equal expected, output_buffer
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
def test_grouped_collection_select
|
|
194
|
+
form_for(@post) do |f|
|
|
195
|
+
concat f.grouped_collection_select(:cost, [], :group_method, :group_label_method, :id, :name)
|
|
196
|
+
end
|
|
197
|
+
|
|
198
|
+
expected = whole_form("/posts/123", "edit_post_123", "edit_post", "put") do
|
|
199
|
+
%{<select id="post_cost" name="post[cost]"></select>}
|
|
200
|
+
end
|
|
201
|
+
assert_equal expected, output_buffer
|
|
202
|
+
end
|
|
203
|
+
|
|
204
|
+
def test_time_zone_select
|
|
205
|
+
zones = mock('TimeZones')
|
|
206
|
+
zones.stubs(:all).returns([])
|
|
207
|
+
form_for(@post) do |f|
|
|
208
|
+
concat f.time_zone_select(:cost, nil, :model => zones)
|
|
209
|
+
end
|
|
210
|
+
|
|
211
|
+
expected = whole_form("/posts/123", "edit_post_123", "edit_post", "put") do
|
|
212
|
+
%{<select id="post_cost" name="post[cost]"></select>}
|
|
213
|
+
end
|
|
214
|
+
assert_equal expected, output_buffer
|
|
215
|
+
end
|
|
216
|
+
end
|
|
217
|
+
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
class Comment
|
|
2
|
+
extend ActiveModel::Naming
|
|
3
|
+
include ActiveModel::Conversion
|
|
4
|
+
include ActiveModel::Validations
|
|
5
|
+
|
|
6
|
+
attr_reader :id
|
|
7
|
+
attr_reader :post_id
|
|
8
|
+
attr_reader :title
|
|
9
|
+
|
|
10
|
+
validates_presence_of :title
|
|
11
|
+
|
|
12
|
+
def initialize(id = nil, post_id = nil); @id, @post_id = id, post_id end
|
|
13
|
+
def to_key; id ? [id] : nil end
|
|
14
|
+
def save; @id = 1; @post_id = 1 end
|
|
15
|
+
def persisted?; @id.present? end
|
|
16
|
+
def to_param; @id; end
|
|
17
|
+
def name
|
|
18
|
+
@id.nil? ? "new #{self.class.name.downcase}" : "#{self.class.name.downcase} ##{@id}"
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
attr_accessor :relevances
|
|
22
|
+
def relevances_attributes=(attributes); end
|
|
23
|
+
|
|
24
|
+
def client_side_validation_hash
|
|
25
|
+
{
|
|
26
|
+
:title => {
|
|
27
|
+
:presence => {
|
|
28
|
+
:message => "can't be blank"
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
end
|
|
35
|
+
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
class Post < Struct.new(:title, :author_name, :body, :secret, :written_on, :cost)
|
|
2
|
+
extend ActiveModel::Naming
|
|
3
|
+
include ActiveModel::Conversion
|
|
4
|
+
extend ActiveModel::Translation
|
|
5
|
+
|
|
6
|
+
alias_method :secret?, :secret
|
|
7
|
+
|
|
8
|
+
def persisted=(boolean)
|
|
9
|
+
@persisted = boolean
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def persisted?
|
|
13
|
+
@persisted
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def client_side_validation_hash
|
|
17
|
+
{
|
|
18
|
+
:cost => {
|
|
19
|
+
:presence => {
|
|
20
|
+
:message => "can't be blank"
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
attr_accessor :author
|
|
27
|
+
def author_attributes=(attributes); end
|
|
28
|
+
|
|
29
|
+
attr_accessor :comments, :comment_ids
|
|
30
|
+
def comments_attributes=(attributes); end
|
|
31
|
+
|
|
32
|
+
attr_accessor :tags
|
|
33
|
+
def tags_attributes=(attributes); end
|
|
34
|
+
end
|
|
35
|
+
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
require 'active_model/cases/test_base'
|
|
2
|
+
|
|
3
|
+
class ActiveModel::AcceptanceValidatorTest < ClientSideValidations::ActiveModelTestBase
|
|
4
|
+
|
|
5
|
+
def test_acceptance_client_side_hash
|
|
6
|
+
expected_hash = { :message => "must be accepted", :accept => "1" }
|
|
7
|
+
assert_equal expected_hash, AcceptanceValidator.new(:attributes => [:name]).client_side_hash(@person, :age)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def test_acceptance_client_side_hash_with_custom_message
|
|
11
|
+
expected_hash = { :message => "you must accept", :accept => "1" }
|
|
12
|
+
assert_equal expected_hash, AcceptanceValidator.new(:attributes => [:name], :message => "you must accept").client_side_hash(@person, :age)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
end
|
|
16
|
+
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
require 'active_model/cases/test_base'
|
|
2
|
+
|
|
3
|
+
class ActiveModel::ConfirmationValidatorTest < ClientSideValidations::ActiveModelTestBase
|
|
4
|
+
|
|
5
|
+
def test_confirmation_client_side_hash
|
|
6
|
+
expected_hash = { :message => "doesn't match confirmation" }
|
|
7
|
+
assert_equal expected_hash, ConfirmationValidator.new(:attributes => [:name]).client_side_hash(@person, :age)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def test_confirmation_client_side_hash_with_custom_message
|
|
11
|
+
expected_hash = { :message => "you must confirm" }
|
|
12
|
+
assert_equal expected_hash, ConfirmationValidator.new(:attributes => [:name], :message => "you must confirm").client_side_hash(@person, :age)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
end
|
|
16
|
+
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
require 'active_model/cases/test_base'
|
|
2
|
+
|
|
3
|
+
class ActiveModel::ExclusionValidatorTest < ClientSideValidations::ActiveModelTestBase
|
|
4
|
+
|
|
5
|
+
def test_exclusion_client_side_hash
|
|
6
|
+
expected_hash = { :message => "is reserved", :in => [1, 2] }
|
|
7
|
+
assert_equal expected_hash, ExclusionValidator.new(:attributes => [:name], :in => [1, 2]).client_side_hash(@person, :age)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def test_exclusion_client_side_hash_with_custom_message
|
|
11
|
+
expected_hash = { :message => "is exclusive", :in => [1, 2] }
|
|
12
|
+
assert_equal expected_hash, ExclusionValidator.new(:attributes => [:name], :in => [1, 2], :message => "is exclusive").client_side_hash(@person, :age)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def test_exclusion_client_side_hash_with_ranges
|
|
16
|
+
expected_hash = { :message => "is reserved", :range => 1..2 }
|
|
17
|
+
assert_equal expected_hash, ExclusionValidator.new(:attributes => [:name], :in => 1..2).client_side_hash(@person, :age)
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
require 'active_model/cases/test_base'
|
|
2
|
+
|
|
3
|
+
class ActiveModel::FormatValidatorTest < ClientSideValidations::ActiveModelTestBase
|
|
4
|
+
|
|
5
|
+
def test_format_client_side_hash
|
|
6
|
+
expected_hash = { :message => "is invalid", :with => /.+/ }
|
|
7
|
+
assert_equal expected_hash, FormatValidator.new(:attributes => [:name], :with => /.+/).client_side_hash(@person, :age)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def test_format_client_side_hash_without
|
|
11
|
+
expected_hash = { :message => "is invalid", :without => /.+/ }
|
|
12
|
+
assert_equal expected_hash, FormatValidator.new(:attributes => [:name], :without => /.+/).client_side_hash(@person, :age)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def test_format_client_side_hash_with_custom_message
|
|
16
|
+
expected_hash = { :message => "is wrong format", :with => /.+/ }
|
|
17
|
+
assert_equal expected_hash, FormatValidator.new(:attributes => [:name], :with => /.+/, :message => "is wrong format").client_side_hash(@person, :age)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
end
|
|
21
|
+
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
require 'active_model/cases/test_base'
|
|
2
|
+
|
|
3
|
+
class ActiveModel::InclusionValidatorTest < ClientSideValidations::ActiveModelTestBase
|
|
4
|
+
|
|
5
|
+
def test_inclusion_client_side_hash
|
|
6
|
+
expected_hash = { :message => "is not included in the list", :in => [1, 2] }
|
|
7
|
+
assert_equal expected_hash, InclusionValidator.new(:attributes => [:name], :in => [1, 2]).client_side_hash(@person, :age)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def test_inclusion_client_side_hash_with_custom_message
|
|
11
|
+
expected_hash = { :message => "is not a choice", :in => [1, 2] }
|
|
12
|
+
assert_equal expected_hash, InclusionValidator.new(:attributes => [:name], :in => [1, 2], :message => "is not a choice").client_side_hash(@person, :age)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def test_inclusion_client_side_hash_with_range
|
|
16
|
+
expected_hash = { :message => "is not included in the list", :range => 1..2 }
|
|
17
|
+
assert_equal expected_hash, InclusionValidator.new(:attributes => [:name], :in => 1..2).client_side_hash(@person, :age)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
end
|
|
21
|
+
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
require 'active_model/cases/test_base'
|
|
2
|
+
|
|
3
|
+
class ActiveModel::LengthValidatorTest < ClientSideValidations::ActiveModelTestBase
|
|
4
|
+
|
|
5
|
+
def test_length_client_side_hash
|
|
6
|
+
expected_hash = {
|
|
7
|
+
:messages => {
|
|
8
|
+
:is => "is the wrong length (should be 10 characters)"
|
|
9
|
+
},
|
|
10
|
+
:is => 10
|
|
11
|
+
}
|
|
12
|
+
assert_equal expected_hash, LengthValidator.new(:attributes => [:age], :is => 10).client_side_hash(@person, :first_name)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def test_length_client_side_hash_with_custom_message
|
|
16
|
+
expected_hash = {
|
|
17
|
+
:messages => {
|
|
18
|
+
:is => "is the wrong length (should be 10 words)"
|
|
19
|
+
},
|
|
20
|
+
:is => 10
|
|
21
|
+
}
|
|
22
|
+
assert_equal expected_hash, LengthValidator.new(:attributes => [:age], :is => 10, :wrong_length => "is the wrong length (should be %{count} words)").client_side_hash(@person, :first_name)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def test_length_client_side_hash_with_js_tokenizer
|
|
26
|
+
expected_hash = {
|
|
27
|
+
:messages => {
|
|
28
|
+
:is => "is the wrong length (should be 10 characters)"
|
|
29
|
+
},
|
|
30
|
+
:is => 10,
|
|
31
|
+
:js_tokenizer => %q{match(/\w+/g)}
|
|
32
|
+
}
|
|
33
|
+
assert_equal expected_hash, LengthValidator.new(:attributes => [:age], :is => 10, :tokenizer => proc { |value| value.split(/\w+/) }, :js_tokenizer => %q{match(/\w+/g)}).client_side_hash(@person, :first_name)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def test_length_client_side_hash_with_minimum_and_maximum
|
|
37
|
+
expected_hash = {
|
|
38
|
+
:messages => {
|
|
39
|
+
:minimum => "is too short (minimum is 5 characters)",
|
|
40
|
+
:maximum => "is too long (maximum is 10 characters)"
|
|
41
|
+
},
|
|
42
|
+
:minimum => 5,
|
|
43
|
+
:maximum => 10
|
|
44
|
+
}
|
|
45
|
+
assert_equal expected_hash, LengthValidator.new(:attributes => [:age], :minimum => 5, :maximum => 10).client_side_hash(@person, :first_name)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def test_length_client_side_hash_with_range
|
|
49
|
+
expected_hash = {
|
|
50
|
+
:messages => {
|
|
51
|
+
:minimum => "is too short (minimum is 5 characters)",
|
|
52
|
+
:maximum => "is too long (maximum is 10 characters)"
|
|
53
|
+
},
|
|
54
|
+
:minimum => 5,
|
|
55
|
+
:maximum => 10
|
|
56
|
+
}
|
|
57
|
+
assert_equal expected_hash, LengthValidator.new(:attributes => [:age], :within => 5..10).client_side_hash(@person, :first_name)
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
end
|
|
61
|
+
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
require 'active_model/cases/test_base'
|
|
2
|
+
|
|
3
|
+
class ActiveModel::NumericalityValidatorTest < ClientSideValidations::ActiveModelTestBase
|
|
4
|
+
|
|
5
|
+
def test_numericality_client_side_hash
|
|
6
|
+
expected_hash = { :messages => { :numericality => "is not a number" } }
|
|
7
|
+
assert_equal expected_hash, NumericalityValidator.new(:attributes => [:age]).client_side_hash(@person, :age)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def test_numericality_client_side_hash_with_custom_message
|
|
11
|
+
expected_hash = { :messages => { :numericality => "bad number" } }
|
|
12
|
+
assert_equal expected_hash, NumericalityValidator.new(:attributes => [:age], :message => "bad number").client_side_hash(@person, :age)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def test_numericality_client_side_hash_with_options
|
|
16
|
+
expected_hash = {
|
|
17
|
+
:messages => {
|
|
18
|
+
:numericality => "is not a number",
|
|
19
|
+
:only_integer => "must be an integer",
|
|
20
|
+
:greater_than => "must be greater than 10",
|
|
21
|
+
:greater_than_or_equal_to => "must be greater than or equal to 10",
|
|
22
|
+
:equal_to => "must be equal to 10",
|
|
23
|
+
:less_than => "must be less than 10",
|
|
24
|
+
:less_than_or_equal_to => "must be less than or equal to 10",
|
|
25
|
+
:odd => "must be odd",
|
|
26
|
+
:even => "must be even"
|
|
27
|
+
},
|
|
28
|
+
:only_integer => true,
|
|
29
|
+
:greater_than => 10,
|
|
30
|
+
:greater_than_or_equal_to => 10,
|
|
31
|
+
:equal_to => 10,
|
|
32
|
+
:less_than => 10,
|
|
33
|
+
:less_than_or_equal_to => 10,
|
|
34
|
+
:odd => true,
|
|
35
|
+
:even => true
|
|
36
|
+
}
|
|
37
|
+
test_hash = NumericalityValidator.new(:attributes => [:age],
|
|
38
|
+
:only_integer => true, :greater_than => 10, :greater_than_or_equal_to => 10,
|
|
39
|
+
:equal_to => 10, :less_than => 10, :less_than_or_equal_to => 10,
|
|
40
|
+
:odd => true, :even => true).client_side_hash(@person, :age)
|
|
41
|
+
|
|
42
|
+
assert_equal expected_hash, test_hash
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
end
|
|
46
|
+
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
require 'active_model/cases/test_base'
|
|
2
|
+
|
|
3
|
+
class ActiveModel::PresenceValidatorTest < ClientSideValidations::ActiveModelTestBase
|
|
4
|
+
|
|
5
|
+
def test_presence_client_side_hash
|
|
6
|
+
expected_hash = { :message => "can't be blank" }
|
|
7
|
+
assert_equal expected_hash, PresenceValidator.new(:attributes => [:name]).client_side_hash(@person, :age)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def test_presence_client_side_hash_with_custom_message
|
|
11
|
+
expected_hash = { :message => "is required" }
|
|
12
|
+
assert_equal expected_hash, PresenceValidator.new(:attributes => [:name], :message => "is required").client_side_hash(@person, :age)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
end
|
|
16
|
+
|