use strict;
use warnings;
package CB;
# Just to test we can provide strings as callbacks
# used by "coo2" field
sub nested_when_string_callback { return 1 }
package main;
use Test::More tests => 49;
use HTML::FormFu;
my $form = HTML::FormFu->new;
$form->load_config_file('t/nested/constraints/constraint_when.yml');
# When triggered depending on callback
my $when_closure = sub {
my $params = shift;
return 1 if defined $params->{xyz}{foo} && $params->{xyz}{foo} eq '1';
};
$form->get_field('coo')->get_constraint->when( { callback => $when_closure } );
# Valid
{
$form->process( {
'xyz.foo' => 1,
'xyz.bar' => 'bar_value',
'xyz.moo' => undef,
'xyz.zoo' => 'zoo_value',
'xyz.coo' => 4,
'xyz.coo2' => 5,
} );
# if 'moo' does not *exist* in process params
# it wouldn't be valid
ok( $form->valid('xyz.foo'), 'foo valid' );
ok( $form->valid('xyz.bar'), 'bar valid' );
ok( $form->valid('xyz.moo'), 'moo valid' );
ok( $form->valid('xyz.zoo'), 'zoo valid' );
ok( $form->valid('xyz.coo'), 'coo valid' );
ok( $form->valid('xyz.coo2'), 'coo2 valid' );
ok( grep { $_ eq 'xyz.foo' } $form->valid );
ok( grep { $_ eq 'xyz.bar' } $form->valid );
ok( grep { $_ eq 'xyz.moo' } $form->valid );
ok( grep { $_ eq 'xyz.zoo' } $form->valid );
ok( grep { $_ eq 'xyz.coo' } $form->valid );
ok( grep { $_ eq 'xyz.coo2' } $form->valid );
}
{
$form->process( {
'xyz.foo' => 2,
'xyz.bar' => undef,
'xyz.moo' => 'moo_value',
'xyz.zoo' => 'zoo_value',
'xyz.coo' => 'not_a_number',
} );
# if 'bar' does not *exist* in process params
# it wouldn't be valid
ok( $form->valid('xyz.foo'), 'foo valid' );
ok( $form->valid('xyz.bar'), 'bar valid' );
ok( $form->valid('xyz.moo'), 'moo valid' );
ok( $form->valid('xyz.zoo'), 'zoo valid' );
ok( $form->valid('xyz.coo'), 'coo valid' );
ok( grep { $_ eq 'xyz.foo' } $form->valid );
ok( grep { $_ eq 'xyz.bar' } $form->valid );
ok( grep { $_ eq 'xyz.moo' } $form->valid );
ok( grep { $_ eq 'xyz.zoo' } $form->valid );
ok( grep { $_ eq 'xyz.coo' } $form->valid );
}
{
$form->process( {
'xyz.foo' => 5,
'xyz.bar' => undef,
'xyz.moo' => undef,
'xyz.zoo' => undef,
'xyz.coo' => undef,
} );
# if 'bar' does not *exist* in process params
# it wouldn't be valid
ok( $form->valid('xyz.foo'), 'foo valid' );
ok( $form->valid('xyz.bar'), 'bar valid' );
ok( $form->valid('xyz.moo'), 'moo valid' );
ok( $form->valid('xyz.zoo'), 'zoo valid' );
ok( $form->valid('xyz.coo'), 'coo valid' );
ok( grep { $_ eq 'xyz.foo' } $form->valid );
ok( grep { $_ eq 'xyz.bar' } $form->valid );
ok( grep { $_ eq 'xyz.moo' } $form->valid );
ok( grep { $_ eq 'xyz.zoo' } $form->valid );
ok( grep { $_ eq 'xyz.coo' } $form->valid );
}
# Invalid
{
$form->process( {
'xyz.foo' => 1,
'xyz.moo' => undef,
'xyz.coo' => 'not_a_number',
} );
ok( $form->has_errors );
ok( $form->valid('xyz.foo'), 'foo valid' );
ok( !$form->valid('xyz.bar'), 'bar not valid' );
ok( $form->valid('xyz.moo'), 'moo valid' );
ok( !$form->valid('xyz.zoo'), 'zoo not valid' );
ok( !$form->valid('xyz.coo'), 'coo not valid' );
$form->process( {
'xyz.foo' => 'false value',
'xyz.bar' => undef,
'xyz.moo' => undef,
'xyz.zoo' => 'zoo_value',
'xyz.coo' => 'not_a_number',
} );
# if 'bar' and 'moo' does not *exist* in process params
# it wouldn't be valid
ok( $form->has_errors );
ok( !$form->valid('xyz.foo'), 'foo not valid' );
ok( $form->valid('xyz.bar'), 'bar valid' );
ok( $form->valid('xyz.moo'), 'moo valid' );
ok( $form->valid('xyz.zoo'), 'zoo valid' );
ok( $form->valid('xyz.coo'), 'coo valid' );
ok( !grep { $_ eq 'xyz.foo' } $form->valid );
ok( grep { $_ eq 'xyz.bar' } $form->valid );
ok( grep { $_ eq 'xyz.moo' } $form->valid );
ok( grep { $_ eq 'xyz.zoo' } $form->valid );
ok( grep { $_ eq 'xyz.coo' } $form->valid );
}