File: form_errors.t

package info (click to toggle)
libhtml-formhandler-perl 0.40067-1
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 2,432 kB
  • ctags: 697
  • sloc: perl: 9,312; makefile: 2
file content (48 lines) | stat: -rw-r--r-- 1,313 bytes parent folder | download | duplicates (5)
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
use strict;
use warnings;
use Test::More;

{
    package Test::Form;
    use HTML::FormHandler::Moose;
    extends 'HTML::FormHandler';

    has 'secret' => ( is => 'rw', default => 'wrong' );

    has_field 'foo';
    has_field 'bar';

    sub validate_foo {
        my ( $self, $field ) = @_;
        $field->add_error('Not a valid foo')
            if( $field->value eq 'test' );
    }
    sub validate_bar {
        my ( $self, $field ) = @_;
        $field->add_error('Not a valid bar')
            if( $field->value eq 'bad_bar' );
    }
    sub validate {
        my $self = shift;
        $self->add_form_error('Try again')
           if( $self->field('foo')->value ne $self->secret );
    }
}

my $form = Test::Form->new;
ok( $form, 'form builds' );
$form->process( params => {} );
my $params = {
    foo => 'test',
    bar => 'bad_bar',
};
$form->process( secret => 'yikes', params => $params );
ok( !$form->validated, 'form did not validate' );
$form->process( secret => 'my_bar', params => { bar => 'my_bar', foo => 'my_foo' } );
my @errors = $form->errors;
is( $errors[0], 'Try again', 'form error' );
$form->process( secret => 'my_foo', params => { bar => 'my_bar', foo => 'my_foo' } );
ok( $form->validated, 'form validated' );
ok( !$form->has_form_errors, 'form errors are gone' );

done_testing;