The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
#! perl
use Test::More;

if (eval "use CGI::Prototype::Mecha; 1") {
  plan no_plan;
} else {
  plan skip_all => 'CGI::Prototype::Mecha required for testing CGIPH';
}

use lib qw(t/TestApp TestApp);

isa_ok
  my $m = CGI::Prototype::Mecha->new(protoapp => 'My::App'),
  'CGI::Prototype::Mecha';
ok $m->get('http://mecha/'),
  'welcome page fetched';
is $m->status, 200,
  'welcome page status ok';
# $m->diag_forms;
like $m->content, qr/Enter your name/,
  'welcome page contains correct content';

## empty fields should stay on same page
ok $m->submit_form
  (fields => {first => '', last => ''});
is $m->status, 200,
  'welcome page status ok';
like $m->content, qr/Enter your name/,
  'welcome page contains correct content';

## only one should stay on same page
ok $m->submit_form
  (fields => {first => 'Fred', last => ''});
is $m->status, 200,
  'welcome page status ok';
like $m->content, qr/Enter your name/,
  'welcome page contains correct content';

## only other should stay on same page
ok $m->submit_form
  (fields => {first => '', last => 'Flintstone'});
is $m->status, 200,
  'welcome page status ok';
like $m->content, qr/Enter your name/,
  'welcome page contains correct content';

## both should go to thanks page
ok $m->submit_form
  (fields => {first => 'Fred', last => 'Flintstone'});
is $m->status, 200,
  'thanks page status ok';
like $m->content, qr/Thanks for stopping by,\s*Fred Flintstone!/,
  'thanks page contains correct content';