use strict;
use warnings;
use Test::More;
use Test::Exception;
# check that transform acts correctly as inflation, and
# sub deflation works ok.
{
package Test::Deflate2;
use HTML::FormHandler::Moose;
extends 'HTML::FormHandler';
has_field 'bullets' => ( type => 'Text',
apply => [ { transform => \&string_to_array } ],
deflation => \&array_to_string,
);
sub array_to_string {
my ( $value ) = @_;
my $string = '';
my $sep = '';
for ( @$value ) {
$string .= $sep . $_->{text};
$sep = ';';
}
return $string;
}
sub string_to_array {
my $value = shift;
return [ map { { text => $_ } } split(/\s*;\s*/, $value) ];
}
}
my $init_object = { bullets => [{ text => 'one'}, { text => 'two' }, { text => 'three'}] };
my $fif = { bullets => 'one;two;three' };
my $form = Test::Deflate2->new;
ok( $form, 'form built');
$form->process( init_object => $init_object, params => {} );
is_deeply( $form->fif, $fif, 'right fif' );
is_deeply( $form->value, $init_object, 'right value' );
$form->process( params => $fif );
is_deeply( $form->fif, $fif, 'right fif' );
is_deeply( $form->value, $init_object, 'right value' );
done_testing;