UNPKG

6.39 kBJavaScriptView Raw
1var assert = require("assert")
2 , form = require("../index")
3 , field = form.field;
4
5module.exports = {
6
7 "field : arrays": function () {
8 // Array transformations.
9 var request = {
10 body: {
11 field1: "",
12 field2: "Hello!",
13 field3: ["Alpacas?", "Llamas!!?", "Vicunas!", "Guanacos!!!"]
14 }
15 };
16 form(
17 field("fieldx").array(),
18 field("field1").array(),
19 field("field2").array(),
20 field("field3").array()
21 )(request, {});
22 assert.strictEqual(Array.isArray(request.form.fieldx), true);
23 assert.strictEqual(request.form.fieldx.length, 0);
24 assert.strictEqual(Array.isArray(request.form.field1), true);
25 assert.strictEqual(request.form.field1.length, 0);
26 assert.strictEqual(request.form.field2[0], "Hello!");
27 assert.strictEqual(request.form.field2.length, 1);
28 assert.strictEqual(request.form.field3[0], "Alpacas?");
29 assert.strictEqual(request.form.field3[1], "Llamas!!?");
30 assert.strictEqual(request.form.field3[2], "Vicunas!");
31 assert.strictEqual(request.form.field3[3], "Guanacos!!!");
32 assert.strictEqual(request.form.field3.length, 4);
33
34 // No array flag!
35 var request = { body: { field: ["red", "blue"] } };
36 form(field("field"))(request, {});
37 assert.strictEqual(request.form.field, "red");
38
39 // Iterate and filter array.
40 var request = { body: { field: ["david", "stephen", "greg"] } };
41 form(field("field").array().toUpper())(request, {});
42 assert.strictEqual(request.form.field[0], "DAVID");
43 assert.strictEqual(request.form.field[1], "STEPHEN");
44 assert.strictEqual(request.form.field[2], "GREG");
45 assert.strictEqual(request.form.field.length, 3);
46
47 // Iterate and validate array
48 var request = { body: { field: [1, 2, "f"] } };
49 form(field("field").array().isInt())(request, {});
50 assert.equal(request.form.errors.length, 1);
51 assert.equal(request.form.errors[0], "field is not an integer");
52 },
53 "field : nesting": function () {
54 // Nesting with dot notation
55 var request = {
56 body: {
57 field: {
58 nest: "wow",
59 child: "4",
60 gb: {
61 a: "a",
62 b: "aaaa",
63 c: {
64 fruit: "deeper",
65 must: {
66 go: "deeperrrr"
67 }
68 }
69 }
70 }
71
72 }
73 };
74 form(
75 field("field.nest").toUpper(),
76 field("field.child").toUpper(),
77 field("field.gb.a").toUpper(),
78 field("field.gb.b").toUpper(),
79 field("field.gb.c.fruit").toUpper(),
80 field("field.gb.c.must.go").toUpper()
81 )(request, {});
82 assert.strictEqual(request.form.field.nest, "WOW");
83 assert.strictEqual(request.form.field.child, "4");
84 assert.strictEqual(request.form.field.gb.a, "A");
85 assert.strictEqual(request.form.field.gb.b, "AAAA");
86 assert.strictEqual(request.form.field.gb.c.fruit, "DEEPER");
87 assert.strictEqual(request.form.field.gb.c.must.go, "DEEPERRRR");
88
89 // Nesting with square-bracket notation
90 var request = {
91 body: {
92 field: {
93 nest: "wow",
94 child: "4",
95 gb: {
96 a: "a",
97 b: "aaaa",
98 c: {
99 fruit: "deeper",
100 must: {
101 go: "deeperrrr"
102 }
103 }
104 }
105 }
106
107 }
108 };
109 form(
110 field("field[nest]").toUpper(),
111 field("field[child]").toUpper(),
112 field("field[gb][a]").toUpper(),
113 field("field[gb][b]").toUpper(),
114 field("field[gb][c][fruit]").toUpper(),
115 field("field[gb][c][must][go]").toUpper()
116 )(request, {});
117 assert.strictEqual(request.form.field.nest, "WOW");
118 assert.strictEqual(request.form.field.child, "4");
119 assert.strictEqual(request.form.field.gb.a, "A");
120 assert.strictEqual(request.form.field.gb.b, "AAAA");
121 assert.strictEqual(request.form.field.gb.c.fruit, "DEEPER");
122 assert.strictEqual(request.form.field.gb.c.must.go, "DEEPERRRR");
123 },
124
125 "field : filter/validate combo ordering": function () {
126 // Can arrange filter and validate procs in any order.
127 var request = {
128 body: {
129 field1: " whatever ",
130 field2: " some thing "
131 }
132 };
133 form(
134 field("field1").trim().toUpper().maxLength(5),
135 field("field2").minLength(12).trim()
136 )(request, {});
137 assert.strictEqual(request.form.field1, "WHATEVER");
138 assert.strictEqual(request.form.field2, "some thing");
139 assert.equal(request.form.errors.length, 1);
140 assert.equal(request.form.errors[0], "field1 is too long");
141 },
142
143 "field : autoTrim": function () {
144 // Auto-trim declared fields.
145 form.configure({ autoTrim: true });
146 var request = { body: { field: " whatever " } };
147 form(field("field"))(request, {});
148 assert.strictEqual(request.form.field, "whatever");
149 form.configure({ autoTrim: false });
150 },
151
152 "field : passThrough": function () {
153 // request.form gets all values from sources.
154 form.configure({ passThrough: true });
155 var request = {
156 body: {
157 field1: "fdsa",
158 field2: "asdf"
159 }
160 };
161 form(field("field1"))(request, {});
162 assert.strictEqual(request.form.field1, "fdsa");
163 assert.strictEqual(request.form.field2, "asdf");
164
165 // request.form only gets declared fields.
166 form.configure({ passThrough: false });
167 var request = { body: {
168 field1: "fdsa",
169 field2: "asdf"
170 } };
171 form(field("field1"))(request, {});
172 assert.strictEqual(request.form.field1, "fdsa");
173 assert.strictEqual(typeof request.form.field2, "undefined");
174 },
175
176 "form : getErrors() gives full map": function() {
177 var request = {
178 body: {
179 field0: "win",
180 field1: "fail",
181 field2: "fail",
182 field3: "fail"
183 }
184 };
185 form(
186 field("field0").equals("win"),
187 field("field1").isEmail(),
188 field("field2").isEmail().isUrl(),
189 field("field3").isEmail().isUrl().isIP()
190 )(request, {});
191 assert.equal(request.form.isValid, false);
192 assert.equal(request.form.errors.length, 6);
193 assert.equal(typeof request.form.getErrors().field0, "undefined");
194 assert.equal(request.form.getErrors().field1.length, 1);
195 assert.equal(request.form.getErrors().field2.length, 2);
196 assert.equal(request.form.getErrors().field3.length, 3);
197 }
198
199}
\No newline at end of file