From a9b564678e184b44b4c54d72e21f66efc3810f4e Mon Sep 17 00:00:00 2001 From: Jonathan Druart Date: Mon, 9 Sep 2013 14:12:05 +0200 Subject: [PATCH] Bug 10843: fix crash that can occur when confirming hold if ReservesMaxPickUpDelay is undefined Test plan: 1) set an empty string for the ReservesMaxPickUpDelay pref 2) place a hold on an item 3) check in the item 4) click on "Print and confirm" 5) an error occurs > The 'days' parameter (undef) to DateTime::Duration::new was an 'undef' 6) apply the patch 7) repeat steps 1 to 4 8) the error does not occur anymore. Signed-off-by: Srdjan Signed-off-by: Katrin Fischer An empty string didn't do it for me, I had to set the variable for the systempreference to NULL. I am not sure if this can happen when editing from the interface, but this change should not have any ill side effects and it has unit tests! Signed-off-by: Galen Charlton --- C4/Letters.pm | 2 +- t/Letters.t | 18 ++++++++++++++---- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/C4/Letters.pm b/C4/Letters.pm index 345ec3bf74..712514896e 100644 --- a/C4/Letters.pm +++ b/C4/Letters.pm @@ -613,7 +613,7 @@ sub _parseletter { my @waitingdate = split /-/, $values->{'waitingdate'}; my $dt = dt_from_string(); - $dt->add( days => C4::Context->preference('ReservesMaxPickUpDelay') ); + $dt->add( days => C4::Context->preference('ReservesMaxPickUpDelay') || 0); $values->{'expirationdate'} = output_pref({ dt => $dt, dateonly => 1 }); $values->{'waitingdate'} = output_pref({ dt => dt_from_string( $values->{'waitingdate'} ), dateonly => 1 }); diff --git a/t/Letters.t b/t/Letters.t index 2d5f557bc2..7cbf6c8e86 100755 --- a/t/Letters.t +++ b/t/Letters.t @@ -3,11 +3,11 @@ # This Koha test module is a stub! # Add more tests here!!! -use strict; -use warnings; +use Modern::Perl; +use DBI; use Test::MockModule; -use Test::More tests => 2; - +use Test::More tests => 4; +use t::lib::Mocks; my $module = new Test::MockModule('C4::Context'); $module->mock( '_new_dbh', @@ -32,3 +32,13 @@ $dbh->{mock_add_resultset} = $mock_letters; my $letters = C4::Letters::GetLetters(); is( $letters->{ISBN}, 'book', 'HASH ref of ISBN is book' ); + +# Regression test for bug 10843 +# $dt->add takes a scalar, not undef +my $letter; +t::lib::Mocks::mock_preference('ReservesMaxPickUpDelay', undef); +$letter = C4::Letters::_parseletter( undef, 'reserves', {waitingdate => "2013-01-01"} ); +is( ref($letter), 'HASH'); +t::lib::Mocks::mock_preference('ReservesMaxPickUpDelay', 1); +$letter = C4::Letters::_parseletter( undef, 'reserves', {waitingdate => "2013-01-01"} ); +is( ref($letter), 'HASH'); -- 2.39.5