1 | var assert = require("assert"),
|
2 | form = require("../index"),
|
3 | validate = form.validate;
|
4 |
|
5 | module.exports = {
|
6 | 'validate : isDate': function() {
|
7 |
|
8 | var request = { body: {} };
|
9 | form(validate("field").isDate())(request, {});
|
10 | assert.equal(request.form.errors.length, 0);
|
11 |
|
12 |
|
13 | var request = { body: { field: "fail" }};
|
14 | form(validate("field").isDate())(request, {});
|
15 | assert.equal(request.form.errors.length, 1);
|
16 | assert.equal(request.form.errors[0], "field is not a date");
|
17 |
|
18 |
|
19 | var request = { body: { field: "fail" }};
|
20 | form(validate("field").isDate("!!! %s !!!"))(request, {});
|
21 | assert.equal(request.form.errors.length, 1);
|
22 | assert.equal(request.form.errors[0], "!!! field !!!");
|
23 |
|
24 |
|
25 | var request = { body: { field: "01/29/2012" }};
|
26 | form(validate("field").isDate())(request, {});
|
27 | assert.equal(request.form.errors.length, 0);
|
28 | },
|
29 |
|
30 | 'validate : isEmail': function() {
|
31 |
|
32 | var request = { body: {} };
|
33 | form(validate("field").isEmail())(request, {});
|
34 | assert.equal(request.form.errors.length, 0);
|
35 |
|
36 |
|
37 | var request = { body: { field: "fail" }};
|
38 | form(validate("field").isEmail())(request, {});
|
39 | assert.equal(request.form.errors.length, 1);
|
40 | assert.equal(request.form.errors[0], "field is not an email address");
|
41 |
|
42 |
|
43 | var request = { body: { field: "fail" }};
|
44 | form(validate("field").isEmail("!!! %s !!!"))(request, {});
|
45 | assert.equal(request.form.errors.length, 1);
|
46 | assert.equal(request.form.errors[0], "!!! field !!!");
|
47 |
|
48 |
|
49 | var request = { body: { field: "me@dandean.com" }};
|
50 | form(validate("field").isEmail())(request, {});
|
51 | assert.equal(request.form.errors.length, 0);
|
52 |
|
53 | var validEmails = [
|
54 | "user@host.com",
|
55 | "user@host.info",
|
56 | "user@host.co.uk",
|
57 | "user+service@host.co.uk",
|
58 | "user-ok.yes+tag@host.k12.mi.us",
|
59 | "FirstNameLastName2000@hotmail.com"
|
60 | ];
|
61 |
|
62 | for (var i in validEmails) {
|
63 | var request = { body: { field: validEmails[i] }};
|
64 | form(validate("field").isEmail())(request, {});
|
65 | assert.equal(request.form.errors.length, 0, 'failed to validate email: ' + validEmails[i]);
|
66 | }
|
67 |
|
68 | var badEmails = [
|
69 | "dontvalidateme",
|
70 | "nope@",
|
71 | "someUser",
|
72 | "<script@host.com",
|
73 | "userawesome*@host.com",
|
74 | "userawesom@ok.com?&vl=1"
|
75 | ];
|
76 |
|
77 | for (var i in badEmails) {
|
78 | var request = { body: { field: badEmails[i] }};
|
79 | form(validate("field").isEmail())(request, {});
|
80 | assert.equal(request.form.errors.length, 1, 'should not validate email: ' + badEmails[i]);
|
81 | }
|
82 |
|
83 | },
|
84 |
|
85 | 'validate : isUrl': function() {
|
86 |
|
87 | var request = { body: { field: "fail" }};
|
88 | form(validate("field").isUrl())(request, {});
|
89 | assert.equal(request.form.errors.length, 1);
|
90 | assert.equal(request.form.errors[0], "field is not a URL");
|
91 |
|
92 |
|
93 | var request = { body: { field: "fail" }};
|
94 | form(validate("field").isUrl("!!! %s !!!"))(request, {});
|
95 | assert.equal(request.form.errors.length, 1);
|
96 | assert.equal(request.form.errors[0], "!!! field !!!");
|
97 |
|
98 |
|
99 | var request = { body: { field: "http://www.google.com" }};
|
100 | form(validate("field").isUrl())(request, {});
|
101 | assert.equal(request.form.errors.length, 0);
|
102 | },
|
103 |
|
104 | 'validate : isIP': function() {
|
105 |
|
106 | var request = { body: { field: "fail" }};
|
107 | form(validate("field").isIP())(request, {});
|
108 | assert.equal(request.form.errors.length, 1);
|
109 | assert.equal(request.form.errors[0], "field is not an IP address");
|
110 |
|
111 |
|
112 | var request = { body: { field: "fail" }};
|
113 | form(validate("field").isIP("!!! %s !!!"))(request, {});
|
114 | assert.equal(request.form.errors.length, 1);
|
115 | assert.equal(request.form.errors[0], "!!! field !!!");
|
116 |
|
117 |
|
118 | var request = { body: { field: "0.0.0.0" }};
|
119 | form(validate("field").isIP())(request, {});
|
120 | assert.equal(request.form.errors.length, 0);
|
121 | },
|
122 |
|
123 | 'validate : isAlpha': function() {
|
124 |
|
125 | var request = { body: { field: "123456" }};
|
126 | form(validate("field").isAlpha())(request, {});
|
127 | assert.equal(request.form.errors.length, 1);
|
128 | assert.equal(request.form.errors[0], "field contains non-letter characters");
|
129 |
|
130 |
|
131 | var request = { body: { field: "123456" }};
|
132 | form(validate("field").isAlpha("!!! %s !!!"))(request, {});
|
133 | assert.equal(request.form.errors.length, 1);
|
134 | assert.equal(request.form.errors[0], "!!! field !!!");
|
135 |
|
136 |
|
137 | var request = { body: { field: "abcde" }};
|
138 | form(validate("field").isAlpha())(request, {});
|
139 | assert.equal(request.form.errors.length, 0);
|
140 | },
|
141 |
|
142 | 'validate : isAlphanumeric': function() {
|
143 |
|
144 | var request = { body: { field: "------" }};
|
145 | form(validate("field").isAlphanumeric())(request, {});
|
146 | assert.equal(request.form.errors.length, 1);
|
147 | assert.equal(request.form.errors[0], "field contains non alpha-numeric characters");
|
148 |
|
149 |
|
150 | var request = { body: { field: "------" }};
|
151 | form(validate("field").isAlphanumeric("!!! %s !!!"))(request, {});
|
152 | assert.equal(request.form.errors.length, 1);
|
153 | assert.equal(request.form.errors[0], "!!! field !!!");
|
154 |
|
155 |
|
156 | var request = { body: { field: "abc123" }};
|
157 | form(validate("field").isAlphanumeric())(request, {});
|
158 | assert.equal(request.form.errors.length, 0);
|
159 | },
|
160 |
|
161 | 'validate : isNumeric': function() {
|
162 |
|
163 | var request = { body: { field: "------" }};
|
164 | form(validate("field").isNumeric())(request, {});
|
165 | assert.equal(request.form.errors.length, 1);
|
166 | assert.equal(request.form.errors[0], "field is not a number");
|
167 |
|
168 |
|
169 | var request = { body: { field: "------" }};
|
170 | form(validate("field").isNumeric("!!! %s !!!"))(request, {});
|
171 | assert.equal(request.form.errors.length, 1);
|
172 | assert.equal(request.form.errors[0], "!!! field !!!");
|
173 |
|
174 |
|
175 | var request = { body: {
|
176 | integer: "123456",
|
177 | floating: "123456.45",
|
178 | negative: "-123456.45",
|
179 | positive: "+123456.45",
|
180 | padded: "000045.343"
|
181 | }};
|
182 | form(
|
183 | validate("integer").isNumeric(),
|
184 | validate("floating").isNumeric(),
|
185 | validate("negative").isNumeric(),
|
186 | validate("positive").isNumeric(),
|
187 | validate("padded").isNumeric()
|
188 | )(request, {});
|
189 | assert.equal(request.form.errors.length, 0);
|
190 | },
|
191 |
|
192 | 'validate : isInt': function() {
|
193 |
|
194 | var request = { body: { field: "------" }};
|
195 | form(validate("field").isInt())(request, {});
|
196 | assert.equal(request.form.errors.length, 1);
|
197 | assert.equal(request.form.errors[0], "field is not an integer");
|
198 |
|
199 |
|
200 | var request = { body: { field: "------" }};
|
201 | form(validate("field").isInt("!!! %s !!!"))(request, {});
|
202 | assert.equal(request.form.errors.length, 1);
|
203 | assert.equal(request.form.errors[0], "!!! field !!!");
|
204 |
|
205 |
|
206 | var request = { body: { field: "50" }};
|
207 | form(validate("field").isInt())(request, {});
|
208 | assert.equal(request.form.errors.length, 0);
|
209 | },
|
210 |
|
211 | 'validate : isLowercase': function() {
|
212 |
|
213 | var request = { body: { field: "FAIL" }};
|
214 | form(validate("field").isLowercase())(request, {});
|
215 | assert.equal(request.form.errors.length, 1);
|
216 | assert.equal(request.form.errors[0], "field contains uppercase letters");
|
217 |
|
218 |
|
219 | var request = { body: { field: "FAIL" }};
|
220 | form(validate("field").isInt("!!! %s !!!"))(request, {});
|
221 | assert.equal(request.form.errors.length, 1);
|
222 | assert.equal(request.form.errors[0], "!!! field !!!");
|
223 |
|
224 |
|
225 | var request = { body: { field: "win" }};
|
226 | form(validate("field").isLowercase())(request, {});
|
227 | assert.equal(request.form.errors.length, 0);
|
228 | },
|
229 |
|
230 | 'validate : isUppercase': function() {
|
231 |
|
232 | var request = { body: { field: "fail" }};
|
233 | form(validate("field").isUppercase())(request, {});
|
234 | assert.equal(request.form.errors.length, 1);
|
235 | assert.equal(request.form.errors[0], "field contains lowercase letters");
|
236 |
|
237 |
|
238 | var request = { body: { field: "fail" }};
|
239 | form(validate("field").isUppercase("!!! %s !!!"))(request, {});
|
240 | assert.equal(request.form.errors.length, 1);
|
241 | assert.equal(request.form.errors[0], "!!! field !!!");
|
242 |
|
243 |
|
244 | var request = { body: { field: "WIN" }};
|
245 | form(validate("field").isUppercase())(request, {});
|
246 | assert.equal(request.form.errors.length, 0);
|
247 | },
|
248 |
|
249 | 'validate : isFloat': function() {
|
250 |
|
251 | var request = { body: { field: "5000" }};
|
252 | form(validate("field").isFloat())(request, {});
|
253 | assert.equal(request.form.errors.length, 1);
|
254 | assert.equal(request.form.errors[0], "field is not a decimal");
|
255 |
|
256 |
|
257 | var request = { body: { field: "5000" }};
|
258 | form(validate("field").isFloat("!!! %s !!!"))(request, {});
|
259 | assert.equal(request.form.errors.length, 1);
|
260 | assert.equal(request.form.errors[0], "!!! field !!!");
|
261 |
|
262 |
|
263 | var request = { body: { field: "5000.00" }};
|
264 | form(validate("field").isFloat())(request, {});
|
265 | assert.equal(request.form.errors.length, 0);
|
266 | },
|
267 |
|
268 | 'validate : notEmpty': function() {
|
269 |
|
270 | var request = { body: { field: " \t" }};
|
271 | form(validate("field").notEmpty())(request, {});
|
272 | assert.equal(request.form.errors.length, 1);
|
273 | assert.equal(request.form.errors[0], "field has no value or is only whitespace");
|
274 |
|
275 |
|
276 | var request = { body: { field: " \t" }};
|
277 | form(validate("field").notEmpty("!!! %s !!!"))(request, {});
|
278 | assert.equal(request.form.errors.length, 1);
|
279 | assert.equal(request.form.errors[0], "!!! field !!!");
|
280 |
|
281 |
|
282 | var request = { body: { field: "win" }};
|
283 | form(validate("field").notEmpty())(request, {});
|
284 | assert.equal(request.form.errors.length, 0);
|
285 | },
|
286 |
|
287 | 'validate : equals': function() {
|
288 |
|
289 | var request = { body: { field: "value" }};
|
290 | form(validate("field").equals("other"))(request, {});
|
291 | assert.equal(request.form.errors.length, 1);
|
292 | assert.equal(request.form.errors[0], "field does not equal other");
|
293 |
|
294 |
|
295 | var request = { body: { field: "value" }};
|
296 | form(validate("field").equals("other", "!!! %s !!!"))(request, {});
|
297 | assert.equal(request.form.errors.length, 1);
|
298 | assert.equal(request.form.errors[0], "!!! field !!!");
|
299 |
|
300 |
|
301 | var request = { body: { field: "value" }};
|
302 | form(validate("field").equals("value"))(request, {});
|
303 | assert.equal(request.form.errors.length, 0);
|
304 |
|
305 |
|
306 |
|
307 | var request = {
|
308 | body: {
|
309 | field1: "value1",
|
310 | field2: "value2"
|
311 | }
|
312 | };
|
313 | form(validate("field1").equals("field::field2"))(request, {});
|
314 | assert.equal(request.form.errors.length, 1);
|
315 | assert.equal(request.form.errors[0], "field1 does not equal value2");
|
316 |
|
317 |
|
318 | var request = {
|
319 | body: {
|
320 | field1: "value",
|
321 | field2: "value"
|
322 | }
|
323 | };
|
324 | form(validate("field1").equals("field::field2"))(request, {});
|
325 | assert.equal(request.form.errors.length, 0);
|
326 |
|
327 |
|
328 | var request = {
|
329 | body: {
|
330 | field1: { deep: "value1"},
|
331 | field2: { deeper: "value2"}
|
332 | }
|
333 | };
|
334 | form(validate("field1.deep").equals("field::field2[deeper]"))(request, {});
|
335 | assert.equal(request.form.errors.length, 1);
|
336 | assert.equal(request.form.errors[0], "field1.deep does not equal value2");
|
337 |
|
338 |
|
339 | var request = {
|
340 | body: {
|
341 | field1: { deep: "value"},
|
342 | field2: { deeper: "value"}
|
343 | }
|
344 | };
|
345 | form(validate("field1[deep]").equals("field::field2.deeper"))(request, {});
|
346 | assert.equal(request.form.errors.length, 0);
|
347 | },
|
348 |
|
349 | 'validate : contains': function() {
|
350 |
|
351 | var request = { body: { field: "value" }};
|
352 | form(validate("field").contains("other"))(request, {});
|
353 | assert.equal(request.form.errors.length, 1);
|
354 | assert.equal(request.form.errors[0], "field does not contain required characters");
|
355 |
|
356 |
|
357 | var request = { body: { field: "value" }};
|
358 | form(validate("field").contains("other", "!!! %s !!!"))(request, {});
|
359 | assert.equal(request.form.errors.length, 1);
|
360 | assert.equal(request.form.errors[0], "!!! field !!!");
|
361 |
|
362 |
|
363 | var request = { body: { field: "value" }};
|
364 | form(validate("field").contains("alu"))(request, {});
|
365 | assert.equal(request.form.errors.length, 0);
|
366 | },
|
367 |
|
368 | 'validate : notContains': function() {
|
369 |
|
370 | var request = { body: { field: "value" }};
|
371 | form(validate("field").notContains("alu"))(request, {});
|
372 | assert.equal(request.form.errors.length, 1);
|
373 | assert.equal(request.form.errors[0], "field contains invalid characters");
|
374 |
|
375 |
|
376 | var request = { body: { field: "value" }};
|
377 | form(validate("field").notContains("alu", "!!! %s !!!"))(request, {});
|
378 | assert.equal(request.form.errors.length, 1);
|
379 | assert.equal(request.form.errors[0], "!!! field !!!");
|
380 |
|
381 |
|
382 | var request = { body: { field: "value" }};
|
383 | form(validate("field").notContains("win"))(request, {});
|
384 | assert.equal(request.form.errors.length, 0);
|
385 | },
|
386 |
|
387 | 'validate : regex/is': function() {
|
388 |
|
389 |
|
390 |
|
391 |
|
392 |
|
393 |
|
394 |
|
395 |
|
396 | var request = { body: { field: "value" }};
|
397 | form(validate("field").regex(/^\d+$/))(request, {});
|
398 | assert.equal(request.form.errors.length, 1);
|
399 | assert.equal(request.form.errors[0], "field has invalid characters");
|
400 |
|
401 |
|
402 | var request = { body: { field: "value" }};
|
403 | form(validate("field").regex(/^\d+$/, "!!! %s !!!"))(request, {});
|
404 | assert.equal(request.form.errors.length, 1);
|
405 | assert.equal(request.form.errors[0], "!!! field !!!");
|
406 |
|
407 |
|
408 | var request = { body: { field: "value" }};
|
409 | form(validate("field").regex("^\d+$"))(request, {});
|
410 | assert.equal(request.form.errors.length, 1);
|
411 | assert.equal(request.form.errors[0], "field has invalid characters");
|
412 |
|
413 |
|
414 | var request = { body: { field: "value" }};
|
415 | form(validate("field").regex("^VALUE$", "i"))(request, {});
|
416 | assert.equal(request.form.errors.length, 0);
|
417 |
|
418 |
|
419 | var request = { body: { field: "value" }};
|
420 | form(validate("field").regex("^\d+$", "!!! %s !!!"))(request, {});
|
421 | assert.equal(request.form.errors.length, 1);
|
422 | assert.equal(request.form.errors[0], "!!! field !!!");
|
423 |
|
424 |
|
425 | var request = { body: { field: "value" }};
|
426 | form(validate("field").regex("^\d+$", "i", "!!! %s !!!"))(request, {});
|
427 | assert.equal(request.form.errors.length, 1);
|
428 | assert.equal(request.form.errors[0], "!!! field !!!");
|
429 |
|
430 |
|
431 |
|
432 | var request = { body: { field: "value" }};
|
433 | form(validate("field").regex(/^value$/))(request, {});
|
434 | assert.equal(request.form.errors.length, 0);
|
435 | },
|
436 |
|
437 | 'validate : notRegex/not': function() {
|
438 |
|
439 |
|
440 |
|
441 |
|
442 |
|
443 |
|
444 |
|
445 |
|
446 | var request = { body: { field: "value" }};
|
447 | form(validate("field").notRegex(/^value$/))(request, {});
|
448 | assert.equal(request.form.errors.length, 1);
|
449 | assert.equal(request.form.errors[0], "field has invalid characters");
|
450 |
|
451 |
|
452 | var request = { body: { field: "value" }};
|
453 | form(validate("field").notRegex(/^value$/, "!!! %s !!!"))(request, {});
|
454 | assert.equal(request.form.errors.length, 1);
|
455 | assert.equal(request.form.errors[0], "!!! field !!!");
|
456 |
|
457 |
|
458 | var request = { body: { field: "value" }};
|
459 | form(validate("field").notRegex("^value$"))(request, {});
|
460 | assert.equal(request.form.errors.length, 1);
|
461 | assert.equal(request.form.errors[0], "field has invalid characters");
|
462 |
|
463 |
|
464 | var request = { body: { field: "value" }};
|
465 | form(validate("field").notRegex("^win$", "i"))(request, {});
|
466 | assert.equal(request.form.errors.length, 0);
|
467 |
|
468 |
|
469 | var request = { body: { field: "value" }};
|
470 | form(validate("field").notRegex("^value$", "!!! %s !!!"))(request, {});
|
471 | assert.equal(request.form.errors.length, 1);
|
472 | assert.equal(request.form.errors[0], "!!! field !!!");
|
473 |
|
474 |
|
475 | var request = { body: { field: "value" }};
|
476 | form(validate("field").notRegex("^value$", "i", "!!! %s !!!"))(request, {});
|
477 | assert.equal(request.form.errors.length, 1);
|
478 | assert.equal(request.form.errors[0], "!!! field !!!");
|
479 |
|
480 |
|
481 | var request = { body: { field: "value" }};
|
482 | form(validate("field").notRegex(/^win$/))(request, {});
|
483 | assert.equal(request.form.errors.length, 0);
|
484 | },
|
485 |
|
486 | 'validation : minLength': function() {
|
487 |
|
488 | var request = { body: { field: "value" }};
|
489 | form(validate("field").minLength(10))(request, {});
|
490 | assert.equal(request.form.errors.length, 1);
|
491 | assert.equal(request.form.errors[0], "field is too short");
|
492 |
|
493 |
|
494 | var request = { body: { field: "value" }};
|
495 | form(validate("field").minLength(10, "!!! %s !!!"))(request, {});
|
496 | assert.equal(request.form.errors.length, 1);
|
497 | assert.equal(request.form.errors[0], "!!! field !!!");
|
498 |
|
499 |
|
500 | var request = { body: { field: "value" }};
|
501 | form(validate("field").minLength(1))(request, {});
|
502 | assert.equal(request.form.errors.length, 0);
|
503 | },
|
504 |
|
505 | 'validation : isString()': function() {
|
506 | var request = { body: { username: 'adasds@example.com', password: { 'somevalue': '1' } }};
|
507 | form(validate('password', 'Password')
|
508 | .required()
|
509 | .isString()
|
510 | .minLength(10, '%s must be a minimum of 10 characters')
|
511 | .maxLength(256, '%s must be a maximum of 256 characters'))(request, {});
|
512 | assert.ok(!request.form.isValid);
|
513 | assert.strictEqual(request.form.errors[0], 'Password is not a string');
|
514 | },
|
515 |
|
516 | 'validation : maxLength': function() {
|
517 |
|
518 | var request = { body: { field: "value" }};
|
519 | form(validate("field").maxLength(1))(request, {});
|
520 | assert.equal(request.form.errors.length, 1);
|
521 | assert.equal(request.form.errors[0], "field is too long");
|
522 |
|
523 |
|
524 | var request = { body: { field: "value" }};
|
525 | form(validate("field").maxLength(1, "!!! %s !!!"))(request, {});
|
526 | assert.equal(request.form.errors.length, 1);
|
527 | assert.equal(request.form.errors[0], "!!! field !!!");
|
528 |
|
529 |
|
530 | var request = { body: { field: "value" }};
|
531 | form(validate("field").maxLength(5))(request, {});
|
532 | assert.equal(request.form.errors.length, 0);
|
533 | },
|
534 |
|
535 | 'validation : required': function() {
|
536 |
|
537 | var request = { body: {} };
|
538 | form(validate("field").required())(request, {});
|
539 | assert.equal(request.form.errors.length, 1);
|
540 | assert.equal(request.form.errors[0], "field is required");
|
541 |
|
542 |
|
543 | var request = { body: { field: "value" }};
|
544 | form(validate("field").required("value", "!!! %s !!!"))(request, {});
|
545 | assert.equal(request.form.errors.length, 1);
|
546 | assert.equal(request.form.errors[0], "!!! field !!!");
|
547 |
|
548 |
|
549 | var request = { body: { field: "5000.00" }};
|
550 | form(validate("field").required())(request, {});
|
551 | assert.equal(request.form.errors.length, 0);
|
552 |
|
553 |
|
554 |
|
555 | var request = { body: {
|
556 | fieldEmpty: "",
|
557 | fieldUndefined: undefined,
|
558 | fieldNull: null
|
559 | }};
|
560 | form(
|
561 | validate("fieldEmpty").is(/whatever/),
|
562 | validate("fieldUndefined").is(/whatever/),
|
563 | validate("fieldNull").is(/whatever/),
|
564 | validate("fieldMissing").is(/whatever/)
|
565 | )(request, {});
|
566 | assert.equal(request.form.errors.length, 0);
|
567 | },
|
568 |
|
569 | 'validation : custom': function() {
|
570 | var request;
|
571 |
|
572 |
|
573 | request = { body: { field: "value" }};
|
574 | form(validate("field").custom(function(value) {
|
575 | throw new Error();
|
576 | }))(request, {});
|
577 | assert.equal(request.form.errors.length, 1);
|
578 | assert.equal(request.form.errors[0], "field is invalid");
|
579 |
|
580 |
|
581 | request = { body: { field: "value" }};
|
582 | form(validate("field").custom(function(value) {
|
583 | throw new Error();
|
584 | }, "!!! %s !!!"))(request, {});
|
585 | assert.equal(request.form.errors.length, 1);
|
586 | assert.equal(request.form.errors[0], "!!! field !!!");
|
587 |
|
588 |
|
589 | request = { body: { field: "value" }};
|
590 | form(validate("field").custom(function(value) {
|
591 | throw new Error("Radical %s");
|
592 | }))(request, {});
|
593 | assert.equal(request.form.errors.length, 1);
|
594 | assert.equal(request.form.errors[0], "Radical field");
|
595 |
|
596 |
|
597 | request = { body: { field: "value" }};
|
598 | form(validate("field").custom(function(value) {}))(request, {});
|
599 | assert.equal(request.form.errors.length, 0);
|
600 |
|
601 |
|
602 | request = { body: { field1: "value1", field2: "value2" }};
|
603 | form(validate("field1").custom(function(value, formData) {
|
604 | assert.equal("value1", value);
|
605 | assert.ok(formData);
|
606 | assert.equal("value1", formData.field1);
|
607 | assert.equal("value2", formData.field2);
|
608 | throw new Error("This is a custom error thrown for %s.");
|
609 | }))(request, {});
|
610 | assert.equal(request.form.errors.length, 1);
|
611 | },
|
612 |
|
613 | "validation: custom : async": function(done) {
|
614 | var request = { body: { field1: "value1", field2: "value2" }};
|
615 | var next = function next() {
|
616 | assert.strictEqual(request.form.isValid, false);
|
617 | assert.strictEqual(request.form.errors.length, 1);
|
618 | assert.strictEqual(request.form.errors[0], 'Invalid field1');
|
619 | done();
|
620 | };
|
621 |
|
622 | form(validate("field1").custom(function(value, source, callback) {
|
623 | process.nextTick(function() {
|
624 | assert.strictEqual(value, 'value1');
|
625 | callback(new Error("Invalid %s"));
|
626 | });
|
627 | }))(request, {}, next);
|
628 | },
|
629 |
|
630 | "validation : custom : async : success": function(done) {
|
631 | var request = { body: { field1: "value1", field2: "value2" }};
|
632 | var callbackCalled = false;
|
633 | var next = function next() {
|
634 | assert.strictEqual(callbackCalled, true);
|
635 | assert.strictEqual(request.form.isValid, true);
|
636 | assert.strictEqual(request.form.errors.length, 0);
|
637 | done();
|
638 | };
|
639 | form(validate("field1").custom(function(value, source, callback) {
|
640 | process.nextTick(function() {
|
641 | assert.strictEqual(value, 'value1');
|
642 | callbackCalled = true;
|
643 | callback(null);
|
644 | });
|
645 | }))(request, {}, next);
|
646 | },
|
647 |
|
648 | "validation : custom : async : chaining": function(done) {
|
649 | var request = { body: { field1: "value1", field2: "value2" }};
|
650 | var callbackCalled = 0;
|
651 | var next = function next() {
|
652 | assert.strictEqual(callbackCalled, 2);
|
653 | assert.strictEqual(request.form.isValid, false);
|
654 | assert.strictEqual(request.form.errors.length, 2);
|
655 | assert.strictEqual(request.form.errors[0], 'Fail! field1');
|
656 | assert.strictEqual(request.form.errors[1], 'yes sync custom funcs still work !! field1');
|
657 | done();
|
658 | };
|
659 |
|
660 | form(validate("field1")
|
661 | .custom(function(value, source, callback) {
|
662 | process.nextTick(function() {
|
663 | ++callbackCalled;
|
664 | callback(null);
|
665 | });
|
666 | })
|
667 | .custom(function(value, source, callback) {
|
668 | process.nextTick(function() {
|
669 | ++callbackCalled;
|
670 | callback(new Error('Fail! %s'));
|
671 | });
|
672 | })
|
673 | .custom(function(value, source) {
|
674 | throw new Error('yes sync custom funcs still work !! %s');
|
675 | })
|
676 | )(request, {}, next);
|
677 | },
|
678 |
|
679 | "validation : custom : async : multiple fields": function(done) {
|
680 | var request = { body: { field1: "value1", field2: "value2" }};
|
681 | var callbackCalled = 0;
|
682 | var next = function next() {
|
683 | assert.strictEqual(callbackCalled, 2);
|
684 | assert.strictEqual(request.form.isValid, false);
|
685 | assert.strictEqual(request.form.errors.length, 2);
|
686 | assert.strictEqual(request.form.errors[0], 'field1 error');
|
687 | assert.strictEqual(request.form.errors[1], 'field2 error');
|
688 | done();
|
689 | };
|
690 | form(
|
691 | validate("field1").custom(function(value, source, callback) {
|
692 | process.nextTick(function() {
|
693 | ++callbackCalled;
|
694 | assert.strictEqual(value, 'value1')
|
695 | callback(new Error('%s error'));
|
696 | });
|
697 | }),
|
698 | validate("field2").custom(function(value, source, callback) {
|
699 | process.nextTick(function() {
|
700 | ++callbackCalled;
|
701 | assert.strictEqual(value, 'value2');
|
702 | callback(new Error('%s error'));
|
703 | });
|
704 | })
|
705 | )(request, {}, next);
|
706 | },
|
707 |
|
708 | "validation : request.form property-pollution": function() {
|
709 | var request = { body: { }};
|
710 | form()(request, {});
|
711 | assert.equal(request.form.errors.length, 0);
|
712 | assert.equal('{}', JSON.stringify(request.form));
|
713 | },
|
714 |
|
715 | "validation : complex properties": function() {
|
716 | var request = { body: { field: { inner: "value", even: { more: { inner: "value" }}}}};
|
717 | form(
|
718 | validate("field[inner]").required().equals("value"),
|
719 | validate("field[inner]").required().equals("fail"),
|
720 | validate("field[even][more][inner]").required().equals("value"),
|
721 | validate("field[even][more][inner]").required().equals("fail")
|
722 | )(request, {});
|
723 | assert.equal(request.form.errors.length, 2);
|
724 | }
|
725 | };
|