use strict;
$^W = 1;
use Test::More tests => 18;
use Data::FormValidator;
my %code_results = ( );
my $input_hashref = { };
my $input_profile = {
dependencies => {
cc_type => sub {
my $dfv = shift;
my $type = shift;
return [ 'cc_cvv' ] if ($type eq "VISA" || $type eq "MASTERCARD");
return [ ];
},
code_checker => sub {
my($dfv, $val) = @_;
$code_results{'code_called'} = 1;
$code_results{'num_args'} = @_;
$code_results{'value'} = $val;
$code_results{'dfv_obj'} = $dfv;
return [ ];
},
},
};
my $validator = Data::FormValidator->new({default => $input_profile});
my $result;
##
## Validate a coderef dependency
##
## Check that the code actually gets called.
#############################################################################
$input_hashref->{code_checker} = 'test';
$result = undef;
eval { $result = $validator->check($input_hashref, 'default'); };
ok(!$@, "checking that dependency coderef is called");
ok($code_results{code_called}, " code was called");
is($code_results{num_args}, 2, " code received 2 args");
is($code_results{value}, 'test', " received correct value");
ok($code_results{dfv_obj}, " received dfv object");
isa_ok($code_results{dfv_obj}, 'Data::FormValidator::Results',
" dfv object");
delete $input_hashref->{code_checker};
## Value that should cause a missing dependency.
#############################################################################
$input_hashref->{cc_type} = 'VISA';
$result = undef;
eval { $result = $validator->check($input_hashref, 'default'); };
ok(!$@, "checking a value that has a depenency");
isa_ok($result, "Data::FormValidator::Results", " returned object");
ok($result->has_missing, " has_missing returned true");
ok($result->missing('cc_cvv'), " missing('cc_cvv') returned true");
## Value that should NOT cause a missing dependency.
#############################################################################
$input_hashref->{cc_type} = 'AMEX';
$result = undef;
eval { $result = $validator->check($input_hashref, 'default'); };
ok(!$@, "checking a value that has no dependencies");
isa_ok($result, "Data::FormValidator::Results", " returned object");
ok(!$result->has_missing, " has_missing returned false");
is($result->missing('cc_cvv'), undef, " missing('cc_cvv') returned false");
## Test with multiple values
#############################################################################
$input_hashref->{cc_type} = [ 'AMEX', 'VISA' ];
$result = undef;
eval { $result = $validator->check($input_hashref, 'default'); };
ok(!$@, "checking multiple values");
isa_ok($result, "Data::FormValidator::Results", " returned object");
ok($result->has_missing, " has_missing returned true");
is($result->missing('cc_cvv'), 1, " missing('cc_cvv') returned true");