use Test::MockModule;
use Data::Dumper;
use C4::Context;
-use C4::Members::Attributes qw( SetBorrowerAttributes );
-use C4::Members::AttributeTypes;
BEGIN {
use_ok('C4::Members');
my $CHANGED_FIRSTNAME = "Marry Ann";
my $EMAIL = "Marie\@email.com";
my $EMAILPRO = "Marie\@work.com";
-my $ETHNICITY = "German";
my $PHONE = "555-12123";
# XXX should be randomised and checked against the database
my $IMPOSSIBLE_CARDNUMBER = "XYZZZ999";
-my $INDEPENDENT_BRANCHES_PREF = 'IndependentBranches';
-
# XXX make a non-commit transaction and rollback rather than insert/delete
#my ($usernum, $userid, $usercnum, $userfirstname, $usersurname, $userbranch, $branchname, $userflags, $emailaddress, $branchprinter)= @_;
$member->{firstname} = $CHANGED_FIRSTNAME;
$member->{email} = $EMAIL;
-$member->{ethnicity} = $ETHNICITY;
$member->{phone} = $PHONE;
$member->{emailpro} = $EMAILPRO;
ModMember(%$member);
my $changedmember=GetMemberDetails("",$CARDNUMBER);
ok ( $changedmember->{firstname} eq $CHANGED_FIRSTNAME &&
$changedmember->{email} eq $EMAIL &&
- $changedmember->{ethnicity} eq $ETHNICITY &&
$changedmember->{phone} eq $PHONE &&
$changedmember->{emailpro} eq $EMAILPRO
, "Member Changed")
or diag("Mismatching member details: ".Dumper($member, $changedmember));
-C4::Context->set_preference( $INDEPENDENT_BRANCHES_PREF, '0' );
-C4::Context->clear_syspref_cache();
-
-my $results = Search($CARDNUMBER);
-ok (@$results == 1, "Search cardnumber returned only one result")
- or diag("Multiple members with Card $CARDNUMBER: ".Dumper($results));
-ok (_find_member($results), "Search cardnumber")
- or diag("Card $CARDNUMBER not found in the resultset: ".Dumper($results));
-
-my @searchstring=($SURNAME);
-$results = Search(\@searchstring);
-ok (_find_member($results), "Search (arrayref)")
- or diag("Card $CARDNUMBER not found in the resultset: ".Dumper($results));
-
-$results = Search(\@searchstring,undef,undef,undef,["surname"]);
-ok (_find_member($results), "Surname Search (arrayref)")
- or diag("Card $CARDNUMBER not found in the resultset: ".Dumper($results));
-
-$results = Search("$CHANGED_FIRSTNAME $SURNAME", "surname");
-ok (_find_member($results), "Full name Search (string)")
- or diag("Card $CARDNUMBER not found in the resultset: ".Dumper($results));
-
-@searchstring=($PHONE);
-$results = Search(\@searchstring,undef,undef,undef,["phone"]);
-ok (_find_member($results), "Phone Search (arrayref)")
- or diag("Card $CARDNUMBER not found in the resultset: ".Dumper($results));
-
-$results = Search($PHONE,undef,undef,undef,["phone"]);
-ok (_find_member($results), "Phone Search (string)")
- or diag("Card $CARDNUMBER not found in the resultset: ".Dumper($results));
-
-C4::Context->set_preference( $INDEPENDENT_BRANCHES_PREF, '1' );
-C4::Context->clear_syspref_cache();
-
-$results = Search("$CHANGED_FIRSTNAME $SURNAME", "surname");
-ok (!_find_member($results), "Full name Search (string) for independent branches, different branch")
- or diag("Card $CARDNUMBER found in the resultset for independent branches: ".Dumper(C4::Context->preference($INDEPENDENT_BRANCHES_PREF), $results));
-
-@searchstring=($SURNAME);
-$results = Search(\@searchstring);
-ok (!_find_member($results), "Search (arrayref) for independent branches, different branch")
- or diag("Card $CARDNUMBER found in the resultset for independent branches: ".Dumper(C4::Context->preference($INDEPENDENT_BRANCHES_PREF), $results));
-
-$USERENV[$BRANCH_IDX] = $BRANCHCODE;
-C4::Context->set_userenv ( @USERENV );
-
-$results = Search("$CHANGED_FIRSTNAME $SURNAME", "surname");
-ok (_find_member($results), "Full name Search (string) 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));
-
-@searchstring=($SURNAME);
-$results = Search(\@searchstring);
-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('ExtendedPatronAttributes', 1);
-my $attr_type = C4::Members::AttributeTypes->new("TEST", "Test Description");
-$attr_type->staff_searchable(1);
-$attr_type->store();
-SetBorrowerAttributes($addmem, [ { code => 'TEST', value => 'XYZZYX' } ] );
-$results = Search( "XYZZYX", undef, undef, undef, undef, undef, 1 );
-is( @$results, 0, "Search without extended attributes returns no results" );
-$results = Search( "XYZZYX", undef, undef, undef, undef, undef, 0 );
-is( @$results, 1, "Search with extended attributes returns results" );
-
C4::Context->set_preference( 'CardnumberLength', '' );
C4::Context->clear_syspref_cache();
# clean up
DelMember($member->{borrowernumber});
-$results = Search($CARDNUMBER,undef,undef,undef,["cardnumber"]);
-ok (!_find_member($results), "Delete member")
- or diag("Card $CARDNUMBER found for the deleted member in the resultset: ".Dumper($results));
+my $borrower = GetMember( cardnumber => $CARDNUMBER );
+is( $borrower, undef, 'DelMember should remove the patron' );
# Check_Userid tests
%data = (
categorycode => "S",
branchcode => "MPL",
dateofbirth => '',
- dateexpiry => '9999-12-31',
+ debarred => '',
+ dateexpiry => '',
+ dateenrolled => '',
);
# Add a new borrower
my $borrowernumber = AddMember( %data );
is( Check_Userid( 'tomasitoxxx', '' ), 1,
'non-existent userid -> unique (blank borrowernumber)' );
+$borrower = GetMember( borrowernumber => $borrowernumber );
+is( $borrower->{dateofbirth}, undef, 'AddMember should undef dateofbirth if empty string is given');
+is( $borrower->{debarred}, undef, 'AddMember should undef debarred if empty string is given');
+isnt( $borrower->{dateexpiry}, '0000-00-00', 'AddMember should not set dateexpiry to 0000-00-00 if empty string is given');
+isnt( $borrower->{dateenrolled}, '0000-00-00', 'AddMember should not set dateenrolled to 0000-00-00 if empty string is given');
+
+ModMember( borrowernumber => $borrowernumber, dateofbirth => '', debarred => '', dateexpiry => '', dateenrolled => '' );
+$borrower = GetMember( borrowernumber => $borrowernumber );
+is( $borrower->{dateofbirth}, undef, 'ModMember should undef dateofbirth if empty string is given');
+is( $borrower->{debarred}, undef, 'ModMember should undef debarred if empty string is given');
+isnt( $borrower->{dateexpiry}, '0000-00-00', 'ModMember should not set dateexpiry to 0000-00-00 if empty string is given');
+isnt( $borrower->{dateenrolled}, '0000-00-00', 'ModMember should not set dateenrolled to 0000-00-00 if empty string is given');
+
+ModMember( borrowernumber => $borrowernumber, dateofbirth => '1970-01-01', debarred => '2042-01-01', dateexpiry => '9999-12-31', dateenrolled => '2015-09-06' );
+$borrower = GetMember( borrowernumber => $borrowernumber );
+is( $borrower->{dateofbirth}, '1970-01-01', 'ModMember should correctly set dateofbirth if a valid date is given');
+is( $borrower->{debarred}, '2042-01-01', 'ModMember should correctly set debarred if a valid date is given');
+is( $borrower->{dateexpiry}, '9999-12-31', 'ModMember should correctly set dateexpiry if a valid date is given');
+is( $borrower->{dateenrolled}, '2015-09-06', 'ModMember should correctly set dateenrolled if a valid date is given');
+
# Add a new borrower with the same userid but different cardnumber
$data{ cardnumber } = "987654321";
my $new_borrowernumber = AddMember( %data );
'userid not unique (blank borrowernumber)' );
is( Check_Userid( 'tomasito.none', $new_borrowernumber ), 0,
'userid not unique (second borrowernumber passed)' );
-my $borrower = GetMember( borrowernumber => $new_borrowernumber );
+$borrower = GetMember( borrowernumber => $new_borrowernumber );
ok( $borrower->{userid} ne 'tomasito', "Borrower with duplicate userid has new userid generated" );
$data{ cardnumber } = "234567890";
$dbh->rollback();
};
+subtest 'purgeSelfRegistration' => sub {
+ plan tests => 2;
+
+ #purge unverified
+ my $d=360;
+ C4::Members::DeleteUnverifiedOpacRegistrations($d);
+ foreach(1..3) {
+ $dbh->do("INSERT INTO borrower_modifications (timestamp, borrowernumber, verification_token) VALUES ('2014-01-01 01:02:03',0,?)", undef, (scalar localtime)."_$_");
+ }
+ is( C4::Members::DeleteUnverifiedOpacRegistrations($d), 3, 'Test for DeleteUnverifiedOpacRegistrations' );
+
+ #purge members in temporary category
+ my $c= 'XYZ';
+ $dbh->do("INSERT IGNORE INTO categories (categorycode) VALUES ('$c')");
+ C4::Context->set_preference('PatronSelfRegistrationDefaultCategory', $c );
+ C4::Context->set_preference('PatronSelfRegistrationExpireTemporaryAccountsDelay', 360);
+ C4::Members::DeleteExpiredOpacRegistrations();
+ $dbh->do("INSERT INTO borrowers (surname, address, city, branchcode, categorycode, dateenrolled) VALUES ('Testaabbcc', 'Street 1', 'CITY', 'CPL', '$c', '2014-01-01 01:02:03')");
+ is( C4::Members::DeleteExpiredOpacRegistrations(), 1, 'Test for DeleteExpiredOpacRegistrations');
+ $dbh->rollback();
+};
+
sub _find_member {
my ($resultset) = @_;
my $found = $resultset && grep( { $_->{cardnumber} && $_->{cardnumber} eq $CARDNUMBER } @$resultset );