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;
use HTML::TreeBuilder;

BEGIN {
    plan skip_all => 'Template Toolkit required'
       unless eval { require Template };
    plan skip_all => 'Config::Any required'
       unless eval { require Config::Any };
    plan skip_all => 'YAML::Syck required'
       unless eval { require YAML::Syck };
}

use HTML::FormHandler::Foo;
use FindBin;

# test Foo class for loading form info from config

my $expected =
'<form action="/login" id="login_form" method="post">
<div class="text label">
<label>Username</label>
<input name="user" type="text" />
</div>
<div class="password label">
<label>Password</label>
<input name="pass" type="password" />
</div>
<div class="checkbox label">
<label>Opt in?</label>
<input name="opt_in" type="checkbox" value="1" />
</div>
<div class="submit">
<input name="submit" type="submit" value="Login" />
</div>
</form>
';

my $form = HTML::FormHandler::Foo->new( config_file => "$FindBin::Bin/../var/form1.yml" );
$form->process({});
is( $form->num_fields, 4, 'right number of fields');
my $tt_rendered_form = $form->tt_render;
ok($tt_rendered_form, 'form rendered');

my $expected_tree = HTML::TreeBuilder->new_from_content($expected);
my $tt_tree = HTML::TreeBuilder->new_from_content($tt_rendered_form);
is( $tt_tree->as_HTML, $expected_tree->as_HTML,
    "rendering matches expected output" );

done_testing;