The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use warnings;
use Test::More tests => 10;
use Validate::Tiny ':all';

my $rules = {
    fields => [qw/a b/],
};

my $r;

$rules->{checks} = [ a => is_required_if(1) ];
$r = validate( { a => '' }, $rules );
ok !$r->{success};
ok $r->{error}->{a};
$r = validate( { a => 'z' }, $rules );
ok $r->{success};

$rules->{checks} = [ a => is_required_if(0) ];
$r = validate( { a => '' }, $rules );
ok $r->{success};
$r = validate( { a => 'j' }, $rules );
ok $r->{success};

my $cond = sub {
    my $p = shift;
    return defined $p->{b} && $p->{b} eq 'z';
};

$rules->{checks} = [ a => is_required_if( $cond, 'foo' ) ];
$r = validate( { a => '' }, $rules );
ok $r->{success};
$r = validate( { a => '', b => 'z' }, $rules );
ok !$r->{success};
is $r->{error}->{a}, 'foo';
$r = validate( { a => 'k', b => 'z' }, $rules );
ok $r->{success};

{
    local $@;
    eval { is_required_id([]) };
    ok $@;
}