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
|
use strict;
use warnings;
use Test::More;
use Data::Dumper;
# tests that an init_value provided by item/init_object is used
# for disabled fields, and that disabled fields are not validated.
{
{
package MyApp::Test::Form1;
use HTML::FormHandler::Moose;
extends 'HTML::FormHandler';
has_field 'foo' => ( type => 'Select', disabled => 1 );
has_field 'bar';
has_field 'user' => ( type => 'Compound', required => 1 );
has_field 'user.email_address' => ( disabled => 1, required => 1,
validate_method => \&check_email
);
sub check_email {
my $self = shift;
if ( $self->value && $self->value =~ /joe/ ) {
$self->add_error("No emails with 'joe'");
}
}
has_field 'save' => ( type => 'Submit' );
}
my $form = MyApp::Test::Form1->new;
my $init_object = {
foo => 'my_foo',
bar => 'my_bar',
user => { email_address => 'joe@nowhere.com' },
};
$form->process( init_object => $init_object, params => {} );
my $fif = {
foo => 'my_foo',
bar => 'my_bar',
'user.email_address' => 'joe@nowhere.com',
};
is_deeply( $form->fif, $fif, 'fif is correct' );
my $submitted = {
bar => 'subm_bar',
};
$form->process( init_object => $init_object, params => $submitted );
$fif->{bar} = 'subm_bar';
is_deeply( $form->fif, $fif,
'right fif after submission, init_object' );
$init_object->{bar} = 'subm_bar';
is_deeply( $form->value, $init_object, 'right value' );
}
{
{
package MyApp::Test::Form2;
use HTML::FormHandler::Moose;
extends 'HTML::FormHandler';
has_field 'foo' => ( type => 'Select', disabled => 1, default => 'def_foo' );
has_field 'bar' => ( default => 'def_bar' );
has_field 'save' => ( type => 'Submit' );
}
my $form = MyApp::Test::Form2->new;
$form->process( params => {} );
my $fif = { foo => 'def_foo', bar => 'def_bar' };
is_deeply( $form->fif, $fif, 'fif is correct using defaults' );
my $submitted = { bar => 'subm_bar' };
$form->process( params => $submitted );
is_deeply( $form->fif, { foo => 'def_foo', bar => 'subm_bar' },
'right fif after submission' );
is_deeply( $form->value, { foo => 'def_foo', bar => 'subm_bar' } );
}
done_testing;
|