use strict;
use warnings;
use Test::More tests => 16;
use HTML::Widget;
use lib 't/lib';
use HTMLWidget::TestLib;
my $w = HTML::Widget->new;
my $fs = $w->element( 'Fieldset', 'outer' );
$fs->element( 'Textfield', 'foo' );
$fs->element( 'Textfield', 'bar' );
$w->constraint_all('Bool');
# this element shouldn't get a constraint added
$fs->element( 'Textfield', 'baz' );
# Valid
{
my $query = HTMLWidget::TestLib->mock_query( {
foo => 1,
bar => 0,
baz => 'yada'
} );
my $f = $w->process($query);
ok( $f->valid('foo'), 'foo value' );
ok( $f->valid('bar'), 'bar value' );
ok( $f->valid('baz'), 'baz value' );
ok( !$f->errors, 'no errors' );
my @cons = $w->get_constraints;
is( scalar @cons, 2, '2 constraints' );
}
# Valid
{
my $query = HTMLWidget::TestLib->mock_query( { foo => 0 } );
my $f = $w->process($query);
ok( $f->valid('foo'), 'foo value' );
ok( !$f->errors, 'no errors' );
}
# undef valid
{
my $query = HTMLWidget::TestLib->mock_query( { foo => undef } );
my $f = $w->process($query);
ok( $f->valid('foo') );
}
# empty valid
{
my $query = HTMLWidget::TestLib->mock_query( { foo => '' } );
my $f = $w->process($query);
ok( $f->valid('foo') );
is( $f->param('foo'), '', 'foo value' );
}
# Invalid
{
my $query = HTMLWidget::TestLib->mock_query( { foo => 'yada', bar => 1 } );
my $f = $w->process($query);
ok( $f->errors('foo'), 'foo has errors' );
}
# Multiple Valid
{
my $query = HTMLWidget::TestLib->mock_query( { foo => [ 1, 0, 1 ], } );
my $f = $w->process($query);
ok( $f->valid('foo'), 'Valid' );
my @results = $f->param('foo');
is_deeply( \@results, [ 1, 0, 1 ], 'Multiple valid values' );
}
# Multiple Invalid
{
my $query = HTMLWidget::TestLib->mock_query( { foo => [ 1, 0, 2 ], } );
my $f = $w->process($query);
ok( !$f->valid('foo'), 'foo not valid' );
ok( $f->errors('foo'), 'foo has errors' );
}
# invalid
{
my $query = HTMLWidget::TestLib->mock_query( { foo => '11' } );
my $f = $w->process($query);
ok( $f->errors('foo'), 'foo has errors' );
}