1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
|
use strict;
use warnings;
use Test::More;
use HTML::FormHandler::Test;
use HTML::FormHandler::I18N;
$ENV{LANGUAGE_HANDLE} = 'en_en';
{
package Test::Form;
use HTML::FormHandler::Moose;
extends 'HTML::FormHandler';
sub build_form_wrapper_class { 'form_wrapper' }
sub build_do_form_wrapper {1}
sub build_update_subfields {{ all => { do_wrapper => 1, tags => { label_after => ': '} } }}
has '+name' => ( default => 'test_errors' );
has_field 'foo' => ( required => 1 );
has_field 'bar' => ( type => 'Integer' );
}
#my $form = Test::Form->new( form_wrapper_attr => { class => 'form_wrapper' } );;
my $form = Test::Form->new;
$form->process( params => { bar => 'abc' } );
is( $form->num_errors, 2, 'got two errors' );
my $expected =
'<form id="test_errors" method="post">
<fieldset class="form_wrapper">
<div class="form_messages"></div>
<div class="error">
<label for="foo">Foo: </label>
<input class="error" type="text" name="foo" id="foo" value="" />
<span class="error_message">Foo field is required</span>
</div>
<div class="error">
<label for="bar">Bar: </label>
<input class="error" type="text" name="bar" id="bar" size="8" value="abc" />
<span class="error_message">Value must be an integer</span>
</div>
</fieldset></form>';
my $rendered = $form->render;
is_html($rendered, $expected, 'html matches' );
{
package Test::Compound;
use HTML::FormHandler::Moose;
extends 'HTML::FormHandler';
has_field 'fringe' => ( type => 'Compound', do_wrapper => 1 );
has_field 'fringe.olivia';
has_field 'fringe.fauxlivia';
sub validate_fringe_fauxlivia {
my ( $self, $field ) = @_;
$field->add_error('Wrong Olivia');
}
}
$form = Test::Compound->new;
my $params = {
'fringe.olivia' => "I'm the true Olivia",
'fringe.fauxlivia' => "I'm the true Olivia",
};
$form->process( params => $params );
$rendered = $form->field('fringe.fauxlivia')->render;
$expected =
'<div class="error">
<label for="fringe.fauxlivia">Fauxlivia</label>
<input type="text" name="fringe.fauxlivia" id="fringe.fauxlivia" value="I\'m the true Olivia" class="error" />
<span class="error_message">Wrong Olivia</span>
</div>';
is_html( $rendered, $expected, 'error on compound subfield has error class' );
$expected =
'<div class="error" id="fringe">
<div>
<label for="fringe.olivia">Olivia</label>
<input type="text" name="fringe.olivia" id="fringe.olivia" value="I\'m the true Olivia" />
</div>
<div class="error">
<label for="fringe.fauxlivia">Fauxlivia</label>
<input type="text" name="fringe.fauxlivia" id="fringe.fauxlivia" value="I\'m the true Olivia" class="error" />
<span class="error_message">Wrong Olivia</span>
</div>
</div>';
$rendered = $form->field('fringe')->render;
is_html( $rendered, $expected, 'error on compound wrapper' );
done_testing;
|