mourningdove/t/captcha.t

99 lines
3.1 KiB
Perl
Raw Normal View History

2026-05-24 01:03:05 +00:00
# t/captcha.t
#
# Test DW::Captcha
#
# Authors:
# Afuna <coder.dw@afunamatata.com>
# Jen Griffin <kareila@livejournal.com>
#
# Copyright (c) 2013 by Dreamwidth Studios, LLC.
#
# This program is free software; you may redistribute it and/or modify it under
# the same terms as Perl itself. For a copy of the license, please reference
# 'perldoc perlartistic' or 'perldoc perlgpl'.
#
use strict;
use warnings;
use Test::More;
BEGIN { $LJ::_T_CONFIG = 1; require "$ENV{LJHOME}/cgi-bin/ljlib.pl"; }
my $recaptcha_enabled = DW::Captcha::reCAPTCHA->site_enabled;
if ( !DW::Captcha->site_enabled ) {
plan skip_all => "CAPTCHA functionality disabled.";
}
elsif ( !$recaptcha_enabled ) {
plan skip_all => "No valid CAPTCHA configuration.";
}
else {
plan tests => 13;
}
# override for the sake of the test
%LJ::CAPTCHA_FOR = (
testpage => 1,
nocaptchapage => 0,
);
note("disabled captcha for a specific page");
{
my $captcha = DW::Captcha->new("nocaptchapage");
ok( !$captcha->enabled, "Captcha is not enabled for nocaptchapage" );
}
note("check captcha is enabled");
{
my $captcha = DW::Captcha->new("testpage");
ok( $captcha->enabled, "Captcha is enabled for testpage" );
}
note("check various implementations are loaded okay");
{
my $default = $LJ::CAPTCHA_TYPES{$LJ::DEFAULT_CAPTCHA_TYPE};
my $captcha = DW::Captcha->new('testpage');
is( $captcha->name, $default, "Use default captcha implementation" );
SKIP: {
skip "reCAPTCHA disabled.", 2 unless $recaptcha_enabled;
$captcha = DW::Captcha->new( 'testpage', want => 'I' );
is( $captcha->name, "recaptcha", "Using reCAPTCHA" );
# can also be done using DW::Captcha::reCAPTCHA->site_enabled
# but technically we shouldn't be worrying about module names
ok( $captcha->site_enabled, "reCAPTCHA is enabled and configured on this site" );
}
$captcha = DW::Captcha->new( 'testpage', want => 'abc' );
is( $captcha->name, $default, "not a valid captcha implementation, so used default" );
ok( $captcha->site_enabled,
"not a valid captcha implementation, so used default to make sure we still get captcha" );
}
note("user tries to use a disabled captcha type");
# it's possible only one type currently works, so activate a good one
{
local %LJ::DISABLED = (
captcha => sub {
my $module = $_[0] // '';
return !$recaptcha_enabled if $module eq "recaptcha";
}
);
local $LJ::DEFAULT_CAPTCHA_TYPE = $recaptcha_enabled ? "I" : "T";
my $BAD_CAPTCHA_TYPE = $recaptcha_enabled ? "T" : "I";
my $default_name = $LJ::CAPTCHA_TYPES{$LJ::DEFAULT_CAPTCHA_TYPE};
my $captcha = DW::Captcha->new( "testpage", want => $LJ::DEFAULT_CAPTCHA_TYPE );
is( $captcha->name, $default_name, "want $default_name, everything is fine" );
ok( $captcha->site_enabled, "$default_name was enabled" );
$captcha = DW::Captcha->new( "testpage", want => $BAD_CAPTCHA_TYPE );
is( $captcha->name, $default_name,
"wanted other type, but it's not enabled so use default instead" );
ok( $captcha->site_enabled, "our fallback is enabled" );
}