lemonldap-ng/lemonldap-ng-portal/t/41-Captcha-old-api.t

115 lines
2.8 KiB
Perl

use Test::More;
use strict;
use IO::String;
use JSON;
use Lemonldap::NG::Portal::Main::Constants 'PE_CAPTCHAEMPTY';
require 't/test-lib.pm';
my $res;
my $maintests = 0;
SKIP: {
eval 'use GD::SecurityImage; use Image::Magick;';
if ($@) {
skip 'Image::Magick not found', $maintests;
}
my $client = LLNG::Manager::Test->new( {
ini => {
logLevel => 'error',
portalMainLogo => 'common/logos/logo_llng_old.png',
customPlugins => 't::CaptchaOldApi',
}
}
);
my ( $data, $json );
# check setCaptcha
$data = '';
$json = expectJSON(
$client->_post(
'/setCaptcha',
IO::String->new($data),
length => length($data),
)
);
like( $json->{token}, qr/.+/ );
like( $json->{img}, qr#^data:image/png;base64,.{10}# );
like( $json->{answer}, qr#^\d{6}$# );
count(3);
# check getCaptcha
$data = '';
$json = expectJSON(
$client->_post(
'/getCaptcha',
IO::String->new($data),
length => length($data),
)
);
like( $json->{token}, qr/.+/ );
like( $json->{img}, qr#^data:image/png;base64,.{10}# );
like( $json->{answer}, qr#^\d{6}$# );
count(3);
my $token = $json->{token};
my $answer = $json->{answer};
# validate: wrong token
$data = buildForm( { token => 111, answer => $answer } );
$json = expectJSON(
$client->_post(
'/validateCaptcha', IO::String->new($data),
length => length($data),
)
);
is( $json->{result}, 0, 'Wrong token failed' );
count(1);
# validate: wrong answer
$data = buildForm( { token => $token, answer => 999 } );
$json = expectJSON(
$client->_post(
'/validateCaptcha', IO::String->new($data),
length => length($data),
)
);
is( $json->{result}, 0, 'Wrong captcha failed' );
count(1);
# Get Fresh token/answer pair
$data = '';
$json = expectJSON(
$client->_post(
'/getCaptcha',
IO::String->new($data),
length => length($data),
)
);
like( $json->{token}, qr/.+/ );
like( $json->{img}, qr#^data:image/png;base64,.{10}# );
like( $json->{answer}, qr#^\d{6}$# );
count(3);
$token = $json->{token};
$answer = $json->{answer};
# validate: correct values
$data = buildForm( { token => $token, answer => $answer } );
$json = expectJSON(
$client->_post(
'/validateCaptcha', IO::String->new($data),
length => length($data),
)
);
is( $json->{result}, 1, 'Captcha successfully verified' );
count(1);
}
count($maintests);
clean_sessions();
done_testing( count() );