nimboids-client_side_validations 3.0.3
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 +45 -0
- data/javascript/rails.validations.js +393 -0
- data/lib/client_side_validations.rb +8 -0
- data/lib/client_side_validations/action_view.rb +13 -0
- data/lib/client_side_validations/action_view/form_builder.rb +64 -0
- data/lib/client_side_validations/action_view/form_helper.rb +69 -0
- data/lib/client_side_validations/action_view/form_tag_helper.rb +12 -0
- data/lib/client_side_validations/active_model.rb +52 -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 +22 -0
- data/lib/client_side_validations/active_model/numericality.rb +26 -0
- data/lib/client_side_validations/active_model/presence.rb +10 -0
- data/lib/client_side_validations/active_record.rb +11 -0
- data/lib/client_side_validations/active_record/middleware.rb +25 -0
- data/lib/client_side_validations/active_record/uniqueness.rb +26 -0
- data/lib/client_side_validations/core_ext.rb +3 -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/formtastic.rb +21 -0
- data/lib/client_side_validations/middleware.rb +83 -0
- data/lib/client_side_validations/mongoid.rb +9 -0
- data/lib/client_side_validations/mongoid/middleware.rb +20 -0
- data/lib/client_side_validations/mongoid/uniqueness.rb +26 -0
- data/lib/client_side_validations/simple_form.rb +24 -0
- data/lib/client_side_validations/version.rb +3 -0
- data/lib/generators/client_side_validations/install_generator.rb +22 -0
- data/lib/generators/templates/README +7 -0
- data/lib/generators/templates/client_side_validations.rb +14 -0
- data/test/action_view/cases/helper.rb +152 -0
- data/test/action_view/cases/test_helpers.rb +237 -0
- data/test/action_view/cases/test_legacy_helpers.rb +150 -0
- data/test/action_view/models.rb +3 -0
- data/test/action_view/models/comment.rb +35 -0
- data/test/action_view/models/post.rb +35 -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 +151 -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 +150 -0
- data/test/active_record/cases/test_uniqueness_validator.rb +45 -0
- data/test/active_record/models/guid.rb +7 -0
- data/test/active_record/models/user.rb +10 -0
- data/test/base_helper.rb +6 -0
- data/test/core_ext/cases/test_core_ext.rb +45 -0
- data/test/formtastic/cases/helper.rb +2 -0
- data/test/formtastic/cases/test_form_builder.rb +11 -0
- data/test/formtastic/cases/test_form_helper.rb +22 -0
- data/test/generators/cases/test_install_generator.rb +15 -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/validateSimpleForm.js +57 -0
- data/test/javascript/public/test/settings.js +15 -0
- data/test/javascript/public/test/validateElement.js +144 -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 +70 -0
- data/test/javascript/public/test/validators/numericality.js +140 -0
- data/test/javascript/public/test/validators/presence.js +15 -0
- data/test/javascript/public/test/validators/uniqueness.js +89 -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 +78 -0
- data/test/javascript/views/index.erb +20 -0
- data/test/javascript/views/layout.erb +21 -0
- data/test/middleware/cases/helper.rb +15 -0
- data/test/middleware/cases/test_middleware.rb +8 -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 +68 -0
- data/test/mongoid/cases/test_uniqueness_validator.rb +44 -0
- data/test/mongoid/models/book.rb +8 -0
- data/test/simple_form/cases/helper.rb +2 -0
- data/test/simple_form/cases/test_form_builder.rb +14 -0
- data/test/simple_form/cases/test_form_helper.rb +22 -0
- metadata +435 -0
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
require 'formtastic/cases/helper'
|
|
2
|
+
|
|
3
|
+
class ClientSideValidations::Formtastic::SemanticFormBuilderTest < Test::Unit::TestCase
|
|
4
|
+
def test_client_side_form_js_hash
|
|
5
|
+
expected = {
|
|
6
|
+
:type => 'Formtastic::SemanticFormBuilder',
|
|
7
|
+
:inline_error_class => 'inline-errors'
|
|
8
|
+
}
|
|
9
|
+
assert_equal expected, Formtastic::SemanticFormBuilder.client_side_form_settings(nil, nil)
|
|
10
|
+
end
|
|
11
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
require 'action_view/cases/helper'
|
|
2
|
+
require 'formtastic/cases/helper'
|
|
3
|
+
|
|
4
|
+
class ClientSideValidations::Formtastic::FormHelperTest < ActionView::TestCase
|
|
5
|
+
include ActionViewTestSetup
|
|
6
|
+
include Formtastic::SemanticFormHelper
|
|
7
|
+
|
|
8
|
+
def client_side_form_settings_helper
|
|
9
|
+
""
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def test_semantic_form_for
|
|
13
|
+
semantic_form_for(@post, :validate => true) do |f|
|
|
14
|
+
concat f.input(:cost)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
expected = %{<form accept-charset="UTF-8" action="/posts/123" class="formtastic post" data-validate="true" id="edit_post_123" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="✓" /><input name="_method" type="hidden" value="put" /></div><li class="string required" id="post_cost_input"><label for="post_cost">Cost<abbr title="required">*</abbr></label><input data-validate="true" id="post_cost" name="post[cost]" type="text" /></li></form><script>var edit_post_123 = {"type":"Formtastic::SemanticFormBuilder","inline_error_class":"inline-errors","validators":{"post[cost]":{"presence":{"message":"can't be blank"}}}};</script>}
|
|
18
|
+
assert_equal expected, output_buffer, "\n\n *** If you're running Ruby 1.8 and this test fails is is most likely due to 1.8's lack of insertion order persistence with Hashes ***\n"
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
end
|
|
22
|
+
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
require 'rails/generators/test_case'
|
|
2
|
+
require 'generators/client_side_validations/install_generator'
|
|
3
|
+
|
|
4
|
+
class InstallGeneratorTest < Rails::Generators::TestCase
|
|
5
|
+
tests ClientSideValidations::Generators::InstallGenerator
|
|
6
|
+
destination File.expand_path('../../tmp', __FILE__)
|
|
7
|
+
setup :prepare_destination
|
|
8
|
+
|
|
9
|
+
test 'Assert all files are properly created' do
|
|
10
|
+
run_generator
|
|
11
|
+
assert_file 'config/initializers/client_side_validations.rb'
|
|
12
|
+
assert_file 'public/javascripts/rails.validations.js'
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
module('Element Validate After Callback', {
|
|
2
|
+
setup: function() {
|
|
3
|
+
new_user = {
|
|
4
|
+
type: 'ActionView::Helpers::FormBuilder',
|
|
5
|
+
input_tag: '<div class="field_with_errors"><span id="input_tag" /><label for="user_name" class="message"></label></div>',
|
|
6
|
+
label_tag: '<div class="field_with_errors"><label id="label_tag" /></div>',
|
|
7
|
+
validators: {"user[name]":{"presence":{"message": "must be present"}}}
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
$('#qunit-fixture')
|
|
11
|
+
.append($('<span id="result" />'))
|
|
12
|
+
.append($('<form />', {
|
|
13
|
+
action: '/users',
|
|
14
|
+
'data-validate': true,
|
|
15
|
+
method: 'post',
|
|
16
|
+
id: 'new_user'
|
|
17
|
+
}))
|
|
18
|
+
.find('form')
|
|
19
|
+
.append($('<input />', {
|
|
20
|
+
name: 'user[name]',
|
|
21
|
+
id: 'user_name',
|
|
22
|
+
'data-validate': 'true',
|
|
23
|
+
type: 'text'
|
|
24
|
+
}))
|
|
25
|
+
.append($('<label for="user_name">Name</label>'));
|
|
26
|
+
|
|
27
|
+
clientSideValidations.callbacks.element.after = function(element, message) {
|
|
28
|
+
$('#result').text('Element Validate After ' + element.attr('id'));
|
|
29
|
+
}
|
|
30
|
+
$('form#new_user').validate();
|
|
31
|
+
},
|
|
32
|
+
teardown: function() {
|
|
33
|
+
clientSideValidations.callbacks.element.after = function(element, eventData) {}
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
test('runs callback when form element validate', function() {
|
|
38
|
+
var input = $('input');
|
|
39
|
+
|
|
40
|
+
equal($('#result').text(), '');
|
|
41
|
+
|
|
42
|
+
input.trigger('focusout');
|
|
43
|
+
equal($('#result').text(), 'Element Validate After user_name');
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
test('runs callback when form validates', function() {
|
|
47
|
+
var form = $('form'), input = form.find('input');
|
|
48
|
+
|
|
49
|
+
equal($('#result').text(), '');
|
|
50
|
+
|
|
51
|
+
form.submit();
|
|
52
|
+
equal($('#result').text(), 'Element Validate After user_name');
|
|
53
|
+
});
|
|
54
|
+
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
module('Element Validate Before Callback', {
|
|
2
|
+
setup: function() {
|
|
3
|
+
new_user = {
|
|
4
|
+
type: 'ActionView::Helpers::FormBuilder',
|
|
5
|
+
input_tag: '<div class="field_with_errors"><span id="input_tag" /><label for="user_name" class="message"></label></div>',
|
|
6
|
+
label_tag: '<div class="field_with_errors"><label id="label_tag" /></div>',
|
|
7
|
+
validators: {"user[name]":{"{presence":{"message": "must be present"}}}
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
$('#qunit-fixture')
|
|
11
|
+
.append($('<span id="result" />'))
|
|
12
|
+
.append($('<form />', {
|
|
13
|
+
action: '/users',
|
|
14
|
+
'data-validate': true,
|
|
15
|
+
method: 'post',
|
|
16
|
+
id: 'new_user'
|
|
17
|
+
}))
|
|
18
|
+
.find('form')
|
|
19
|
+
.append($('<input />', {
|
|
20
|
+
name: 'user[name]',
|
|
21
|
+
id: 'user_name',
|
|
22
|
+
'data-validate': 'true',
|
|
23
|
+
type: 'text'
|
|
24
|
+
}))
|
|
25
|
+
.append($('<label for="user_name">Name</label>'));
|
|
26
|
+
|
|
27
|
+
clientSideValidations.callbacks.element.before = function(element) {
|
|
28
|
+
$('#result').text('Element Validate Before ' + element.attr('id'));
|
|
29
|
+
}
|
|
30
|
+
$('form#new_user').validate();
|
|
31
|
+
},
|
|
32
|
+
teardown: function() {
|
|
33
|
+
clientSideValidations.callbacks.element.before = function(element, eventData) {}
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
test('runs callback when form element validate', function() {
|
|
38
|
+
var input = $('input');
|
|
39
|
+
|
|
40
|
+
equal($('#result').text(), '');
|
|
41
|
+
|
|
42
|
+
input.trigger('focusout');
|
|
43
|
+
equal($('#result').text(), 'Element Validate Before user_name');
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
test('runs callback when form validates', function() {
|
|
47
|
+
var form = $('form'), input = form.find('input');
|
|
48
|
+
|
|
49
|
+
equal($('#result').text(), '');
|
|
50
|
+
|
|
51
|
+
form.submit();
|
|
52
|
+
equal($('#result').text(), 'Element Validate Before user_name');
|
|
53
|
+
});
|
|
54
|
+
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
module('Element Validate Fail Callback', {
|
|
2
|
+
setup: function() {
|
|
3
|
+
new_user = {
|
|
4
|
+
type: 'ActionView::Helpers::FormBuilder',
|
|
5
|
+
input_tag: '<div class="field_with_errors"><span id="input_tag" /><label for="user_name" class="message"></label></div>',
|
|
6
|
+
label_tag: '<div class="field_with_errors"><label id="label_tag" /></div>',
|
|
7
|
+
validators: {"user[name]":{"presence":{"message": "must be present"}}}
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
$('#qunit-fixture')
|
|
11
|
+
.append($('<span id="result" />'))
|
|
12
|
+
.append($('<form />', {
|
|
13
|
+
action: '/users',
|
|
14
|
+
'data-validate': true,
|
|
15
|
+
method: 'post',
|
|
16
|
+
id: 'new_user'
|
|
17
|
+
}))
|
|
18
|
+
.find('form')
|
|
19
|
+
.append($('<input />', {
|
|
20
|
+
name: 'user[name]',
|
|
21
|
+
id: 'user_name',
|
|
22
|
+
'data-validate': 'true',
|
|
23
|
+
type: 'text'
|
|
24
|
+
}))
|
|
25
|
+
.append($('<label for="user_name">Name</label>'));
|
|
26
|
+
|
|
27
|
+
clientSideValidations.callbacks.element.fail = function(element, message) {
|
|
28
|
+
$('#result').text('Element Validate Fail ' + element.attr('id') + ' ' + message);
|
|
29
|
+
}
|
|
30
|
+
$('form#new_user').validate();
|
|
31
|
+
},
|
|
32
|
+
teardown: function() {
|
|
33
|
+
clientSideValidations.callbacks.element.fail = function(element, message, callback) { callback(); }
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
test('runs callback when form element validate', function() {
|
|
38
|
+
var input = $('input');
|
|
39
|
+
|
|
40
|
+
equal($('#result').text(), '');
|
|
41
|
+
|
|
42
|
+
input.val('test')
|
|
43
|
+
input.trigger('change');
|
|
44
|
+
input.trigger('focusout');
|
|
45
|
+
equal($('#result').text(), '');
|
|
46
|
+
|
|
47
|
+
input.val('')
|
|
48
|
+
input.trigger('change');
|
|
49
|
+
input.trigger('focusout');
|
|
50
|
+
equal($('#result').text(), 'Element Validate Fail user_name must be present');
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
test('runs callback when form validates', function() {
|
|
54
|
+
var form = $('form'), input = form.find('input');
|
|
55
|
+
|
|
56
|
+
equal($('#result').text(), '');
|
|
57
|
+
|
|
58
|
+
input.val('test')
|
|
59
|
+
input.trigger('change');
|
|
60
|
+
form.trigger('submit');
|
|
61
|
+
|
|
62
|
+
equal($('#result').text(), '');
|
|
63
|
+
|
|
64
|
+
input.val('')
|
|
65
|
+
input.trigger('change');
|
|
66
|
+
form.trigger('submit');
|
|
67
|
+
|
|
68
|
+
equal($('#result').text(), 'Element Validate Fail user_name must be present');
|
|
69
|
+
});
|
|
70
|
+
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
module('Element Validate Pass Callback', {
|
|
2
|
+
setup: function() {
|
|
3
|
+
new_user = {
|
|
4
|
+
type: 'ActionView::Helpers::FormBuilder',
|
|
5
|
+
input_tag: '<div class="field_with_errors"><span id="input_tag" /><label for="user_name" class="message"></label></div>',
|
|
6
|
+
label_tag: '<div class="field_with_errors"><label id="label_tag" /></div>',
|
|
7
|
+
validators: {"user[name]":{"presence":{"message": "must be present"}}}
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
$('#qunit-fixture')
|
|
11
|
+
.append($('<span id="result" />'))
|
|
12
|
+
.append($('<form />', {
|
|
13
|
+
action: '/users',
|
|
14
|
+
'data-validate': true,
|
|
15
|
+
method: 'post',
|
|
16
|
+
id: 'new_user'
|
|
17
|
+
}))
|
|
18
|
+
.find('form')
|
|
19
|
+
.append($('<input />', {
|
|
20
|
+
name: 'user[name]',
|
|
21
|
+
id: 'user_name',
|
|
22
|
+
'data-validate': 'true',
|
|
23
|
+
type: 'text'
|
|
24
|
+
}))
|
|
25
|
+
.append($('<label for="user_name">Name</label>'));
|
|
26
|
+
|
|
27
|
+
clientSideValidations.callbacks.element.pass = function(element) {
|
|
28
|
+
$('#result').text('Element Validate Pass ' + element.attr('id'));
|
|
29
|
+
}
|
|
30
|
+
$('form#new_user').validate();
|
|
31
|
+
},
|
|
32
|
+
teardown: function() {
|
|
33
|
+
clientSideValidations.callbacks.element.pass = function(element, callback) { callback() }
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
test('runs callback when form element validate', function() {
|
|
38
|
+
var input = $('input');
|
|
39
|
+
|
|
40
|
+
equal($('#result').text(), '');
|
|
41
|
+
|
|
42
|
+
input.val('')
|
|
43
|
+
input.trigger('change');
|
|
44
|
+
input.trigger('focusout');
|
|
45
|
+
equal($('#result').text(), '');
|
|
46
|
+
|
|
47
|
+
input.val('test')
|
|
48
|
+
input.trigger('change');
|
|
49
|
+
input.trigger('focusout');
|
|
50
|
+
equal($('#result').text(), 'Element Validate Pass user_name');
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
test('runs callback when form validates', function() {
|
|
54
|
+
var form = $('form'), input = form.find('input');
|
|
55
|
+
|
|
56
|
+
equal($('#result').text(), '');
|
|
57
|
+
|
|
58
|
+
input.val('')
|
|
59
|
+
input.trigger('change');
|
|
60
|
+
form.trigger('submit');
|
|
61
|
+
|
|
62
|
+
equal($('#result').text(), '');
|
|
63
|
+
|
|
64
|
+
input.val('test')
|
|
65
|
+
input.trigger('change');
|
|
66
|
+
form.trigger('submit');
|
|
67
|
+
|
|
68
|
+
equal($('#result').text(), 'Element Validate Pass user_name');
|
|
69
|
+
});
|
|
70
|
+
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
module('Form Validate After Callback', {
|
|
2
|
+
setup: function() {
|
|
3
|
+
new_user = {
|
|
4
|
+
type: 'ActionView::Helpers::FormBuilder',
|
|
5
|
+
input_tag: '<div class="field_with_errors"><span id="input_tag" /><label for="user_name" class="message"></label></div>',
|
|
6
|
+
label_tag: '<div class="field_with_errors"><label id="label_tag" /></div>',
|
|
7
|
+
validators: {"user[name]":{"presence":{"message": "must be present"}}}
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
$('#qunit-fixture')
|
|
11
|
+
.append($('<span id="result" />'))
|
|
12
|
+
.append($('<form />', {
|
|
13
|
+
action: '/users',
|
|
14
|
+
'data-validate': true,
|
|
15
|
+
method: 'post',
|
|
16
|
+
id: 'new_user'
|
|
17
|
+
}))
|
|
18
|
+
.find('form')
|
|
19
|
+
.append($('<input />', {
|
|
20
|
+
name: 'user[name]',
|
|
21
|
+
id: 'user_name',
|
|
22
|
+
'data-validate': 'true',
|
|
23
|
+
type: 'text'
|
|
24
|
+
}))
|
|
25
|
+
.append($('<label for="user_name">Name</label>'));
|
|
26
|
+
|
|
27
|
+
clientSideValidations.callbacks.form.after = function(form, message) {
|
|
28
|
+
$('#result').text('Form Validate After ' + form.attr('id'));
|
|
29
|
+
}
|
|
30
|
+
$('form#new_user').validate();
|
|
31
|
+
},
|
|
32
|
+
teardown: function() {
|
|
33
|
+
clientSideValidations.callbacks.form.after = function(form, eventData) {}
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
test('runs callback', function() {
|
|
38
|
+
var form = $('form'), input = form.find('input');
|
|
39
|
+
|
|
40
|
+
equal($('#result').text(), '');
|
|
41
|
+
|
|
42
|
+
form.submit();
|
|
43
|
+
equal($('#result').text(), 'Form Validate After new_user');
|
|
44
|
+
});
|
|
45
|
+
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
module('Form Validate Before Callback', {
|
|
2
|
+
setup: function() {
|
|
3
|
+
new_user = {
|
|
4
|
+
type: 'ActionView::Helpers::FormBuilder',
|
|
5
|
+
input_tag: '<div class="field_with_errors"><span id="input_tag" /><label for="user_name" class="message"></label></div>',
|
|
6
|
+
label_tag: '<div class="field_with_errors"><label id="label_tag" /></div>',
|
|
7
|
+
validators: {"user[name]":{"presence":{"message": "must be present"}}}
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
$('#qunit-fixture')
|
|
11
|
+
.append($('<span id="result" />'))
|
|
12
|
+
.append($('<form />', {
|
|
13
|
+
action: '/users',
|
|
14
|
+
'data-validate': true,
|
|
15
|
+
method: 'post',
|
|
16
|
+
id: 'new_user'
|
|
17
|
+
}))
|
|
18
|
+
.find('form')
|
|
19
|
+
.append($('<input />', {
|
|
20
|
+
name: 'user[name]',
|
|
21
|
+
id: 'user_name',
|
|
22
|
+
'data-validate': 'true',
|
|
23
|
+
type: 'text'
|
|
24
|
+
}))
|
|
25
|
+
.append($('<label for="user_name">Name</label>'));
|
|
26
|
+
|
|
27
|
+
clientSideValidations.callbacks.form.before = function(form, message) {
|
|
28
|
+
$('#result').text('Form Validate Before ' + form.attr('id'));
|
|
29
|
+
}
|
|
30
|
+
$('form#new_user').validate();
|
|
31
|
+
},
|
|
32
|
+
teardown: function() {
|
|
33
|
+
clientSideValidations.callbacks.form.before = function(form, eventData) {}
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
test('runs callback', function() {
|
|
38
|
+
var form = $('form'), input = form.find('input');
|
|
39
|
+
|
|
40
|
+
equal($('#result').text(), '');
|
|
41
|
+
|
|
42
|
+
form.submit();
|
|
43
|
+
equal($('#result').text(), 'Form Validate Before new_user');
|
|
44
|
+
});
|
|
45
|
+
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
module('Form Validate Fail Callback', {
|
|
2
|
+
setup: function() {
|
|
3
|
+
new_user = {
|
|
4
|
+
type: 'ActionView::Helpers::FormBuilder',
|
|
5
|
+
input_tag: '<div class="field_with_errors"><span id="input_tag" /><label for="user_name" class="message"></label></div>',
|
|
6
|
+
label_tag: '<div class="field_with_errors"><label id="label_tag" /></div>',
|
|
7
|
+
validators: {"user[name]":{"presence":{"message": "must be present"}}}
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
$('#qunit-fixture')
|
|
11
|
+
.append($('<span id="result" />'))
|
|
12
|
+
.append($('<form />', {
|
|
13
|
+
action: '/users',
|
|
14
|
+
'data-validate': true,
|
|
15
|
+
method: 'post',
|
|
16
|
+
id: 'new_user'
|
|
17
|
+
}))
|
|
18
|
+
.find('form')
|
|
19
|
+
.append($('<input />', {
|
|
20
|
+
name: 'user[name]',
|
|
21
|
+
id: 'user_name',
|
|
22
|
+
'data-validate': 'true',
|
|
23
|
+
type: 'text'
|
|
24
|
+
}))
|
|
25
|
+
.append($('<label for="user_name">Name</label>'));
|
|
26
|
+
|
|
27
|
+
clientSideValidations.callbacks.form.fail = function(form, message) {
|
|
28
|
+
$('#result').text('Form Validate Fail ' + form.attr('id'));
|
|
29
|
+
}
|
|
30
|
+
$('form#new_user').validate();
|
|
31
|
+
},
|
|
32
|
+
teardown: function() {
|
|
33
|
+
clientSideValidations.callbacks.form.fail = function(form, eventData) {}
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
test('runs callback', function() {
|
|
38
|
+
var form = $('form'), input = form.find('input');
|
|
39
|
+
|
|
40
|
+
equal($('#result').text(), '');
|
|
41
|
+
|
|
42
|
+
form.submit();
|
|
43
|
+
equal($('#result').text(), 'Form Validate Fail new_user');
|
|
44
|
+
|
|
45
|
+
$('#result').text('');
|
|
46
|
+
input.val('test');
|
|
47
|
+
input.trigger('change');
|
|
48
|
+
form.submit();
|
|
49
|
+
equal($('#result').text(), '');
|
|
50
|
+
});
|
|
51
|
+
|