1 | if (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 |
|
9 | describe('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 |
|
198 |
|
199 |
|
200 |
|
201 |
|
202 |
|
203 |
|
204 |
|
205 | });
|