Sponsoring The Perl Toolchain Summit 2025: Help make this important event another success Learn more

use strict;
use lib 't/lib';
BEGIN {
eval "use DBIx::Class";
plan skip_all => 'DBIX::Class required' if $@;
plan tests => 20;
}
use_ok( 'HTML::FormHandler' );
use_ok( 'BookDB::Form::Book');
use_ok( 'BookDB::Schema::DB');
my $schema = BookDB::Schema::DB->connect('dbi:SQLite:t/db/book.db');
ok($schema, 'get db schema');
my $book = $schema->resultset('Book')->create(
{ title => 'Testing form',
isbn => '02340994',
author => 'S.Else',
publisher => 'NoWhere',
pages => '702',
});
END { $book->delete }
ok( $book, 'get book');
my $form = BookDB::Form::Book->new(item => $book, schema => $schema);
ok( $form, 'create form from db object');
is( $form->field('pages')->fif, 702, 'get field fif value' );
is( $form->field('author')->fif, 'S.Else', 'get another field fif value' );
my $fif = $form->fif;
is_deeply( $fif, {
title => 'Testing form',
isbn => '02340994',
author => 'S.Else',
publisher => 'NoWhere',
pages => '702',
}, 'get form fif' );
$fif->{pages} = '501';
$form = BookDB::Form::Book->new(item => $book, schema => $schema, params => $fif);
ok( $form, 'use params parameters on new' );
is( $form->field('pages')->fif, 702, 'get field fif value' );
is( $form->get_param('pages'), '501', 'params contains new value' );
is( $form->field('author')->fif, 'S.Else', 'get another field fif value' );
my $validated = $form->validate;
ok( $validated, 'validated without params' );
is( $form->field('author')->fif, 'S.Else', 'get field fif value after validate' );
ok( !$form->field('author')->has_input, 'no input for field');
$form->clear_state;
my $params = {
title => 'Testing form',
isbn => '02340234',
pages => '699',
author => 'J.Doe',
publisher => '',
};
$form = BookDB::Form::Book->new(item => $book, schema => $schema, params => $params);
$validated = $form->validate( $params );
ok( $validated, 'validated with params' );
is( $form->field('pages')->fif, 699, 'get field fif after validation' );
is( $form->field('author')->fif, 'J.Doe', 'get field author after validation' );
is_deeply( $form->fif, {
title => 'Testing form',
isbn => '02340234',
pages => '699',
author => 'J.Doe' }, 'get form fif after validation' );