#!/usr/bin/perl
+
+# This file is part of Koha.
+#
+# 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.
#
-# This is to test C4/Members
-# It requires a working Koha database with the sample data
+# You should have received a copy of the GNU General Public License
+# along with Koha; if not, see <http://www.gnu.org/licenses>.
-use strict;
-use warnings;
+use Modern::Perl;
-use Test::More tests => 23;
+use Test::More tests => 34;
use Data::Dumper;
+use C4::Context;
BEGIN {
use_ok('C4::Members');
}
+my $dbh = C4::Context->dbh;
+
+# Start transaction
+$dbh->{AutoCommit} = 0;
+$dbh->{RaiseError} = 1;
my $CARDNUMBER = 'TESTCARD01';
my $FIRSTNAME = 'Marie';
surname => $SURNAME,
categorycode => $CATEGORYCODE,
branchcode => $BRANCHCODE,
- dateofbirth => ''
+ dateofbirth => '',
+ dateexpiry => '9999-12-31',
+ userid => 'tomasito'
);
my $addmem=AddMember(%data);
ok (_find_member($results), "Search (arrayref) for independent branches, same branch")
or diag("Card $CARDNUMBER not found in the resultset for independent branches: ".Dumper(C4::Context->preference($INDEPENDENT_BRANCHES_PREF), $results));
+C4::Context->set_preference( 'CardnumberLength', '' );
+C4::Context->clear_syspref_cache();
my $checkcardnum=C4::Members::checkcardnumber($CARDNUMBER, "");
is ($checkcardnum, "1", "Card No. in use");
$checkcardnum=C4::Members::checkcardnumber($IMPOSSIBLE_CARDNUMBER, "");
is ($checkcardnum, "0", "Card No. not used");
+C4::Context->set_preference( 'CardnumberLength', '4' );
+C4::Context->clear_syspref_cache();
+
+$checkcardnum=C4::Members::checkcardnumber($IMPOSSIBLE_CARDNUMBER, "");
+is ($checkcardnum, "2", "Card number is too long");
+
my $age=GetAge("1992-08-14", "2011-01-19");
is ($age, "18", "Age correct");
$notice_email = GetNoticeEmailAddress($member->{'borrowernumber'});
is ($notice_email, $EMAILPRO, "GetNoticeEmailAddress returns correct value when AutoEmailPrimaryAddress is emailpro");
+ok(!$member->{is_expired}, "GetMemberDetails() indicates that patron is not expired");
+ModMember(borrowernumber => $member->{'borrowernumber'}, dateexpiry => '2001-01-1');
+$member = GetMemberDetails($member->{'borrowernumber'});
+ok($member->{is_expired}, "GetMemberDetails() indicates that patron is expired");
# clean up
DelMember($member->{borrowernumber});
ok (!_find_member($results), "Delete member")
or diag("Card $CARDNUMBER found for the deleted member in the resultset: ".Dumper($results));
-
-exit;
+# Check_Userid tests
+%data = (
+ cardnumber => "123456789",
+ firstname => "Tomasito",
+ surname => "None",
+ categorycode => "S",
+ branchcode => "MPL",
+ dateofbirth => '',
+ dateexpiry => '9999-12-31',
+ userid => 'tomasito'
+);
+# Add a new borrower
+my $borrowernumber = AddMember( %data );
+is( Check_Userid( 'tomasito', $borrowernumber ), 1,
+ 'recently created userid -> unique (borrowernumber passed)' );
+is( Check_Userid( 'tomasitoxxx', $borrowernumber ), 1,
+ 'non-existent userid -> unique (borrowernumber passed)' );
+is( Check_Userid( 'tomasito', '' ), 0,
+ 'userid exists (blank borrowernumber)' );
+is( Check_Userid( 'tomasitoxxx', '' ), 1,
+ 'non-existent userid -> unique (blank borrowernumber)' );
+
+# Add a new borrower with the same userid but different cardnumber
+$data{ cardnumber } = "987654321";
+my $new_borrowernumber = AddMember( %data );
+is( Check_Userid( 'tomasito', '' ), 0,
+ 'userid not unique (blank borrowernumber)' );
+is( Check_Userid( 'tomasito', $borrowernumber ), 0,
+ 'userid not unique (first borrowernumber passed)' );
+is( Check_Userid( 'tomasito', $new_borrowernumber ), 0,
+ 'userid not unique (second borrowernumber passed)' );
+
+# Regression tests for BZ12226
+is( Check_Userid( C4::Context->config('user'), '' ), 0,
+ 'Check_Userid should return 0 for the DB user (Bug 12226)');
sub _find_member {
my ($resultset) = @_;
my $found = $resultset && grep( { $_->{cardnumber} && $_->{cardnumber} eq $CARDNUMBER } @$resultset );
return $found;
}
+
+1;
\ No newline at end of file