+++ /dev/null
-# This file is part of Koha.
-#
-# Copyright (C) 2013 Equinox Software, Inc.
-# Copyright 2017 Koha Development Team
-#
-# Koha is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or
-# (at your option) any later version.
-#
-# Koha is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with Koha; if not, see <http://www.gnu.org/licenses>.
-
-use Modern::Perl;
-use Test::More tests => 3;
-
-use t::lib::Mocks;
-use Koha::AuthUtils qw/hash_password/;
-
-my $hash1 = hash_password('password');
-my $hash2 = hash_password('password');
-
-ok($hash1 ne $hash2, 'random salts used when generating password hash');
-
-subtest 'is_password_valid' => sub {
- plan tests => 12;
-
- my ( $is_valid, $error );
-
- t::lib::Mocks::mock_preference('RequireStrongPassword', 0);
- t::lib::Mocks::mock_preference('minPasswordLength', 0);
- ( $is_valid, $error ) = Koha::AuthUtils::is_password_valid( '12' );
- is( $is_valid, 0, 'min password size should be 3' );
- is( $error, 'too_short', 'min password size should be 3' );
- ( $is_valid, $error ) = Koha::AuthUtils::is_password_valid( ' 123' );
- is( $is_valid, 0, 'password should not contain leading spaces' );
- is( $error, 'has_whitespaces', 'password should not contain leading spaces' );
- ( $is_valid, $error ) = Koha::AuthUtils::is_password_valid( '123 ' );
- is( $is_valid, 0, 'password should not contain trailing spaces' );
- is( $error, 'has_whitespaces', 'password should not contain trailing spaces' );
- ( $is_valid, $error ) = Koha::AuthUtils::is_password_valid( '123' );
- is( $is_valid, 1, 'min password size should be 3' );
-
- t::lib::Mocks::mock_preference('RequireStrongPassword', 1);
- t::lib::Mocks::mock_preference('minPasswordLength', 8);
- ( $is_valid, $error ) = Koha::AuthUtils::is_password_valid( '12345678' );
- is( $is_valid, 0, 'password should be strong' );
- is( $error, 'too_weak', 'password should be strong' );
- ( $is_valid, $error ) = Koha::AuthUtils::is_password_valid( 'abcd1234' );
- is( $is_valid, 0, 'strong password should contain uppercase' );
- is( $error, 'too_weak', 'strong password should contain uppercase' );
-
- ( $is_valid, $error ) = Koha::AuthUtils::is_password_valid( 'abcD1234' );
- is( $is_valid, 1, 'strong password should contain uppercase' );
-};
-
-subtest 'generate_password' => sub {
- plan tests => 1;
- t::lib::Mocks::mock_preference('RequireStrongPassword', 1);
- t::lib::Mocks::mock_preference('minPasswordLength', 8);
- my $all_valid = 1;
- for ( 1 .. 10 ) {
- my $password = Koha::AuthUtils::generate_password;
- my ( $is_valid, undef ) = Koha::AuthUtils::is_password_valid( $password );
- $all_valid = 0 unless $is_valid;
- }
- is ( $all_valid, 1, 'generate_password should generate valid passwords' );
-};
use Modern::Perl;
use Test::More tests => 2;
+use Test::Exception;
use Test::MockModule;
use t::lib::Mocks;
use t::lib::TestBuilder;
$schema->storage->txn_begin;
-my $category1 = $builder->build_object({class=>'Koha::Patron::Categories', value=>{min_password_length => 15, require_strong_password => 1}});
-my $category2 = $builder->build_object({class=>'Koha::Patron::Categories', value=>{min_password_length => 5, require_strong_password => undef}});
-my $category3 = $builder->build_object({class=>'Koha::Patron::Categories', value=>{min_password_length => undef, require_strong_password => 1}});
-my $category4 = $builder->build_object({class=>'Koha::Patron::Categories', value=>{min_password_length => undef, require_strong_password => undef}});
-
-my $p_3l_weak = '123';
-my $p_3l_strong = '1Ab';
-my $p_5l_weak = 'abcde';
-my $p_15l_weak = '0123456789abcdf';
-my $p_5l_strong = 'Abc12';
+my $category1 = $builder->build_object(
+ {
+ class => 'Koha::Patron::Categories',
+ value => { min_password_length => 15, require_strong_password => 1 }
+ }
+);
+my $category2 = $builder->build_object(
+ {
+ class => 'Koha::Patron::Categories',
+ value => { min_password_length => 5, require_strong_password => undef }
+ }
+);
+my $category3 = $builder->build_object(
+ {
+ class => 'Koha::Patron::Categories',
+ value => { min_password_length => undef, require_strong_password => 1 }
+ }
+);
+my $category4 = $builder->build_object(
+ {
+ class => 'Koha::Patron::Categories',
+ value =>
+ { min_password_length => undef, require_strong_password => undef }
+ }
+);
+
+my $p_2l = '1A';
+my $p_3l_weak = '123';
+my $p_3l_strong = '1Ab';
+my $p_5l_weak = 'abcde';
+my $p_15l_weak = '0123456789abcdf';
+my $p_5l_strong = 'Abc12';
my $p_15l_strong = '0123456789AbCdF';
subtest 'is_password_valid for category' => sub {
- plan tests => 12;
+ plan tests => 15;
my ( $is_valid, $error );
- t::lib::Mocks::mock_preference('RequireStrongPassword', 0);
- t::lib::Mocks::mock_preference('minPasswordLength', 3);
+ t::lib::Mocks::mock_preference( 'RequireStrongPassword', 0 );
+ t::lib::Mocks::mock_preference( 'minPasswordLength', 3 );
#Category 1 - override=>1, length=>15, strong=>1
- ( $is_valid, $error ) = Koha::AuthUtils::is_password_valid( $p_5l_strong, $category1 );
- is($is_valid, 0, 'min password length for this category is 15');
- is($error, 'too_short', 'min password length for this category is 15');
+ ( $is_valid, $error ) =
+ Koha::AuthUtils::is_password_valid( $p_5l_strong, $category1 );
+ is( $is_valid, 0, 'min password length for this category is 15' );
+ is( $error, 'too_short', 'min password length for this category is 15' );
- ( $is_valid, $error ) = Koha::AuthUtils::is_password_valid( $p_15l_weak, $category1 );
- is($is_valid, 0, 'password should be strong for this category');
- is($error, 'too_weak', 'password should be strong for this category');
+ ( $is_valid, $error ) =
+ Koha::AuthUtils::is_password_valid( $p_15l_weak, $category1 );
+ is( $is_valid, 0, 'password should be strong for this category' );
+ is( $error, 'too_weak', 'password should be strong for this category' );
- ( $is_valid, $error ) = Koha::AuthUtils::is_password_valid( $p_15l_strong, $category1 );
- is($is_valid, 1, 'password should be ok for this category');
+ ( $is_valid, $error ) =
+ Koha::AuthUtils::is_password_valid( $p_15l_strong, $category1 );
+ is( $is_valid, 1, 'password should be ok for this category' );
#Category 2 - override=>1, length=>5, strong=>0
- ( $is_valid, $error ) = Koha::AuthUtils::is_password_valid( $p_3l_strong, $category2 );
- is($is_valid, 0, 'min password length for this category is 5');
- is($error, 'too_short', 'min password length for this category is 5');
+ ( $is_valid, $error ) =
+ Koha::AuthUtils::is_password_valid( $p_3l_strong, $category2 );
+ is( $is_valid, 0, 'min password length for this category is 5' );
+ is( $error, 'too_short', 'min password length for this category is 5' );
- ( $is_valid, $error ) = Koha::AuthUtils::is_password_valid( $p_5l_weak, $category2 );
- is($is_valid, 1, 'password should be ok for this category');
+ ( $is_valid, $error ) =
+ Koha::AuthUtils::is_password_valid( $p_5l_weak, $category2 );
+ is( $is_valid, 1, 'password should be ok for this category' );
#Category 3 - override=>0, length=>20, strong=>0
- ( $is_valid, $error ) = Koha::AuthUtils::is_password_valid( $p_3l_weak, $category3 );
- is($is_valid, 0, 'password should be strong');
- is($error, 'too_weak', 'password should be strong');
+ ( $is_valid, $error ) =
+ Koha::AuthUtils::is_password_valid( $p_3l_weak, $category3 );
+ is( $is_valid, 0, 'password should be strong' );
+ is( $error, 'too_weak', 'password should be strong' );
- ( $is_valid, $error ) = Koha::AuthUtils::is_password_valid( $p_3l_strong, $category3 );
- is($is_valid, 1, 'password should be ok');
+ ( $is_valid, $error ) =
+ Koha::AuthUtils::is_password_valid( $p_3l_strong, $category3 );
+ is( $is_valid, 1, 'password should be ok' );
#Category 4 - default settings - override=>undef, length=>undef, strong=>undef
- ( $is_valid, $error ) = Koha::AuthUtils::is_password_valid( $p_3l_weak, $category4 );
- is($is_valid, 1, 'password should be ok');
+ ( $is_valid, $error ) =
+ Koha::AuthUtils::is_password_valid( $p_3l_weak, $category4 );
+ is( $is_valid, 1, 'password should be ok' );
+
+ t::lib::Mocks::mock_preference( 'minPasswordLength', 0 );
+ ( $is_valid, $error ) =
+ Koha::AuthUtils::is_password_valid( $p_2l, $category4 );
+ is( $is_valid, 0, '3 is absolute minimum password' );
+ is( $error, 'too_short', '3 is absolute minimum password' );
+
+ throws_ok { Koha::AuthUtils::is_password_valid($p_2l); }
+ 'Koha::Exceptions::Password::NoCategoryProvided',
+ 'Category should always be provided';
+
};
subtest 'generate_password for category' => sub {
- plan tests => 4;
+ plan tests => 5;
my ( $is_valid, $error );
- t::lib::Mocks::mock_preference('RequireStrongPassword', 0);
- t::lib::Mocks::mock_preference('minPasswordLength', 3);
+ t::lib::Mocks::mock_preference( 'RequireStrongPassword', 0 );
+ t::lib::Mocks::mock_preference( 'minPasswordLength', 3 );
#Category 4
my $password = Koha::AuthUtils::generate_password($category4);
- ( $is_valid, $error ) = Koha::AuthUtils::is_password_valid( $password, $category4 );
- is($is_valid, 1, 'password should be ok');
+ ( $is_valid, $error ) =
+ Koha::AuthUtils::is_password_valid( $password, $category4 );
+ is( $is_valid, 1, 'password should be ok' );
#Category 3
$password = Koha::AuthUtils::generate_password($category3);
- ( $is_valid, $error ) = Koha::AuthUtils::is_password_valid( $password, $category3 );
- is($is_valid, 1, 'password should be ok');
+ ( $is_valid, $error ) =
+ Koha::AuthUtils::is_password_valid( $password, $category3 );
+ is( $is_valid, 1, 'password should be ok' );
#Category 2
$password = Koha::AuthUtils::generate_password($category2);
- ( $is_valid, $error ) = Koha::AuthUtils::is_password_valid( $password, $category2 );
- is($is_valid, 1, 'password should be ok');
+ ( $is_valid, $error ) =
+ Koha::AuthUtils::is_password_valid( $password, $category2 );
+ is( $is_valid, 1, 'password should be ok' );
#Category 1
$password = Koha::AuthUtils::generate_password($category1);
- ( $is_valid, $error ) = Koha::AuthUtils::is_password_valid( $password, $category1 );
- is($is_valid, 1, 'password should be ok');
+ ( $is_valid, $error ) =
+ Koha::AuthUtils::is_password_valid( $password, $category1 );
+ is( $is_valid, 1, 'password should be ok' );
+
+ throws_ok { Koha::AuthUtils::generate_password(); }
+ 'Koha::Exceptions::Password::NoCategoryProvided',
+ 'Category should always be provided';
};
-$schema->storage->txn_rollback;
\ No newline at end of file
+$schema->storage->txn_rollback;