Koha/t/db_dependent/Circulation_dateexpiry.t
Tomas Cohen Arazi 9d82253d0a Bug 15081: (followup) Make test files using TestBuilder handle their transactions
This trivial patch introduces the code needed on the test files so they handle
the DB transaction instead of relying on the (removed) transaction started/rolled back
by TestBuilder.

Tested all of the files before and after applying the patch, resultes are the same.
(Pass exept of t/db_dependent/Barcodes_ValueBuilder.t, this has the same error).
Signed-off-by: Marc Véron <veron@veron.ch>

Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
2015-11-04 12:32:57 -03:00

123 lines
4.9 KiB
Perl

#!/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.
#
# 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 DateTime;
use Time::HiRes qw/gettimeofday time/;
use Test::More tests => 2;
use C4::Members;
use Koha::DateUtils;
use Koha::Database;
use t::lib::TestBuilder;
use t::lib::Mocks qw( mock_preference );
my $schema = Koha::Database->new->schema;
$schema->storage->txn_begin;
my $builder = t::lib::TestBuilder->new();
$ENV{ DEBUG } = 0;
subtest 'Tests for CanBookBeIssued related to dateexpiry' => sub {
plan tests => 4;
can_book_be_issued();
};
subtest 'Tests for CalcDateDue related to dateexpiry' => sub {
plan tests => 4;
calc_date_due();
};
sub can_book_be_issued {
my $item = $builder->build( { source => 'Item' } );
my $patron = $builder->build(
{ source => 'Borrower',
value => { dateexpiry => '9999-12-31' }
}
);
$patron->{flags} = C4::Members::patronflags( $patron );
my $duration = gettimeofday();
my ( $issuingimpossible, $needsconfirmation ) = C4::Circulation::CanBookBeIssued( $patron, $item->{barcode} );
$duration = gettimeofday() - $duration;
cmp_ok $duration, '<', 1, "CanBookBeIssued should not be take more than 1s if the patron is expired";
is( not( exists $issuingimpossible->{EXPIRED} ), 1, 'The patron should not be considered as expired if dateexpiry is 9999-*' );
$item = $builder->build( { source => 'Item' } );
$patron = $builder->build(
{ source => 'Borrower',
value => { dateexpiry => '0000-00-00' }
}
);
$patron->{flags} = C4::Members::patronflags( $patron );
( $issuingimpossible, $needsconfirmation ) = C4::Circulation::CanBookBeIssued( $patron, $item->{barcode} );
is( $issuingimpossible->{EXPIRED}, 1, 'The patron should be considered as expired if dateexpiry is 0000-00-00' );
my $tomorrow = dt_from_string->add_duration( DateTime::Duration->new( days => 1 ) );
$item = $builder->build( { source => 'Item' } );
$patron = $builder->build(
{ source => 'Borrower',
value => { dateexpiry => output_pref( { dt => $tomorrow, dateonly => 1, dateformat => 'sql' } ) },
}
);
$patron->{flags} = C4::Members::patronflags( $patron );
( $issuingimpossible, $needsconfirmation ) = C4::Circulation::CanBookBeIssued( $patron, $item->{barcode} );
is( not( exists $issuingimpossible->{EXPIRED} ), 1, 'The patron should not be considered as expired if dateexpiry is tomorrow' );
}
sub calc_date_due {
t::lib::Mocks::mock_preference( 'ReturnBeforeExpiry', 1 );
# this triggers the compare between expiry and due date
my $patron = $builder->build( { source => 'Borrower' } );
my $item = $builder->build( { source => 'Item' } );
my $branch = $builder->build( { source => 'Branch' } );
my $today = dt_from_string();
# first test with empty expiry date
# note that this expiry date will never lead to an issue btw !!
$patron->{dateexpiry} = '0000-00-00';
my $d = C4::Circulation::CalcDateDue( $today, $item->{itype}, $branch->{branchcode}, $patron );
is( ref $d eq "DateTime" && $d->mdy() =~ /^\d+/, 1, "CalcDateDue with expiry 0000-00-00" );
# second test expiry date==today
my $d2 = output_pref( { dt => $today, dateonly => 1, dateformat => 'sql' } );
$patron->{dateexpiry} = $d2;
$d = C4::Circulation::CalcDateDue( $today, $item->{itype}, $branch->{branchcode}, $patron );
is( ref $d eq "DateTime" && DateTime->compare( $d->truncate( to => 'day' ), $today->truncate( to => 'day' ) ) == 0, 1, "CalcDateDue with expiry today" );
# third test expiry date tomorrow
my $dur = DateTime::Duration->new( days => 1 );
my $tomorrow = $today->clone->add_duration($dur);
$d2 = output_pref( { dt => $tomorrow, dateonly => 1, dateformat => 'sql' } );
$patron->{dateexpiry} = $d2;
$d = C4::Circulation::CalcDateDue( $today, $item->{itype}, $branch->{branchcode}, $patron );
is( ref $d eq "DateTime" && $d->mdy() =~ /^\d+/, 1, "CalcDateDue with expiry tomorrow" );
# fourth test far future
$patron->{dateexpiry} = '9876-12-31';
my $t1 = time;
$d = C4::Circulation::CalcDateDue( $today, $item->{itype}, $branch->{branchcode}, $patron );
my $t2 = time;
is( ref $d eq "DateTime" && $t2 - $t1 < 1, 1, "CalcDateDue with expiry in year 9876 in " . sprintf( "%6.4f", $t2 - $t1 ) . " seconds." );
}
$schema->storage->txn_rollback;
1;