judge 0.4.3 → 0.5.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.
- data/Gemfile +4 -4
- data/Gemfile.lock +46 -42
- data/Rakefile +6 -5
- data/VERSION +1 -1
- data/judge.gemspec +17 -16
- data/lib/generators/judge/templates/judge.js +64 -51
- data/lib/judge.rb +0 -4
- data/lib/judge/form.rb +8 -20
- data/lib/judge/utils.rb +72 -8
- data/spec/javascripts/JudgeSpec.js +66 -122
- data/spec/javascripts/fixtures/form.html +537 -58
- data/test/dummy/Gemfile +3 -0
- data/test/dummy/Gemfile.lock +75 -0
- data/test/dummy/app/views/foos/new.html.erb +1 -1
- data/test/dummy/config/locales/en.yml +7 -0
- data/test/judge_test.rb +37 -15
- metadata +71 -112
data/lib/judge.rb
CHANGED
data/lib/judge/form.rb
CHANGED
@@ -7,7 +7,7 @@ module Judge
|
|
7
7
|
%w{text_field text_area password_field}.each do |type|
|
8
8
|
helper = <<-END
|
9
9
|
def validated_#{type}(method, options = {})
|
10
|
-
options = { "data-validate" => Judge::Utils.
|
10
|
+
options = { "data-validate" => Judge::Utils.validators_to_json(self.object, method) }.merge(options)
|
11
11
|
@template.#{type}(self.object_name, method, options)
|
12
12
|
end
|
13
13
|
END
|
@@ -15,34 +15,34 @@ module Judge
|
|
15
15
|
end
|
16
16
|
|
17
17
|
def validated_radio_button(method, tag_value, options = {})
|
18
|
-
options = { "data-validate" => Judge::Utils.
|
18
|
+
options = { "data-validate" => Judge::Utils.validators_to_json(self.object, method) }.merge(options)
|
19
19
|
@template.radio_button(@object_name, method, tag_value, objectify_options(options))
|
20
20
|
end
|
21
21
|
|
22
22
|
def validated_check_box(method, options = {}, checked_value = "1", unchecked_value = "0")
|
23
|
-
options = { "data-validate" => Judge::Utils.
|
23
|
+
options = { "data-validate" => Judge::Utils.validators_to_json(self.object, method) }.merge(options)
|
24
24
|
@template.check_box(self.object_name, method, objectify_options(options), checked_value, unchecked_value)
|
25
25
|
end
|
26
26
|
|
27
27
|
def validated_select(method, choices, options = {}, html_options = {})
|
28
|
-
html_options = { "data-validate" => Judge::Utils.
|
28
|
+
html_options = { "data-validate" => Judge::Utils.validators_to_json(self.object, method) }.merge(html_options)
|
29
29
|
@template.select(self.object_name, method, choices, objectify_options(options), @default_options.merge(html_options))
|
30
30
|
end
|
31
31
|
|
32
32
|
def validated_collection_select(method, collection, value_method, text_method, options = {}, html_options = {})
|
33
|
-
html_options = { "data-validate" => Judge::Utils.
|
33
|
+
html_options = { "data-validate" => Judge::Utils.validators_to_json(self.object, method) }.merge(html_options)
|
34
34
|
@template.collection_select(self.object_name, method, collection, value_method, text_method, objectify_options(options), @default_options.merge(html_options))
|
35
35
|
end
|
36
36
|
|
37
37
|
def validated_grouped_collection_select(method, collection, group_method, group_label_method, option_key_method, option_value_method, options = {}, html_options = {})
|
38
|
-
html_options = { "data-validate" => Judge::Utils.
|
38
|
+
html_options = { "data-validate" => Judge::Utils.validators_to_json(self.object, method) }.merge(html_options)
|
39
39
|
@template.grouped_collection_select(self.object_name, method, collection, group_method, group_label_method, option_key_method, option_value_method, objectify_options(options), @default_options.merge(html_options))
|
40
40
|
end
|
41
41
|
|
42
42
|
%w{date_select datetime_select time_select}.each do |type|
|
43
43
|
helper = <<-END
|
44
44
|
def validated_#{type}(method, options = {}, html_options = {})
|
45
|
-
html_options = { "data-validate" => Judge::Utils.
|
45
|
+
html_options = { "data-validate" => Judge::Utils.validators_to_json(self.object, method) }.merge(html_options)
|
46
46
|
@template.#{type}(self.object_name, method, objectify_options(options), html_options)
|
47
47
|
end
|
48
48
|
END
|
@@ -50,22 +50,10 @@ module Judge
|
|
50
50
|
end
|
51
51
|
|
52
52
|
def validated_time_zone_select(method, priority_zones = nil, options = {}, html_options = {})
|
53
|
-
html_options = { "data-validate" => Judge::Utils.
|
53
|
+
html_options = { "data-validate" => Judge::Utils.validators_to_json(self.object, method) }.merge(html_options)
|
54
54
|
@template.time_zone_select(@object_name, method, priority_zones, objectify_options(options), @default_options.merge(html_options))
|
55
55
|
end
|
56
56
|
|
57
|
-
|
58
|
-
end
|
59
|
-
|
60
|
-
module FormHelper
|
61
|
-
|
62
|
-
def validated_form_for(record_or_name_or_array, *args, &proc)
|
63
|
-
options = args.extract_options!
|
64
|
-
options[:html] ||= {}
|
65
|
-
options[:html]["data-error-messages"] = I18n.t("errors.messages").to_json
|
66
|
-
form_for(record_or_name_or_array, *(args << options), &proc)
|
67
|
-
end
|
68
|
-
|
69
57
|
end
|
70
58
|
|
71
59
|
end
|
data/lib/judge/utils.rb
CHANGED
@@ -1,15 +1,79 @@
|
|
1
1
|
module Judge
|
2
|
+
|
2
3
|
module Utils
|
3
4
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
5
|
+
extend self
|
6
|
+
|
7
|
+
MESSAGE_MAP = {
|
8
|
+
:confirmation => { :base => :confirmation },
|
9
|
+
:acceptance => { :base => :accepted },
|
10
|
+
:presence => { :base => :blank },
|
11
|
+
:length => { :base => nil,
|
12
|
+
:options => {
|
13
|
+
:minimum => :too_short,
|
14
|
+
:maximum => :too_long,
|
15
|
+
:is => :wrong_length
|
16
|
+
}
|
17
|
+
},
|
18
|
+
:format => { :base => :invalid },
|
19
|
+
:inclusion => { :base => :inclusion },
|
20
|
+
:exclusion => { :base => :exclusion },
|
21
|
+
:numericality => { :base => :not_a_number,
|
22
|
+
:options => {
|
23
|
+
:greater_than => :greater_than,
|
24
|
+
:greater_than_or_equal_to => :greater_than_or_equal_to,
|
25
|
+
:equal_to => :equal_to,
|
26
|
+
:less_than => :less_than,
|
27
|
+
:less_than_or_equal_to => :less_than_or_equal_to,
|
28
|
+
:odd => :odd,
|
29
|
+
:even => :even
|
30
|
+
}
|
31
|
+
}
|
32
|
+
}
|
33
|
+
|
34
|
+
ALLOW_BLANK = [:format, :exclusion, :inclusion, :length]
|
35
|
+
|
36
|
+
# Returns all decorated validators for an object's method, as JSON
|
37
|
+
# Judge::Utils.validators_to_json(@user, :name)
|
38
|
+
def validators_to_json(object, method)
|
39
|
+
validators = object.class.validators_on(method).reject { |validator| validator.kind == :uniqueness }
|
40
|
+
validators.collect! do |validator|
|
41
|
+
Judge::Utils.decorate_validator(validator, object, method)
|
42
|
+
end
|
43
|
+
validators.to_json
|
44
|
+
end
|
45
|
+
|
46
|
+
# Convert validator to hash, removing all parts we don't support and adding all possible error messages
|
47
|
+
# Judge::Utils.decorate_validator(validator_instance, @user, :name)
|
48
|
+
def decorate_validator(validator, object, method)
|
49
|
+
kind = validator.kind
|
50
|
+
mm = MESSAGE_MAP
|
51
|
+
|
52
|
+
# remove callbacks and tokenizer, which we don't support
|
53
|
+
validator_options = validator.options.reject { |key| [:if, :on, :unless, :tokenizer].include?(key) }
|
54
|
+
|
55
|
+
messages = {}
|
56
|
+
if mm.has_key?(kind) && mm[kind][:base].present?
|
57
|
+
base_message = mm[kind][:base]
|
58
|
+
messages[base_message] = object.errors.generate_message(method, base_message, validator_options)
|
59
|
+
end
|
60
|
+
if mm.has_key?(kind) && mm[kind][:options].present?
|
61
|
+
opt_messages = mm[kind][:options]
|
62
|
+
opt_messages.each do |opt, opt_message|
|
63
|
+
if validator_options.has_key?(opt)
|
64
|
+
options_for_interpolation = { :count => validator_options[opt] }.merge(validator_options)
|
65
|
+
messages[opt_message] = object.errors.generate_message(method, opt_message, options_for_interpolation)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
if ALLOW_BLANK.include?(kind) && validator_options[:allow_blank].blank? && messages[:blank].blank?
|
70
|
+
messages[:blank] = object.errors.generate_message(method, :blank)
|
11
71
|
end
|
12
|
-
|
72
|
+
if kind == :numericality && validator_options[:only_integer].present?
|
73
|
+
messages[:not_an_integer] = object.errors.generate_message(method, :not_an_integer)
|
74
|
+
end
|
75
|
+
|
76
|
+
{ :kind => kind, :options => validator_options, :messages => messages }
|
13
77
|
end
|
14
78
|
|
15
79
|
end
|
@@ -17,9 +17,9 @@ describe('judge', function() {
|
|
17
17
|
});
|
18
18
|
|
19
19
|
it('validates a collection of elements', function() {
|
20
|
-
var e = document.querySelectorAll('
|
20
|
+
var e = document.querySelectorAll('input[type=radio]'),
|
21
21
|
v = judge.validate(e);
|
22
|
-
expect(v.length).
|
22
|
+
expect(v.length).toEqual(1);
|
23
23
|
});
|
24
24
|
|
25
25
|
});
|
@@ -47,8 +47,9 @@ describe('judge', function() {
|
|
47
47
|
expect(_(j.validators).isEmpty()).toEqual(false);
|
48
48
|
});
|
49
49
|
|
50
|
-
it('holds
|
51
|
-
expect(j.
|
50
|
+
it('holds messages inside validators', function() {
|
51
|
+
expect(_(j.validators).first().hasOwnProperty('messages')).toBe(true);
|
52
|
+
expect(_(j.validators).first().messages).toBeInstanceOf(Object);
|
52
53
|
});
|
53
54
|
|
54
55
|
it('has validation methods in prototype', function() {
|
@@ -67,14 +68,6 @@ describe('judge', function() {
|
|
67
68
|
expect(function() { new judge.Watcher(e); }).toThrow();
|
68
69
|
});
|
69
70
|
|
70
|
-
it('throws error if element.form has no data-error-messages attribute', function() {
|
71
|
-
var e = document.createElement('input'),
|
72
|
-
f = document.createElement('form');
|
73
|
-
e.type = 'text';
|
74
|
-
f.appendChild(e);
|
75
|
-
expect(function() { new judge.Watcher(e); }).toThrow();
|
76
|
-
});
|
77
|
-
|
78
71
|
it('throws error if no element is passed', function() {
|
79
72
|
expect(function() { new judge.Watcher(); }).toThrow();
|
80
73
|
});
|
@@ -118,20 +111,21 @@ describe('judge', function() {
|
|
118
111
|
|
119
112
|
it('returns DOM elements from stored Watchers', function() {
|
120
113
|
judge.store.save('mykey', e);
|
121
|
-
judge.store.save('mykey', document.getElementById('
|
114
|
+
judge.store.save('mykey', document.getElementById('foo_two_foobar'));
|
122
115
|
var d = judge.store.getDOM('mykey');
|
123
116
|
expect(d.length).toEqual(2);
|
124
|
-
|
117
|
+
console.log(d);
|
118
|
+
expect(Object.prototype.toString.call(d[0])).toEqual('[object HTMLSelectElement]');
|
125
119
|
});
|
126
120
|
|
127
121
|
it('returns store object with watchers converted to elements if no key given', function() {
|
128
122
|
judge.store.save('mykey', e);
|
129
|
-
judge.store.save('mykey2', document.getElementById('
|
123
|
+
judge.store.save('mykey2', document.getElementById('foo_two_foobar'));
|
130
124
|
judge.store.save('mykey2', document.getElementById('foo_three'));
|
131
125
|
var d = judge.store.getDOM();
|
132
126
|
expect(d.mykey.length).toEqual(1);
|
133
127
|
expect(d.mykey2.length).toEqual(2);
|
134
|
-
expect(Object.prototype.toString.call(d.mykey[0])).toEqual('[object
|
128
|
+
expect(Object.prototype.toString.call(d.mykey[0])).toEqual('[object HTMLSelectElement]');
|
135
129
|
});
|
136
130
|
|
137
131
|
it('returns null if key not found', function() {
|
@@ -220,17 +214,12 @@ describe('judge', function() {
|
|
220
214
|
expect(j.validate().valid).toEqual(false);
|
221
215
|
});
|
222
216
|
|
223
|
-
it('returns
|
224
|
-
|
225
|
-
expect(j.validate().messages).toContain('hello');
|
226
|
-
});
|
227
|
-
|
228
|
-
it('returns default message', function() {
|
229
|
-
expect(j.validate().messages).toContain(j.defaultMessages.blank);
|
217
|
+
it('returns message', function() {
|
218
|
+
expect(j.validate().messages).not.toBeEmpty();
|
230
219
|
});
|
231
220
|
|
232
221
|
it('validates non-empty input', function() {
|
233
|
-
j.element.
|
222
|
+
j.element.children[1].selected = true;
|
234
223
|
expect(j.validate().valid).toEqual(true);
|
235
224
|
});
|
236
225
|
|
@@ -238,11 +227,10 @@ describe('judge', function() {
|
|
238
227
|
|
239
228
|
describe('length', function() {
|
240
229
|
|
241
|
-
var j
|
230
|
+
var j;
|
242
231
|
|
243
232
|
beforeEach(function() {
|
244
|
-
j = new judge.Watcher(document.getElementById('
|
245
|
-
jIs = new judge.Watcher(document.getElementById('foo_two_is'));
|
233
|
+
j = new judge.Watcher(document.getElementById('foo_two_foobar'));
|
246
234
|
});
|
247
235
|
|
248
236
|
it('validates valid input', function() {
|
@@ -255,15 +243,9 @@ describe('judge', function() {
|
|
255
243
|
expect(j.validate().valid).toEqual(true);
|
256
244
|
});
|
257
245
|
|
258
|
-
it('returns
|
259
|
-
j.element.value = 'abc';
|
260
|
-
_(j.validators).first().options.too_short = 'oh dear';
|
261
|
-
expect(j.validate().messages).toContain('oh dear');
|
262
|
-
});
|
263
|
-
|
264
|
-
it('returns default message', function() {
|
246
|
+
it('returns message', function() {
|
265
247
|
j.element.value = 'abc';
|
266
|
-
expect(j.validate().messages).
|
248
|
+
expect(j.validate().messages).not.toBeEmpty();
|
267
249
|
});
|
268
250
|
|
269
251
|
it('invalidates when value is under minimum', function() {
|
@@ -276,10 +258,10 @@ describe('judge', function() {
|
|
276
258
|
expect(j.validate().valid).toEqual(false);
|
277
259
|
});
|
278
260
|
|
279
|
-
it('invalidates when value is not equal to is', function() {
|
280
|
-
|
281
|
-
|
282
|
-
});
|
261
|
+
//it('invalidates when value is not equal to is', function() {
|
262
|
+
// jIs.element.value = 'abc';
|
263
|
+
// expect(jIs.validate().valid).toEqual(false);
|
264
|
+
//});
|
283
265
|
});
|
284
266
|
|
285
267
|
describe('exclusion', function() {
|
@@ -291,24 +273,16 @@ describe('judge', function() {
|
|
291
273
|
});
|
292
274
|
|
293
275
|
it('validates when value is not in array', function() {
|
294
|
-
j.element.value = 'abc';
|
295
276
|
expect(j.validate().valid).toEqual(true);
|
296
277
|
});
|
297
278
|
|
298
279
|
it('invalidates when value is in array', function() {
|
299
|
-
j.element.
|
280
|
+
j.element.children[1].selected = true;
|
300
281
|
expect(j.validate().valid).toEqual(false);
|
301
|
-
});
|
302
|
-
|
303
|
-
it('returns default message', function() {
|
304
|
-
j.element.value = 'foo';
|
305
|
-
expect(j.validate().messages).toContain(j.defaultMessages.exclusion);
|
306
|
-
});
|
282
|
+
});
|
307
283
|
|
308
|
-
it('returns
|
309
|
-
|
310
|
-
j.element.value = 'foo';
|
311
|
-
expect(j.validate().messages).toContain('restricted');
|
284
|
+
it('returns message', function() {
|
285
|
+
expect(j.validate().messages).not.toBeEmpty();
|
312
286
|
});
|
313
287
|
|
314
288
|
});
|
@@ -322,24 +296,16 @@ describe('judge', function() {
|
|
322
296
|
});
|
323
297
|
|
324
298
|
it('validates when value is in array', function() {
|
325
|
-
j.element.
|
299
|
+
j.element.children[1].selected = true;
|
326
300
|
expect(j.validate().valid).toEqual(true);
|
327
301
|
});
|
328
302
|
|
329
303
|
it('invalidates when value is not in array', function() {
|
330
|
-
j.element.value = '10';
|
331
304
|
expect(j.validate().valid).toEqual(false);
|
332
305
|
});
|
333
306
|
|
334
|
-
it('returns
|
335
|
-
j.
|
336
|
-
expect(j.validate().messages).toContain(j.defaultMessages.inclusion);
|
337
|
-
});
|
338
|
-
|
339
|
-
it('returns default message', function() {
|
340
|
-
_(j.validators).first().options.message = 'must be one of defined values';
|
341
|
-
j.element.value = 'foo';
|
342
|
-
expect(j.validate().messages).toContain('must be one of defined values');
|
307
|
+
it('returns message', function() {
|
308
|
+
expect(j.validate().messages).not.toBeEmpty();
|
343
309
|
});
|
344
310
|
|
345
311
|
});
|
@@ -358,13 +324,13 @@ describe('judge', function() {
|
|
358
324
|
it('invalidates when value is not a number', function() {
|
359
325
|
j.element.value = 'foo bar';
|
360
326
|
expect(j.validate().valid).toEqual(false);
|
361
|
-
expect(j.validate().messages).
|
327
|
+
expect(j.validate().messages).not.toBeEmpty();
|
362
328
|
});
|
363
329
|
|
364
330
|
it('validates odd / invalidates not odd', function() {
|
365
331
|
j.element.value = '2';
|
366
332
|
expect(j.validate().valid).toEqual(false);
|
367
|
-
expect(j.validate().messages).
|
333
|
+
expect(j.validate().messages).not.toBeEmpty();
|
368
334
|
j.element.value = '1';
|
369
335
|
expect(j.validate().valid).toEqual(true);
|
370
336
|
});
|
@@ -372,7 +338,7 @@ describe('judge', function() {
|
|
372
338
|
it('validates even / invalidates not even', function() {
|
373
339
|
jEven.element.value = '1';
|
374
340
|
expect(jEven.validate().valid).toEqual(false);
|
375
|
-
expect(jEven.validate().messages).
|
341
|
+
expect(jEven.validate().messages).not.toBeEmpty();
|
376
342
|
jEven.element.value = '2';
|
377
343
|
expect(jEven.validate().valid).toEqual(true);
|
378
344
|
});
|
@@ -387,7 +353,7 @@ describe('judge', function() {
|
|
387
353
|
it('invalidates float', function() {
|
388
354
|
j.element.value = '1.1';
|
389
355
|
expect(j.validate().valid).toEqual(false);
|
390
|
-
expect(j.validate().messages).
|
356
|
+
expect(j.validate().messages).not.toBeEmpty();
|
391
357
|
});
|
392
358
|
|
393
359
|
});
|
@@ -397,10 +363,10 @@ describe('judge', function() {
|
|
397
363
|
it('invalidates not greater than', function() {
|
398
364
|
jGt.element.value = '6';
|
399
365
|
expect(jGt.validate().valid).toEqual(false);
|
400
|
-
expect(jGt.validate().messages).
|
366
|
+
expect(jGt.validate().messages).not.toBeEmpty();
|
401
367
|
jGt.element.value = '7';
|
402
368
|
expect(jGt.validate().valid).toEqual(false);
|
403
|
-
expect(jGt.validate().messages).
|
369
|
+
expect(jGt.validate().messages).not.toBeEmpty();
|
404
370
|
});
|
405
371
|
|
406
372
|
it('validates greater than', function() {
|
@@ -426,30 +392,30 @@ describe('judge', function() {
|
|
426
392
|
|
427
393
|
});
|
428
394
|
|
429
|
-
it('validates equal to', function() {
|
430
|
-
|
431
|
-
|
432
|
-
|
433
|
-
|
434
|
-
});
|
395
|
+
//it('validates equal to', function() {
|
396
|
+
// jLt.element.value = '5';
|
397
|
+
// expect(jLt.validate().valid).toEqual(false);
|
398
|
+
// jLt.element.value = '6';
|
399
|
+
// expect(jLt.validate().valid).toEqual(true);
|
400
|
+
//});
|
435
401
|
|
436
|
-
it('validates less than or equal to', function() {
|
437
|
-
|
438
|
-
|
439
|
-
|
440
|
-
|
441
|
-
|
442
|
-
|
443
|
-
});
|
402
|
+
//it('validates less than or equal to', function() {
|
403
|
+
// j.element.value = '5';
|
404
|
+
// expect(j.validate().valid).toEqual(true);
|
405
|
+
// j.element.value = '7';
|
406
|
+
// expect(j.validate().valid).toEqual(true);
|
407
|
+
// j.element.value = '9';
|
408
|
+
// expect(j.validate().valid).toEqual(false);
|
409
|
+
//});
|
444
410
|
|
445
|
-
it('validates greater than or equal to', function() {
|
446
|
-
|
447
|
-
|
448
|
-
|
449
|
-
|
450
|
-
|
451
|
-
|
452
|
-
});
|
411
|
+
//it('validates greater than or equal to', function() {
|
412
|
+
// jEven.element.value = '20';
|
413
|
+
// expect(jEven.validate().valid).toEqual(true);
|
414
|
+
// jEven.element.value = '2';
|
415
|
+
// expect(jEven.validate().valid).toEqual(true);
|
416
|
+
// jEven.element.value = '1';
|
417
|
+
// expect(jEven.validate().valid).toEqual(false);
|
418
|
+
//});
|
453
419
|
|
454
420
|
});
|
455
421
|
|
@@ -460,18 +426,17 @@ describe('judge', function() {
|
|
460
426
|
var j;
|
461
427
|
|
462
428
|
beforeEach(function() {
|
463
|
-
j = new judge.Watcher(document.getElementById('
|
429
|
+
j = new judge.Watcher(document.getElementById('foo_five_wi'));
|
464
430
|
});
|
465
431
|
|
466
|
-
it('
|
467
|
-
j.
|
468
|
-
expect(j.validate().
|
432
|
+
it('invalidates value matching with', function() {
|
433
|
+
expect(j.validate().valid).toEqual(false);
|
434
|
+
expect(j.validate().messages).not.toBeEmpty();
|
469
435
|
});
|
470
436
|
|
471
437
|
it('invalidates value not matching with', function() {
|
472
|
-
j.element.
|
473
|
-
expect(j.validate().valid).toEqual(
|
474
|
-
expect(j.validate().messages).toContain(j.defaultMessages.invalid);
|
438
|
+
j.element.children[1].selected = true;
|
439
|
+
expect(j.validate().valid).toEqual(true);
|
475
440
|
});
|
476
441
|
|
477
442
|
});
|
@@ -484,15 +449,14 @@ describe('judge', function() {
|
|
484
449
|
j = new judge.Watcher(document.getElementById('foo_five_wo'));
|
485
450
|
});
|
486
451
|
|
487
|
-
it('validates value matching with', function() {
|
488
|
-
j.element.value = '12345';
|
452
|
+
it('validates value not matching with', function() {
|
489
453
|
expect(j.validate().valid).toEqual(true);
|
490
454
|
});
|
491
455
|
|
492
|
-
it('invalidates value
|
493
|
-
j.element.
|
456
|
+
it('invalidates value matching with', function() {
|
457
|
+
j.element.children[1].selected = true;
|
494
458
|
expect(j.validate().valid).toEqual(false);
|
495
|
-
expect(j.validate().messages).
|
459
|
+
expect(j.validate().messages).not.toBeEmpty();
|
496
460
|
});
|
497
461
|
|
498
462
|
});
|
@@ -516,11 +480,6 @@ describe('judge', function() {
|
|
516
480
|
expect(j.validate().valid).toEqual(false);
|
517
481
|
});
|
518
482
|
|
519
|
-
it('invalidates with custom message when present', function() {
|
520
|
-
_(j.validators).first().options.message = 'must be ticked';
|
521
|
-
expect(j.validate().messages).toContain('must be ticked');
|
522
|
-
});
|
523
|
-
|
524
483
|
});
|
525
484
|
|
526
485
|
describe('confirmation', function() {
|
@@ -544,13 +503,6 @@ describe('judge', function() {
|
|
544
503
|
expect(j.validate().valid).toEqual(false);
|
545
504
|
});
|
546
505
|
|
547
|
-
it('invalidates with custom message when present', function() {
|
548
|
-
_(j.validators).first().options.message = 'must be same';
|
549
|
-
j.element.value = 'password';
|
550
|
-
c.value = 'wrongpassword';
|
551
|
-
expect(j.validate().messages).toContain('must be same');
|
552
|
-
});
|
553
|
-
|
554
506
|
});
|
555
507
|
|
556
508
|
});
|
@@ -605,14 +557,6 @@ describe('judge', function() {
|
|
605
557
|
});
|
606
558
|
|
607
559
|
});
|
608
|
-
|
609
|
-
describe('countMsg', function() {
|
610
|
-
|
611
|
-
it('subs string', function() {
|
612
|
-
expect(judge.utils.countMsg('should be less than %{count}', 5)).toEqual('should be less than 5');
|
613
|
-
});
|
614
|
-
|
615
|
-
});
|
616
560
|
|
617
561
|
describe('isInt', function() {
|
618
562
|
|