File: 99-battery.t

package info (click to toggle)
libvalidation-class-perl 7.900057-1
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 1,572 kB
  • ctags: 355
  • sloc: perl: 21,493; makefile: 2
file content (166 lines) | stat: -rw-r--r-- 4,385 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
use Test::More tests => 17;

package MyVal;

use Validation::Class;

# declare validation rules
mixin 'basic' => {
    required   => 1,
    min_length => 1,
    max_length => 255,
    filters    => ['lowercase', 'alphanumeric']
};

mixin 'validation' => {};

field 'login' => {
    mixin      => 'basic',
    label      => 'user login',
    error      => 'login invalid',
    validation => sub {
        my ($self, $this, $fields) = @_;
        return $this->{value} eq 'admin' ? 1 : 0;
      }
};

field 'password' => {
    mixin      => 'basic',
    label      => 'user password',
    error      => 'password invalid',
    validation => sub {
        my ($self, $this, $fields) = @_;
        return $this->{value} eq 'pass' ? 1 : 0;
      }
};

field 'something' => {mixin => ['basic', 'validation']};

package main;

# create instance
my $v = MyVal->new;
ok $v, 'instance created';

# verify fields received mixins
ok defined $v->fields->{login}->{required}
  && defined $v->fields->{login}->{min_length}
  && defined $v->fields->{login}->{max_length},
  'login field received mixin';
ok defined $v->fields->{password}->{required}
  && defined $v->fields->{password}->{min_length}
  && defined $v->fields->{password}->{max_length},
  'password field received mixin';

# check attributes
ok $v->params, 'params attr ok';
ok $v->fields, 'fields attr ok';

# ok $v->mixins,  'mixins attr ok'; - DEPRECATED
ok $v->proto->mixins, 'mixins attr ok';

# ok $v->filters, 'filters attr ok'; - DEPRECATED
ok $v->proto->filters, 'filters attr ok';

# ok $v->types,   'types attr ok'; - DEPRECATED
# ok $v->proto->types,   'types attr ok';

# process field with multiple mixins
ok defined $v->fields->{something}->{required}
  && defined $v->fields->{something}->{min_length}
  && defined $v->fields->{something}->{max_length},
  'something field generated from multiple mixins';

# define grouped fields
$v->fields->{'auth.login'} = {
    mixin      => 'basic',
    label      => 'user login',
    error      => 'login invalid',
    validation => sub {
        my ($self, $this, $fields) = @_;
        return $this->{value} eq 'admin' ? 1 : 0;
      }
};

$v->fields->{'auth.password'} = {
    mixin      => 'basic',
    label      => 'user password',
    error      => 'password invalid',
    validation => sub {
        my ($self, $this, $fields) = @_;
        return $this->{value} eq 'pass' ? 1 : 0;
      }
};

$v->fields->{'user.name'} = {
    mixin      => 'basic',
    label      => 'user name',
    error      => 'invalid name',
    validation => sub {
        my ($self, $this, $fields) = @_;
        return 1;
      }
};

$v->fields->{'user.phone'} = {
    mixin      => 'basic',
    label      => 'user phone',
    error      => 'phone invalid',
    validation => sub {
        my ($self, $this, $fields) = @_;
        return 0;
      }
};

$v->fields->{'user.email'} = {
    mixin      => 'basic',
    label      => 'user email',
    error      => 'email invalid',
    validation => sub {
        my ($self, $this, $fields) = @_;
        return 1;
      }
};

package main;

my $params = {
    login    => 'admin1%^&%&^%^%&',
    password => 'pass@@@#$#%$^',
    name     => 'al newkirk',
    phone    => '2155551212',
    email    => 'awncorp2cpan.org'
};

$v = MyVal->new(params => $params, fields => $v->fields->hash);

# params set at new function
ok scalar(keys %{$v->params}), 'params have been set at instantiation';

# error class exists
ok !$v->error_count, 'error count reporting';

# validate login only
ok !$v->validate({login => 'auth.login'}), 'login field failed as expected';
ok $v->error_count == 1, 'error count accurate';
ok $v->errors_to_string eq 'login invalid',
  'error messages and error class to_string method works';

# check formatting
ok $v->params->{login}    eq 'admin1', 'login formatting worked';
ok $v->params->{password} eq 'pass',   'password formatting worked';

# process common password confirmation
$v->fields->{'password_cfm'} = {
    mixin_field => 'password',
    default     => 'pass',
    validation  => sub {
        my ($self, $this, $params) = @_;
        return $this->{value} eq $params->{password} ? 1 : 0;
      }
};

$v = MyVal->new(params => $v->params->hash, fields => $v->fields->hash);

ok $v->validate('password'), 'password field validates';
ok $v->validate('password', 'password_cfm'), 'password confirmation validates';