115 lines
2.8 KiB
Perl
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() );
|