use Modern::Perl;
use utf8;
-use Test::More tests => 60;
+use Test::More tests => 63;
use Test::Exception;
use Test::MockModule;
use Test::Deep qw( cmp_deeply );
use Koha::Account::Offsets;
use Koha::ActionLogs;
use Koha::Notice::Messages;
+use Koha::Cache::Memory::Lite;
+my $builder = t::lib::TestBuilder->new;
sub set_userenv {
my ( $library ) = @_;
- t::lib::Mocks::mock_userenv({ branchcode => $library->{branchcode} });
+ my $staff = $builder->build_object({ class => "Koha::Patrons" });
+ t::lib::Mocks::mock_userenv({ patron => $staff, branchcode => $library->{branchcode} });
}
sub str {
my $schema = Koha::Database->schema;
$schema->storage->txn_begin;
-my $builder = t::lib::TestBuilder->new;
my $dbh = C4::Context->dbh;
# Prevent random failures by mocking ->now
# Make sure fine calculation isn't skipped when adding renewal
t::lib::Mocks::mock_preference('CalculateFinesOnReturn', 1);
+ my $staff = $builder->build_object({ class => "Koha::Patrons" });
+ t::lib::Mocks::mock_userenv({ patron => $staff });
+
t::lib::Mocks::mock_preference('RenewalLog', 0);
my $date = output_pref( { dt => dt_from_string(), dateonly => 1, dateformat => 'iso' } );
my %params_renewal = (
is( $renewokay, 0, 'Still should not be able to renew' );
is( $error, 'on_reserve', 'returned code is on_reserve, auto_too_soon limit is overridden' );
$dbh->do('UPDATE circulation_rules SET rule_value = 0 where rule_name = "norenewalbefore"');
+ Koha::Cache::Memory::Lite->flush();
( $renewokay, $error ) = CanBookBeRenewed( $renewing_borrowernumber, $item_4->itemnumber, 1 );
is( $renewokay, 0, 'Still should not be able to renew' );
is( $error, 'on_reserve', 'returned code is on_reserve, auto_renew only happens if not on reserve' );
# Change policy so that loans can only be renewed exactly on due date (0 days prior to due date)
# and test automatic renewal again
$dbh->do(q{UPDATE circulation_rules SET rule_value = '0' WHERE rule_name = 'norenewalbefore'});
+ Koha::Cache::Memory::Lite->flush();
( $renewokay, $error, $info ) =
CanBookBeRenewed( $renewing_borrowernumber, $item_4->itemnumber );
is( $renewokay, 0, 'Bug 14101: Cannot renew, renewal is automatic and premature' );
# Change policy so that loans can be renewed 99 days prior to the due date
# and test automatic renewal again
$dbh->do(q{UPDATE circulation_rules SET rule_value = '99' WHERE rule_name = 'norenewalbefore'});
+ Koha::Cache::Memory::Lite->flush();
( $renewokay, $error ) =
CanBookBeRenewed( $renewing_borrowernumber, $item_4->itemnumber );
is( $renewokay, 0, 'Bug 14101: Cannot renew, renewal is automatic' );
$dbh->do(q{UPDATE circulation_rules SET rule_value = '10' WHERE rule_name = 'norenewalbefore'});
$dbh->do(q{UPDATE circulation_rules SET rule_value = '15' WHERE rule_name = 'no_auto_renewal_after'});
$dbh->do(q{UPDATE circulation_rules SET rule_value = NULL WHERE rule_name = 'no_auto_renewal_after_hard_limit'});
+ Koha::Cache::Memory::Lite->flush();
Koha::CirculationRules->set_rules(
{
categorycode => undef,
AddReturn( $item->barcode, $item->homebranch );
};
+subtest 'AddIssue & illrequests.due_date' => sub {
+ plan tests => 2;
+
+ t::lib::Mocks::mock_preference( 'ILLModule', 1 );
+ my $library = $builder->build( { source => 'Branch' } );
+ my $patron = $builder->build_object( { class => 'Koha::Patrons' } );
+ my $item = $builder->build_sample_item();
+
+ set_userenv($library);
+
+ my $custom_date_due = '9999-12-18 12:34:56';
+ my $expected_date_due = '9999-12-18 23:59:00';
+ my $illrequest = Koha::Illrequest->new({
+ borrowernumber => $patron->borrowernumber,
+ biblio_id => $item->biblionumber,
+ branchcode => $library->{'branchcode'},
+ due_date => $custom_date_due,
+ })->store;
+
+ my $issue = AddIssue( $patron->unblessed, $item->barcode );
+ is( $issue->date_due, $expected_date_due, 'Custom illrequest date due has been set for this issue');
+
+ $patron = $builder->build_object( { class => 'Koha::Patrons' } );
+ $item = $builder->build_sample_item();
+ $custom_date_due = '9999-12-19';
+ $expected_date_due = '9999-12-19 23:59:00';
+ $illrequest = Koha::Illrequest->new({
+ borrowernumber => $patron->borrowernumber,
+ biblio_id => $item->biblionumber,
+ branchcode => $library->{'branchcode'},
+ due_date => $custom_date_due,
+ })->store;
+
+ $issue = AddIssue( $patron->unblessed, $item->barcode );
+ is( $issue->date_due, $expected_date_due, 'Custom illrequest date due has been set for this issue');
+};
subtest 'CanBookBeIssued + Koha::Patron->is_debarred|has_overdues' => sub {
plan tests => 8;
}
);
- my $now = dt_from_string;
- my $five_days_go = output_pref({ dt => $now->clone->add( days => 5 ), dateonly => 1});
- my $ten_days_go = output_pref({ dt => $now->clone->add( days => 10), dateonly => 1 });
+ my $now = dt_from_string()->truncate( to => 'day' );
+ my $five_days_go = $now->clone->add( days => 5 );
+ my $ten_days_go = $now->clone->add( days => 10);
my $library = $builder->build( { source => 'Branch' } );
my $patron = $builder->build_object( { class => 'Koha::Patrons', value => { categorycode => $patron_category->{categorycode} } } );
my $issue = AddIssue( $patron->unblessed, $item->barcode, $five_days_go ); # date due was 10d ago
my $actualissue = Koha::Checkouts->find( { itemnumber => $item->itemnumber } );
- is( output_pref({ str => $actualissue->date_due, dateonly => 1}), $five_days_go, "First issue works");
+ is( output_pref({ str => $actualissue->date_due, dateonly => 1}), output_pref({ str => $five_days_go, dateonly => 1}), "First issue works");
my ($issuingimpossible, $needsconfirmation) = CanBookBeIssued($patron,$item->barcode,$ten_days_go, undef, undef, undef);
is( $needsconfirmation->{RENEW_ISSUE}, 1, "This is a renewal");
is( $needsconfirmation->{TOO_MANY}, undef, "Not too many, is a renewal");
}
});
my $future = dt_from_string->add( days => 1 );
- my $deny_issue = $builder->build_object({ class => 'Koha::Checkouts', value => {
- returndate => undef,
- renewals => 0,
- auto_renew => 0,
- borrowernumber => $idr_borrower->borrowernumber,
- itemnumber => $deny_book->itemnumber,
- onsite_checkout => 0,
- date_due => $future,
+ my $deny_issue = $builder->build_object(
+ {
+ class => 'Koha::Checkouts',
+ value => {
+ returndate => undef,
+ renewals_count => 0,
+ auto_renew => 0,
+ borrowernumber => $idr_borrower->borrowernumber,
+ itemnumber => $deny_book->itemnumber,
+ onsite_checkout => 0,
+ date_due => $future,
+ }
}
- });
- my $allow_issue = $builder->build_object({ class => 'Koha::Checkouts', value => {
- returndate => undef,
- renewals => 0,
- auto_renew => 0,
- borrowernumber => $idr_borrower->borrowernumber,
- itemnumber => $allow_book->itemnumber,
- onsite_checkout => 0,
- date_due => $future,
+ );
+ my $allow_issue = $builder->build_object(
+ {
+ class => 'Koha::Checkouts',
+ value => {
+ returndate => undef,
+ renewals_count => 0,
+ auto_renew => 0,
+ borrowernumber => $idr_borrower->borrowernumber,
+ itemnumber => $allow_book->itemnumber,
+ onsite_checkout => 0,
+ date_due => $future,
+ }
}
- });
+ );
my $idr_rules;
$recall1->set_cancelled;
};
+subtest 'AddReturn | bundles' => sub {
+ plan tests => 1;
+
+ my $schema = Koha::Database->schema;
+ $schema->storage->txn_begin;
+
+ my $patron1 = $builder->build_object({ class => 'Koha::Patrons' });
+ my $host_item1 = $builder->build_sample_item;
+ my $bundle_item1 = $builder->build_sample_item;
+ $schema->resultset('ItemBundle')
+ ->create(
+ { host => $host_item1->itemnumber, item => $bundle_item1->itemnumber } );
+
+ my ( $doreturn, $messages, $iteminfo, $borrowerinfo ) = AddReturn( $bundle_item1->barcode, $bundle_item1->homebranch );
+ is($messages->{InBundle}->id, $host_item1->id, 'AddReturn returns InBundle host item when item is part of a bundle');
+
+ $schema->storage->txn_rollback;
+};
+
subtest 'AddRenewal and AddIssuingCharge tests' => sub {
plan tests => 13;
};
+subtest 'AddRenewal() adds to renewals' => sub {
+ plan tests => 4;
+
+ my $library = $builder->build_object({ class => 'Koha::Libraries' });
+ my $patron = $builder->build_object({
+ class => 'Koha::Patrons',
+ value => { branchcode => $library->id }
+ });
+
+ my $item = $builder->build_sample_item();
+
+ set_userenv( $library->unblessed );
+
+ # Check the item out
+ my $issue = AddIssue( $patron->unblessed, $item->barcode );
+ is(ref($issue), 'Koha::Checkout', 'Issue added');
+
+ # Renew item
+ my $duedate = AddRenewal( $patron->id, $item->id, $library->id );
+
+ ok( $duedate, "Renewal added" );
+
+ my $renewals = Koha::Checkouts::Renewals->search({ checkout_id => $issue->issue_id });
+ is($renewals->count, 1, 'One renewal added');
+ my $THE_renewal = $renewals->next;
+ is( $THE_renewal->renewer_id, C4::Context->userenv->{'number'}, 'Renewer recorded from context' );
+};
+
subtest 'ProcessOfflinePayment() tests' => sub {
plan tests => 4;
};
subtest "SendCirculationAlert" => sub {
- plan tests => 2;
+ plan tests => 3;
# When you would unsuspectingly call this unit test (with perl, not prove), you will be bitten by LOCK.
# LOCK will commit changes and ruin your data
my $patron = $builder->build_object({ class => 'Koha::Patrons' });
C4::Members::Messaging::SetMessagingPreference({
borrowernumber => $patron->id,
- message_transport_types => ['email'],
+ message_transport_types => ['sms'],
message_attribute_id => 5
});
my $item = $builder->build_sample_item();
name => 'Test Checkin',
is_html => 0,
content => "Checkins:\n----\n[% biblio.title %]-[% old_checkout.issue_id %]\n----Thank you.",
- message_transport_type => 'email',
+ message_transport_type => 'sms',
lang => 'default'
}
})->store;
});
my $notice = Koha::Notice::Messages->find({ borrowernumber => $patron->id, letter_code => 'CHECKIN' });
is($notice->content,"Checkins:\n".$item->biblio->title."-".$issue_1->id."\nThank you.", 'Letter generated with expected output on first checkin' );
+ is($notice->to_address, $patron->smsalertnumber, "Letter has the correct to_address set to smsalertnumber for SMS type notices");
# Checkout an item, mark it returned, generate a notice
my $issue_2 = AddIssue( $patron->unblessed, $item->barcode);