|
Lines 20-25
Link Here
|
| 20 |
use Modern::Perl; |
20 |
use Modern::Perl; |
| 21 |
|
21 |
|
| 22 |
use Test::More tests => 1; |
22 |
use Test::More tests => 1; |
|
|
23 |
use Test::Warn; |
| 23 |
|
24 |
|
| 24 |
use C4::Reserves; |
25 |
use C4::Reserves; |
| 25 |
use Koha::Holds; |
26 |
use Koha::Holds; |
|
Lines 34-40
$schema->storage->txn_begin;
Link Here
|
| 34 |
my $builder = t::lib::TestBuilder->new; |
35 |
my $builder = t::lib::TestBuilder->new; |
| 35 |
|
36 |
|
| 36 |
subtest 'cancel' => sub { |
37 |
subtest 'cancel' => sub { |
| 37 |
plan tests => 10; |
38 |
plan tests => 12; |
| 38 |
my $biblioitem = $builder->build_object( { class => 'Koha::Biblioitems' } ); |
39 |
my $biblioitem = $builder->build_object( { class => 'Koha::Biblioitems' } ); |
| 39 |
my $library = $builder->build_object( { class => 'Koha::Libraries' } ); |
40 |
my $library = $builder->build_object( { class => 'Koha::Libraries' } ); |
| 40 |
my $itemtype = $builder->build_object( { class => 'Koha::ItemTypes', value => { rentalcharge => 0 } } ); |
41 |
my $itemtype = $builder->build_object( { class => 'Koha::ItemTypes', value => { rentalcharge => 0 } } ); |
|
Lines 147-152
subtest 'cancel' => sub {
Link Here
|
| 147 |
my $hold_old = Koha::Old::Holds->find( $reserve_id ); |
148 |
my $hold_old = Koha::Old::Holds->find( $reserve_id ); |
| 148 |
is( $hold_old->found, 'W', 'The found column should have been kept and a hold is cancelled' ); |
149 |
is( $hold_old->found, 'W', 'The found column should have been kept and a hold is cancelled' ); |
| 149 |
}; |
150 |
}; |
|
|
151 |
|
| 152 |
subtest 'HoldsLog' => sub { |
| 153 |
plan tests => 2; |
| 154 |
my $patron = $builder->build_object({ class => 'Koha::Patrons' }); |
| 155 |
my @hold_info = ( |
| 156 |
$library->branchcode, $patron->borrowernumber, |
| 157 |
$item->biblionumber, '', |
| 158 |
1, undef, |
| 159 |
undef, '', |
| 160 |
"title for fee", $item->itemnumber, |
| 161 |
); |
| 162 |
|
| 163 |
t::lib::Mocks::mock_preference('HoldsLog', 0); |
| 164 |
my $reserve_id = C4::Reserves::AddReserve(@hold_info); |
| 165 |
Koha::Holds->find( $reserve_id )->cancel; |
| 166 |
my $number_of_logs = $schema->resultset('ActionLog')->search( { module => 'HOLDS', action => 'CANCEL', object => $reserve_id } )->count; |
| 167 |
is( $number_of_logs, 0, 'Without HoldsLog, Koha::Hold->cancel should not have logged' ); |
| 168 |
|
| 169 |
t::lib::Mocks::mock_preference('HoldsLog', 1); |
| 170 |
$reserve_id = C4::Reserves::AddReserve(@hold_info); |
| 171 |
Koha::Holds->find( $reserve_id )->cancel; |
| 172 |
$number_of_logs = $schema->resultset('ActionLog')->search( { module => 'HOLDS', action => 'CANCEL', object => $reserve_id } )->count; |
| 173 |
is( $number_of_logs, 1, 'With HoldsLog, Koha::Hold->cancel should have logged' ); |
| 174 |
}; |
| 175 |
|
| 176 |
subtest 'rollback' => sub { |
| 177 |
plan tests => 3; |
| 178 |
my $patron_category = $builder->build_object( |
| 179 |
{ |
| 180 |
class => 'Koha::Patron::Categories', |
| 181 |
value => { reservefee => 0 } |
| 182 |
} |
| 183 |
); |
| 184 |
my $patron = $builder->build_object( |
| 185 |
{ |
| 186 |
class => 'Koha::Patrons', |
| 187 |
value => { categorycode => $patron_category->categorycode } |
| 188 |
} |
| 189 |
); |
| 190 |
my @hold_info = ( |
| 191 |
$library->branchcode, $patron->borrowernumber, |
| 192 |
$item->biblionumber, '', |
| 193 |
1, undef, |
| 194 |
undef, '', |
| 195 |
"title for fee", $item->itemnumber, |
| 196 |
); |
| 197 |
|
| 198 |
t::lib::Mocks::mock_preference( 'ExpireReservesMaxPickUpDelayCharge',42 ); |
| 199 |
my $reserve_id = C4::Reserves::AddReserve(@hold_info); |
| 200 |
my $hold = Koha::Holds->find($reserve_id); |
| 201 |
|
| 202 |
# Add a row with the same id to make the cancel fails |
| 203 |
Koha::Old::Hold->new( $hold->unblessed )->store; |
| 204 |
|
| 205 |
warning_like { |
| 206 |
eval { $hold->cancel( { charge_cancel_fee => 1 } ) }; |
| 207 |
} |
| 208 |
qr{.*DBD::mysql::st execute failed: Duplicate entry.*}, |
| 209 |
'DBD should have raised an error about dup primary key'; |
| 210 |
|
| 211 |
$hold = Koha::Holds->find($reserve_id); |
| 212 |
is( ref($hold), 'Koha::Hold', 'The hold should not have been deleted' ); |
| 213 |
is( $patron->account->balance, 0, |
| 214 |
'If the hold has not been cancelled, the patron should not have been charged' |
| 215 |
); |
| 216 |
}; |
| 217 |
|
| 150 |
}; |
218 |
}; |
| 151 |
|
219 |
|
| 152 |
$schema->storage->txn_rollback; |
220 |
$schema->storage->txn_rollback; |
| 153 |
- |
|
|