The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use warnings;

use lib 'xt/lib/';

# HFH::TraitFor::Captcha and HFH::Field::Captcha do not work with current
# versions of Catalyst.
#
# The reason seems to be that get_captcha and set_captcha use
# $form->ctx->{session} directly, instead of using the accessor
# $from->ctx->session.
#
# I am not sure if this works with older versions of Catalyst, but it is
# definitely broken when using Catalyst 5.90007
#
# I have attached a simple test.
#
# The patch makes get_captcha and set_captcha using the session-accessor
# IF $form->ctx has one. (if it is a catalyst context). Otherwise, the old
# behaviour will not change. The module should still work with
# non-catalyst applications.

use Test::More;
my @missing;
eval" use Test::WWW::Mechanize::Catalyst; ";
if($@){
    push @missing, "Test::WWW::Mechanize";
}
eval" use GD::SecurityImage; ";
if($@){
    push @missing, "GD::SecurityImage";
}

if(@missing){
plan skip_all => "The following Modules are required to run this test: " . join ", ", @missing;
}
else{
plan tests => 7;
}
my $mech = Test::WWW::Mechanize::Catalyst->new(catalyst_app => "MyCatalystApp");

$mech->get_ok("/captcha");
#diag explain $mech;

$mech->content_contains('<img src="/captcha/image"/><input id="captcha" name="captcha"/>');

$mech->get_ok("/captcha/get_rnd");

my $rnd = $mech->content;

$mech->get_ok("/captcha/image");

is $mech->res->content_type, "image/png";

$mech->get_ok("/captcha?captcha=$rnd");

$mech->content_is("verification succeeded");

done_testing;
exit;