/xt/form_errors.t

http://github.com/gshank/html-formhandler · Raku · 48 lines · 42 code · 6 blank · 0 comment · 4 complexity · db604b1e02f1dbcde38ce6fe74c935d7 MD5 · raw file

  1. use strict;
  2. use warnings;
  3. use Test::More;
  4. {
  5. package Test::Form;
  6. use HTML::FormHandler::Moose;
  7. extends 'HTML::FormHandler';
  8. has 'secret' => ( is => 'rw', default => 'wrong' );
  9. has_field 'foo';
  10. has_field 'bar';
  11. sub validate_foo {
  12. my ( $self, $field ) = @_;
  13. $field->add_error('Not a valid foo')
  14. if( $field->value eq 'test' );
  15. }
  16. sub validate_bar {
  17. my ( $self, $field ) = @_;
  18. $field->add_error('Not a valid bar')
  19. if( $field->value eq 'bad_bar' );
  20. }
  21. sub validate {
  22. my $self = shift;
  23. $self->add_form_error('Try again')
  24. if( $self->field('foo')->value ne $self->secret );
  25. }
  26. }
  27. my $form = Test::Form->new;
  28. ok( $form, 'form builds' );
  29. $form->process( params => {} );
  30. my $params = {
  31. foo => 'test',
  32. bar => 'bad_bar',
  33. };
  34. $form->process( secret => 'yikes', params => $params );
  35. ok( !$form->validated, 'form did not validate' );
  36. $form->process( secret => 'my_bar', params => { bar => 'my_bar', foo => 'my_foo' } );
  37. my @errors = $form->errors;
  38. is( $errors[0], 'Try again', 'form error' );
  39. $form->process( secret => 'my_foo', params => { bar => 'my_bar', foo => 'my_foo' } );
  40. ok( $form->validated, 'form validated' );
  41. ok( !$form->has_form_errors, 'form errors are gone' );
  42. done_testing;