The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/env perl

use strict;
use warnings;

use Test::More tests => 24;

use Input::Validator::Condition;
use Input::Validator::Field;

my $condition = Input::Validator::Condition->new;
$condition->when('bar');

my $foo = Input::Validator::Field->new(name => 'foo');
my $bar = Input::Validator::Field->new(name => 'bar');

ok(!$condition->match({}));
ok(!$condition->match({bar => $bar}));
$bar->value('');
ok(!$condition->match({bar => $bar}));
$bar->value('foo');
ok($condition->match({bar => $bar}));

$condition = Input::Validator::Condition->new;
$condition->when([qw/foo bar/]);

$foo = Input::Validator::Field->new(name => 'foo');
$bar = Input::Validator::Field->new(name => 'bar');

ok(!$condition->match({}));
$foo->value('bar');
ok(!$condition->match({foo => $foo}));
$bar->value('foo');
ok(!$condition->match({bar => $bar}));
ok($condition->match({foo => $foo, bar => $bar}));
$foo->multiple(1)->value([qw/bar baz/]);
ok($condition->match({foo => $foo, bar => $bar}));

$foo = Input::Validator::Field->new(name => 'foo');
$bar = Input::Validator::Field->new(name => 'bar');

ok(!$condition->match({}));
$foo->value('bar');
ok(!$condition->match({foo => $foo}));
$bar->value('foo');
ok(!$condition->match({bar => $bar}));
ok($condition->match({foo => $foo, bar => $bar}));
$foo->multiple(1)->value(qw/bar baz/);
ok($condition->match({foo => $foo, bar => $bar}));

$condition = Input::Validator::Condition->new;
$condition->when('foo')->regexp(qr/^\d+$/)->length(1, 3);

$foo = Input::Validator::Field->new(name => 'foo');
$bar = Input::Validator::Field->new(name => 'bar');

ok(!$condition->match({}));
$foo->value('bar');
ok(!$condition->match({foo => $foo}));
$foo->value(1234);
ok(!$condition->match({foo => $foo}));
$foo->value(123);
ok($condition->match({foo => $foo}));

$condition = Input::Validator::Condition->new;
$condition->when('foo')->regexp(qr/^\d+$/)->length(1, 3);

$foo = Input::Validator::Field->new(name => 'foo');
$bar = Input::Validator::Field->new(name => 'bar');

$foo->error('Required');
ok(!$condition->match({foo => $foo}));
$foo->clear_error;

$condition = Input::Validator::Condition->new;
$condition->when('foo')->regexp(qr/^\d+$/)->length(1, 3)->when('bar')
  ->regexp(qr/^\d+$/);
 
$foo = Input::Validator::Field->new(name => 'foo');
$bar = Input::Validator::Field->new(name => 'bar');

ok(!$condition->match({}));
$foo->value('bar');
$bar->value('foo');
ok(!$condition->match({foo => $foo, bar => $bar}));
$foo->value('barr');
$bar->value('foo');
ok(!$condition->match({foo => $foo, bar => $bar}));
$foo->value(123);
$bar->value('foo');
ok(!$condition->match({foo => $foo, bar => $bar}));
$foo->value(123);
$bar->value(123);
ok($condition->match({foo => $foo, bar => $bar}));