use strict; use warnings; use Test::More; use Test::Exception; use HTML::FormHandler::Types (':all'); use HTML::FormHandler::I18N; $ENV{LANGUAGE_HANDLE} = 'en_en'; BEGIN { plan skip_all => 'Type::Tiny or Type::Tiny::Enum not installed' unless eval { require Type::Tiny; require Type::Tiny::Enum; }; } { package Test::Form::Type::Tiny; use HTML::FormHandler::Moose; extends 'HTML::FormHandler'; use Type::Tiny::Enum; my $ENUM = Type::Tiny::Enum->new( name => "Meta", values => [qw( foo bar )], message => sub { "$_ ain't meta" }, ); my $NUM = Type::Tiny->new( name => "Number", constraint => sub { $_ =~ /^\d+$/ }, message => sub { "$_ ain't a number" }, ); has_field 'test_a' => ( apply => [ $NUM ] ); has_field 'test_b' => ( apply => [ { type => $NUM } ] ); has_field 'test_c' => ( apply => [ $ENUM ] ); has_field 'test_d' => ( apply => [ { type => $ENUM } ] ); } my $form = Test::Form::Type::Tiny->new; ok($form, 'get form'); my $params = { test_a => 'str1', test_b => 'str2', test_c => 'str3', test_d => 'str4', }; $form->process($params); ok( !$form->validated, 'form did not validate' ); ok( $form->field('test_a')->has_errors, 'errors on Type::Tiny type'); ok( $form->field('test_b')->has_errors, 'errors on Type::Tiny type'); ok( $form->field('test_c')->has_errors, 'errors on Type::Tiny::Enum type'); ok( $form->field('test_d')->has_errors, 'errors on Type::Tiny::Enum type'); is( $form->field('test_a')->errors->[0], "str1 ain't a number", 'error from Type::Tiny' ); is( $form->field('test_b')->errors->[0], "str2 ain't a number", 'error from Type::Tiny' ); is( $form->field('test_c')->errors->[0], "str3 ain't meta", 'error from Type::Tiny::Enum' ); is( $form->field('test_d')->errors->[0], "str4 ain't meta", 'error from Type::Tiny::Enum' ); $params = { test_a => '123', test_b => '456', test_c => 'foo', test_d => 'bar', }; $form->process($params); ok( $form->validated, 'form validated' ); ok( !$form->field('test_a')->has_errors, 'no errors on Type::Tiny type'); ok( !$form->field('test_b')->has_errors, 'no errors on Type::Tiny type'); ok( !$form->field('test_c')->has_errors, 'no errors on Type::Tiny::Enum type'); ok( !$form->field('test_d')->has_errors, 'no errors on Type::Tiny::Enum type'); done_testing;