Bug 29525: Make Koha::Hold->fill anonymize if required

This patch makes filling a hold anonymize it on the same call, if
settings require it (i.e. if borrowers.privacy is set to 2).

To test:
1. Apply this patch
2. Run:
   $ kshell
  k$ prove t/db_dependent/Koha/Hold.t
=> SUCCESS: The code actually does what it is meant to
3. Try on the UI, notice it gets anonymized if the patron has privacy == always/2.
4. Sign off :-D

Note: AnonymousPatron should be set. Otherwise it would set NULL. But
that's fine, that's what Koha does already.

Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>

Signed-off-by: Andrew Fuerste-Henry <andrew@bywatersolutions.com>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
Signed-off-by: Fridolin Somers <fridolin.somers@biblibre.com>
This commit is contained in:
Tomás Cohen Arazi 2022-01-13 14:40:04 -03:00 committed by Fridolin Somers
parent 2f3926965f
commit 4c2f4a302e
2 changed files with 67 additions and 2 deletions

View file

@ -607,7 +607,11 @@ sub fill {
}
);
$self->_move_to_old;
my $old_me = $self->_move_to_old;
# anonymize if required
$old_me->anonymize
if $patron->privacy == 2;
$self->SUPER::delete(); # Do not add a DELETE log
# now fix the priority on the others....

View file

@ -38,7 +38,7 @@ my $builder = t::lib::TestBuilder->new;
subtest 'fill() tests' => sub {
plan tests => 11;
plan tests => 12;
$schema->storage->txn_begin;
@ -164,6 +164,67 @@ subtest 'fill() tests' => sub {
is( $logs->count, 0, 'HoldsLog disabled, no logs added' );
subtest 'anonymization behavior tests' => sub {
plan tests => 4;
# reduce the tests noise
t::lib::Mocks::mock_preference( 'HoldsLog', 0 );
t::lib::Mocks::mock_preference( 'HoldFeeMode', 'not_always' );
# 0 == keep forever
$patron->privacy(0)->store;
my $hold = $builder->build_object(
{
class => 'Koha::Holds',
value => { borrowernumber => $patron->id, status => undef }
}
);
$hold->fill();
is( Koha::Old::Holds->find( $hold->id )->borrowernumber,
$patron->borrowernumber, 'Patron link is kept' );
# 1 == "default", meaning it is not protected from removal
$patron->privacy(1)->store;
$hold = $builder->build_object(
{
class => 'Koha::Holds',
value => { borrowernumber => $patron->id, status => undef }
}
);
$hold->fill();
is( Koha::Old::Holds->find( $hold->id )->borrowernumber,
$patron->borrowernumber, 'Patron link is kept' );
# 2 == delete immediately
$patron->privacy(2)->store;
$hold = $builder->build_object(
{
class => 'Koha::Holds',
value => { borrowernumber => $patron->id, status => undef }
}
);
$hold->fill();
is( Koha::Old::Holds->find( $hold->id )->borrowernumber,
undef, 'Patron link is deleted immediately' );
my $anonymous_patron = $builder->build_object({ class => 'Koha::Patrons' });
t::lib::Mocks::mock_preference( 'AnonymousPatron', $anonymous_patron->id );
$hold = $builder->build_object(
{
class => 'Koha::Holds',
value => { borrowernumber => $patron->id, status => undef }
}
);
$hold->cancel();
is(
Koha::Old::Holds->find( $hold->id )->borrowernumber,
$anonymous_patron->id,
'Patron link is set to the configured anonymous patron immediately'
);
};
$schema->storage->txn_rollback;
};