The Perl and Raku Conference 2025: Greenville, South Carolina - June 27-29 Learn more

#!perl
use strict;
subtest test_required_constructor_args => sub {
my %args = (
params => { a => 1 },
rules => { options => {}, prepare => {} },
css_error_class => 'foo',
errors_hash => 'joined',
);
for my $key ( sort keys %args ) {
my %args = %args;
delete $args{$key};
like exception { Validator->new(%args) },
qr/Missing required arguments: $key/,
"constructor dies as expected when '$key' is missing";
}
};
subtest test_validator => sub {
my %args = (
params => {
foo => " some string ",
bar => "sksadukqpc"
},
rules => {
options => { stripwhite => 1 },
prepare => {
foo => { validator => 'String' },
bar => {
validator => {
class => 'PasswordPolicy',
options =>
{ minlength => 20, disabled => { username => 1, } }
}
}
}
},
css_error_class => 'foo',
errors_hash => 'joined',
);
my $data = Validator->new(%args);
cmp_deeply $data,
methods(
valid => 0,
values => { foo => "some string", bar => "sksadukqpc" },
css => { bar => "foo" },
errors => {
bar =>
"Wrong length (it should be long at least 20 characters). No special characters. No digits in the password. No mixed case"
},
),
"testing one good and one bad value with joined errors_hash and css_error_class 'foo'";
$args{css_error_class} = 'invalid';
$args{errors_hash} = 'arrayref';
$data = Validator->new(%args);
cmp_deeply $data,
methods(
valid => 0,
values => { foo => "some string", bar => "sksadukqpc" },
css => { bar => "invalid" },
errors => {
bar => [
"Wrong length (it should be long at least 20 characters)",
"No special characters",
"No digits in the password",
"No mixed case"
]
},
),
"testing one good and one bad value with arrayref errors_hash and css_error_class 'invalid'";
$args{params}{bar} = "ahM7feeTho9oof4Zeefoolohcoolo4(";
$data = Validator->new(%args);
cmp_deeply $data,
methods(
valid => 1,
values =>
{ foo => "some string", bar => "ahM7feeTho9oof4Zeefoolohcoolo4(" },
),
"testing good values should have no 'css' or 'errors'";
};
done_testing;