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::FormHandler::Test;

use HTML::FormHandler::I18N;
$ENV{LANGUAGE_HANDLE} = 'en_en';

{
    package MyApp::Form::Password;
    use HTML::FormHandler::Moose;
    extends 'HTML::FormHandler';

    use HTML::FormHandler::Types ('NotAllDigits');

    has '+name' => ( default => 'testform' );
    has '+widget_wrapper' => ( default => 'Bootstrap' );

    # Email & compound definition in form:
    has_field 'email' => (
         type      => 'Email',
         label     => 'Register.Email',
         element_attr => { placeholder => 'Register.Email', class => 'span3', },
         wrapper_attr => { class => 'clearfix' },
         required => 1,
    );
    has_field 'password' => (
         type       => 'Compound',
         required   => 1,
         do_wrapper => 1,
         do_label   => 1,
         label      => 'Register.Password',
    );
    has_field 'password.password' => (
        type       => 'Password',
        do_wrapper => 0,
        do_label   => 0,
        element_attr  => { placeholder => 'Register.Password', class => 'span2', },
        required   => 1,
        minlength  => 5,
        apply => [NotAllDigits],
    );
    has_field 'password.again' => (
        type           => 'PasswordConf',
        password_field => 'password',
        do_wrapper     => 0,
        do_label       => 0,
        element_attr      => { placeholder => 'Register.PasswordAgain', class => 'span2', },
    );

}

my $form = MyApp::Form::Password->new;
ok( $form, 'form built' );
$form->process( params => { email => 'joe@nowhere.com', 'password.password' => '12345', 'password.again' => '54321' } );

my $rendered = $form->render;
my $expected =
'<form id="testform" method="post">
<div class="form_messages">
</div>
<div class="control-group clearfix">
    <label class="control-label" for="email">Register.Email</label>
    <div class="controls">
    <input type="text" name="email" id="email" value="joe@nowhere.com" class="span3" placeholder="Register.Email" /></div>
</div>
<div class="control-group error" id="password">
    <label class="control-label" for="password">Register.Password</label>
    <div class="controls">
    <input type="password" name="password.password" id="password.password" value="" class="span2 error" placeholder="Register.Password" />
    <span class="help-inline">Must not be all digits</span>
    <input type="password" name="password.again" id="password.again" value="" class="span2 error" placeholder="Register.PasswordAgain" />
    <span class="help-inline">The password confirmation does not match the password</span></div>
</div>
</form>';

is_html( $rendered, $expected, 'got expected html' );

done_testing;