]> Dogcows Code - chaz/p5-CGI-Ex/blob - t/1_validate_05_types.t
d45041f4ff891b3b465def7f109d7ca6869b3366
[chaz/p5-CGI-Ex] / t / 1_validate_05_types.t
1 # -*- Mode: Perl; -*-
2
3 =head1 NAME
4
5 1_validate_05_types.t - Test CGI::Ex::Validate's ability to do multitudinous types of validate
6
7 =cut
8
9 use strict;
10 use Test::More tests => 112;
11
12 use_ok('CGI::Ex::Validate');
13
14 my $v;
15 my $e;
16
17 sub validate { scalar &CGI::Ex::Validate::validate(@_) }
18
19 ### required
20 $v = {foo => {required => 1}};
21 $e = validate({}, $v);
22 ok($e);
23
24 $e = validate({foo => 1}, $v);
25 ok(! $e);
26
27 ### validate_if
28 $v = {foo => {required => 1, validate_if => 'bar'}};
29 $e = validate({}, $v);
30 ok(! $e);
31
32 $e = validate({bar => 1}, $v);
33 ok($e);
34
35 $v = {text1 => {required => 1, validate_if => 'text2 was_valid'}, text2 => {validate_if => 'text3'}};
36 $e = validate({}, $v);
37 ok(! $e, "Got no error on validate_if with was_valid");
38 $e = validate({text2 => 1}, $v);
39 ok(! $e, "Got no error on validate_if with was_valid with non-validated data");
40 $e = validate({text3 => 1}, $v);
41 ok(! $e, "Got no error on validate_if with was_valid with validated - bad data");
42 $e = validate({text2 => 1, text3 => 1}, $v);
43 ok(! $e, "Got error on validate_if with was_valid with validated - good data");
44 $e = validate({text1 => 1, text2 => 1, text3 => 1}, $v);
45 ok(! $e, "No error on validate_if with was_valid with validated - good data");
46
47 $v = {text1 => {required => 1, validate_if => 'text2 had_error'}, text2 => {required => 1}};
48 $e = validate({}, $v);
49 ok($e, "Got error on validate_if with had_error");
50 $e = validate({text2 => 1}, $v);
51 ok(! $e, "No error on validate_if with had_error and bad_data");
52 $e = validate({text1 => 1}, $v);
53 ok($e && ! $e->as_hash->{text1_error}, "No error on validate_if with had_error and good data");
54
55
56 ### required_if
57 $v = {foo => {required_if => 'bar'}};
58 $e = validate({}, $v);
59 ok(! $e);
60
61 $e = validate({bar => 1}, $v);
62 ok($e);
63
64 ### max_values
65 $v = {foo => {required => 1}};
66 $e = validate({foo => [1,2]}, $v);
67 ok($e);
68
69 $v = {foo => {max_values => 2}};
70 $e = validate({}, $v);
71 ok(! $e);
72
73 $e = validate({foo => "str"}, $v);
74 ok(! $e);
75
76 $e = validate({foo => [1]}, $v);
77 ok(! $e);
78
79 $e = validate({foo => [1,2]}, $v);
80 ok(! $e);
81
82 $e = validate({foo => [1,2,3]}, $v);
83 ok($e);
84
85 ### min_values
86 $v = {foo => {min_values => 3, max_values => 10}};
87 $e = validate({foo => [1,2,3]}, $v);
88 ok(! $e);
89
90 $e = validate({foo => [1,2,3,4]}, $v);
91 ok(! $e);
92
93 $e = validate({foo => [1,2]}, $v);
94 ok($e);
95
96 $e = validate({foo => "str"}, $v);
97 ok($e);
98
99 $e = validate({}, $v);
100 ok($e);
101
102 ### enum
103 $v = {foo => {enum => [1, 2, 3]}, bar => {enum => "1 || 2||3"}};
104 $e = validate({}, $v);
105 ok($e);
106
107 $e = validate({foo => 1, bar => 1}, $v);
108 ok(! $e);
109
110 $e = validate({foo => 1, bar => 2}, $v);
111 ok(! $e);
112
113 $e = validate({foo => 1, bar => 3}, $v);
114 ok(! $e);
115
116 $e = validate({foo => 1, bar => 4}, $v);
117 ok($e);
118
119 # equals
120 $v = {foo => {equals => 'bar'}};
121 $e = validate({}, $v);
122 ok(! $e);
123
124 $e = validate({foo => 1}, $v);
125 ok($e);
126
127 $e = validate({bar => 1}, $v);
128 ok($e);
129
130 $e = validate({foo => 1, bar => 2}, $v);
131 ok($e);
132
133 $e = validate({foo => 1, bar => 1}, $v);
134 ok(! $e);
135
136 $v = {foo => {equals => '"bar"'}};
137 $e = validate({foo => 1, bar => 1}, $v);
138 ok($e);
139
140 $e = validate({foo => 'bar', bar => 1}, $v);
141 ok(! $e);
142
143 ### min_len
144 $v = {foo => {min_len => 10}};
145 $e = validate({}, $v);
146 ok($e);
147
148 $e = validate({foo => ""}, $v);
149 ok($e);
150
151 $e = validate({foo => "123456789"}, $v);
152 ok($e);
153
154 $e = validate({foo => "1234567890"}, $v);
155 ok(! $e);
156
157 ### max_len
158 $v = {foo => {max_len => 10}};
159 $e = validate({}, $v);
160 ok(! $e);
161
162 $e = validate({foo => ""}, $v);
163 ok(! $e);
164
165 $e = validate({foo => "1234567890"}, $v);
166 ok(! $e);
167
168 $e = validate({foo => "12345678901"}, $v);
169 ok($e);
170
171 ### match
172 $v = {foo => {match => qr/^\w+$/}};
173 $e = validate({foo => "abc"}, $v);
174 ok(! $e);
175
176 $e = validate({foo => "abc."}, $v);
177 ok($e);
178
179 $v = {foo => {match => [qr/^\w+$/, qr/^[a-z]+$/]}};
180 $e = validate({foo => "abc"}, $v);
181 ok(! $e);
182
183 $e = validate({foo => "abc1"}, $v);
184 ok($e);
185
186 $v = {foo => {match => 'm/^\w+$/'}};
187 $e = validate({foo => "abc"}, $v);
188 ok(! $e);
189
190 $e = validate({foo => "abc."}, $v);
191 ok($e);
192
193 $v = {foo => {match => 'm/^\w+$/ || m/^[a-z]+$/'}};
194 $e = validate({foo => "abc"}, $v);
195 ok(! $e);
196
197 $e = validate({foo => "abc1"}, $v);
198 ok($e);
199
200 $v = {foo => {match => '! m/^\w+$/'}};
201 $e = validate({foo => "abc"}, $v);
202 ok($e);
203
204 $e = validate({foo => "abc."}, $v);
205 ok(! $e);
206
207 $v = {foo => {match => 'm/^\w+$/'}};
208 $e = validate({}, $v);
209 ok($e);
210
211 $v = {foo => {match => '! m/^\w+$/'}};
212 $e = validate({}, $v);
213 ok(! $e);
214
215 ### compare
216 $v = {foo => {compare => '> 0'}};
217 $e = validate({}, $v);
218 ok($e);
219 $v = {foo => {compare => '== 0'}};
220 $e = validate({}, $v);
221 ok(! $e);
222 $v = {foo => {compare => '< 0'}};
223 $e = validate({}, $v);
224 ok($e);
225
226 $v = {foo => {compare => '> 10'}};
227 $e = validate({foo => 11}, $v);
228 ok(! $e);
229 $e = validate({foo => 10}, $v);
230 ok($e);
231
232 $v = {foo => {compare => '== 10'}};
233 $e = validate({foo => 11}, $v);
234 ok($e);
235 $e = validate({foo => 10}, $v);
236 ok(! $e);
237
238 $v = {foo => {compare => '< 10'}};
239 $e = validate({foo => 9}, $v);
240 ok(! $e);
241 $e = validate({foo => 10}, $v);
242 ok($e);
243
244 $v = {foo => {compare => '>= 10'}};
245 $e = validate({foo => 10}, $v);
246 ok(! $e);
247 $e = validate({foo => 9}, $v);
248 ok($e);
249
250 $v = {foo => {compare => '!= 10'}};
251 $e = validate({foo => 10}, $v);
252 ok($e);
253 $e = validate({foo => 9}, $v);
254 ok(! $e);
255
256 $v = {foo => {compare => '<= 10'}};
257 $e = validate({foo => 11}, $v);
258 ok($e);
259 $e = validate({foo => 10}, $v);
260 ok(! $e);
261
262
263 $v = {foo => {compare => 'gt ""'}};
264 $e = validate({}, $v);
265 ok($e);
266 $v = {foo => {compare => 'eq ""'}};
267 $e = validate({}, $v);
268 ok(! $e);
269 $v = {foo => {compare => 'lt ""'}};
270 $e = validate({}, $v);
271 ok($e); # 68
272
273 $v = {foo => {compare => 'gt "c"'}};
274 $e = validate({foo => 'd'}, $v);
275 ok(! $e);
276 $e = validate({foo => 'c'}, $v);
277 ok($e);
278
279 $v = {foo => {compare => 'eq c'}};
280 $e = validate({foo => 'd'}, $v);
281 ok($e);
282 $e = validate({foo => 'c'}, $v);
283 ok(! $e);
284
285 $v = {foo => {compare => 'lt c'}};
286 $e = validate({foo => 'b'}, $v);
287 ok(! $e);
288 $e = validate({foo => 'c'}, $v);
289 ok($e);
290
291 $v = {foo => {compare => 'ge c'}};
292 $e = validate({foo => 'c'}, $v);
293 ok(! $e);
294 $e = validate({foo => 'b'}, $v);
295 ok($e);
296
297 $v = {foo => {compare => 'ne c'}};
298 $e = validate({foo => 'c'}, $v);
299 ok($e);
300 $e = validate({foo => 'b'}, $v);
301 ok(! $e);
302
303 $v = {foo => {compare => 'le c'}};
304 $e = validate({foo => 'd'}, $v);
305 ok($e);
306 $e = validate({foo => 'c'}, $v);
307 ok(! $e); # 80
308
309 ### sql
310 ### can't really do anything here without prompting for a db connection
311
312 ### custom
313 my $n = 1;
314 $v = {foo => {custom => $n}};
315 $e = validate({}, $v);
316 ok(! $e);
317 $e = validate({foo => "str"}, $v);
318 ok(! $e);
319
320 $n = 0;
321 $v = {foo => {custom => $n}};
322 $e = validate({}, $v);
323 ok($e);
324 $e = validate({foo => "str"}, $v);
325 ok($e);
326
327 $n = sub { my ($key, $val) = @_; return defined($val) ? 1 : 0};
328 $v = {foo => {custom => $n}};
329 $e = validate({}, $v);
330 ok($e);
331 $e = validate({foo => "str"}, $v);
332 ok(! $e);
333
334 ### type checks
335 $v = {foo => {type => 'ip'}};
336 $e = validate({foo => '209.108.25'}, $v);
337 ok($e);
338 $e = validate({foo => '209.108.25.111'}, $v);
339 ok(! $e);
340
341 ### min_in_set checks
342 $v = {foo => {min_in_set => '2 of foo bar baz', max_values => 5}};
343 $e = validate({foo => 1}, $v);
344 ok($e);
345 $e = validate({foo => 1, bar => 1}, $v);
346 ok(! $e);
347 $e = validate({foo => 1, bar => ''}, $v); # empty string doesn't count as value
348 ok($e);
349 $e = validate({foo => 1, bar => 0}, $v);
350 ok(! $e);
351 $e = validate({foo => [1, 2]}, $v);
352 ok(! $e);
353 $e = validate({foo => [1]}, $v);
354 ok($e);
355 $v = {foo => {min_in_set => '2 foo bar baz', max_values => 5}};
356 $e = validate({foo => 1, bar => 1}, $v);
357 ok(! $e);
358
359 ### max_in_set checks
360 $v = {foo => {max_in_set => '2 of foo bar baz', max_values => 5}};
361 $e = validate({foo => 1}, $v);
362 ok(! $e);
363 $e = validate({foo => 1, bar => 1}, $v);
364 ok(! $e);
365 $e = validate({foo => 1, bar => 1, baz => 1}, $v);
366 ok($e);
367 $e = validate({foo => [1, 2]}, $v);
368 ok(! $e);
369 $e = validate({foo => [1, 2, 3]}, $v);
370 ok($e);
371
372 ### validate_if revisited (but negated - uses max_in_set)
373 $v = {foo => {required => 1, validate_if => '! bar'}};
374 $e = validate({}, $v);
375 ok($e);
376
377 $e = validate({bar => 1}, $v);
378 ok(! $e);
379
380 ### default value
381 my $f = {};
382 $v = {foo => {required => 1, default => 'hmmmm'}};
383 $e = validate($f, $v);
384 ok(! $e);
385
386 ok($f->{foo} && $f->{foo} eq 'hmmmm');
387
This page took 0.044399 seconds and 3 git commands to generate.