UNPKG

5.44 kBJavaScriptView Raw
1if (typeof require !== 'undefined') {
2 var Validator = require('../src/validator.js');
3 var expect = require('chai').expect;
4} else {
5 var Validator = window.Validator;
6 var expect = window.chai.expect;
7}
8
9describe('async rule tests', function() {
10 this.timeout(200);
11
12 it('should be able to register and pass async rule', function(done) {
13 Validator.registerAsync('username', function(desiredUsername, ruleValue, attribute, passes) {
14 setTimeout(function() {
15 if (desiredUsername == 'test') {
16 passes();
17 }
18 }, 50);
19 }, ':attribute is an invalid username');
20
21 var validator = new Validator({
22 username: 'test'
23 }, {
24 username: 'username'
25 });
26 validator.passes(done);
27 });
28
29 it('should be able to fail async rules', function(done) {
30 Validator.registerAsync('username', function(desiredUsername, ruleValue, attribute, passes) {
31 setTimeout(function() {
32 if (desiredUsername == 'test') {
33 passes(false);
34 }
35 }, 50);
36 }, ':attribute is an invalid username');
37
38 var validator = new Validator({
39 username: 'test'
40 }, {
41 username: 'username'
42 });
43 validator.fails(done);
44 });
45
46 it('should pass on multiple async rules', function(done) {
47 var passCount = 0;
48
49 Validator.registerAsync('username1', function(desiredUsername, ruleValue, attribute, passes) {
50 setTimeout(function() {
51 if (desiredUsername == 'test') {
52 passCount++;
53 passes();
54 }
55 }, 50);
56 }, ':attribute is an invalid username');
57
58 Validator.registerAsync('username2', function(desiredUsername, ruleValue, attribute, passes) {
59 setTimeout(function() {
60 if (desiredUsername == 'test') {
61 passCount++;
62 passes();
63 }
64 }, 50);
65 }, ':attribute is an invalid username');
66
67 var validator = new Validator({
68 username: 'test'
69 }, {
70 username: 'username1|username2'
71 });
72 validator.passes(function() {
73 expect(passCount).to.equal(2);
74 done();
75 });
76 });
77
78 it('should fail on mixture of pass/fail async rules', function(done) {
79 var failedCount = 0;
80 var passCount = 0;
81
82 Validator.registerAsync('username1', function(desiredUsername, ruleValue, attribute, passes) {
83 setTimeout(function() {
84 if (desiredUsername == 'test') {
85 passCount++;
86 passes();
87 }
88 }, 50);
89 }, ':attribute is an invalid username');
90
91 Validator.registerAsync('username2', function(desiredUsername, ruleValue, attribute, passes) {
92 setTimeout(function() {
93 if (desiredUsername == 'test') {
94 failedCount++;
95 passes(false);
96 }
97 }, 50);
98 }, ':attribute is an invalid username');
99
100 var validator = new Validator({
101 username: 'test'
102 }, {
103 username: 'username1|username2'
104 });
105 validator.fails(function() {
106 expect(passCount).to.equal(1);
107 expect(failedCount).to.equal(1);
108 done();
109 });
110 });
111
112 it('should allow custom error message', function(done) {
113 Validator.registerAsync('username', function(desiredUsername, ruleValue, attribute, passes) {
114 setTimeout(function() {
115 if (desiredUsername == 'admin') {
116 passes(false, 'This username is banned');
117 }
118 }, 50);
119 }, ':attribute is an invalid username');
120
121 var validator = new Validator({
122 username: 'admin'
123 }, {
124 username: 'username'
125 });
126 validator.fails(function() {
127 expect(validator.errors.first('username')).to.equal('This username is banned');
128 done();
129 });
130 });
131
132 it('should allow validating by async when no async rules', function(done) {
133 var validator = new Validator({
134 username: 'admin',
135 email: 'blah'
136 }, {
137 username: 'required|min:3',
138 email: 'required|email'
139 });
140 validator.fails(function() {
141 done();
142 });
143
144 validator.passes(function() {
145 throw 'Should not have passed.';
146 });
147 });
148
149 it('should it pass on mixture of sync/async rules', function(done) {
150 Validator.registerAsync('username', function(desiredUsername, ruleValue, attribute, passes) {
151 setTimeout(function() {
152 if (desiredUsername == 'test') {
153 passes();
154 }
155 }, 50);
156 }, ':attribute is an invalid username');
157
158 var validator = new Validator({
159 username: 'test'
160 }, {
161 username: 'required|min:3|username'
162 });
163 validator.passes(done);
164 });
165
166 it('should it not call passes if using just fails callback', function(done) {
167 var validator = new Validator({
168 name: 'gary'
169 }, {
170 name: 'required'
171 });
172 validator.fails(function() {
173 throw 'Should not be called.'
174 });
175
176 validator.passes(function() {
177 done();
178 });
179 });
180
181
182 it('should it not call fails if using just passes callback', function(done) {
183 var validator = new Validator({
184 name: ''
185 }, {
186 name: 'required'
187 });
188 validator.passes(function() {
189 throw 'Should not be called.'
190 });
191
192 validator.fails(function() {
193 done();
194 });
195 });
196
197 // it('should throw exception when attempting to validate and no fail or pass callback', function() {
198
199 // Validator.registerAsync('username', function() { });
200 // var validator = new Validator({ username: 'admin' }, { username: 'username' });
201 // expect(validator.passes).to.throw(/^passes expects.*/);
202
203 // });
204
205});