From e2032ccfd3102247ed2fe639ed0117ba7ac602d8 Mon Sep 17 00:00:00 2001 From: Kyle M Hall Date: Wed, 29 Apr 2020 07:22:26 -0400 Subject: [PATCH] Bug 14708: Don't allow merging of other patron records into Anonymous Patron Signed-off-by: Andrew Fuerste-Henry Signed-off-by: Katrin Fischer Signed-off-by: Jonathan Druart --- Koha/Patron.pm | 7 ++++--- t/db_dependent/Koha/Patrons.t | 7 ++++++- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/Koha/Patron.pm b/Koha/Patron.pm index 1752d5a153..8ff4462df1 100644 --- a/Koha/Patron.pm +++ b/Koha/Patron.pm @@ -603,6 +603,9 @@ sub siblings { sub merge_with { my ( $self, $patron_ids ) = @_; + my $anonymous_patron = C4::Context->preference("AnonymousPatron"); + return if $anonymous_patron && $self->id eq $anonymous_patron; + my @patron_ids = @{ $patron_ids }; # Ensure the keeper isn't in the list of patrons to merge @@ -615,9 +618,7 @@ sub merge_with { $self->_result->result_source->schema->txn_do( sub { foreach my $patron_id (@patron_ids) { - if ( my $anonymous_patron = C4::Context->preference("AnonymousPatron") ) { - next if $patron_id eq $anonymous_patron; - } + next if $patron_id eq $anonymous_patron; my $patron = Koha::Patrons->find( $patron_id ); diff --git a/t/db_dependent/Koha/Patrons.t b/t/db_dependent/Koha/Patrons.t index e8807b9b4d..a267ca58eb 100755 --- a/t/db_dependent/Koha/Patrons.t +++ b/t/db_dependent/Koha/Patrons.t @@ -1603,7 +1603,7 @@ subtest 'BorrowersLog tests' => sub { $schema->storage->txn_rollback; subtest 'Test Koha::Patrons::merge' => sub { - plan tests => 111; + plan tests => 113; my $schema = Koha::Database->new()->schema(); @@ -1649,6 +1649,11 @@ subtest 'Test Koha::Patrons::merge' => sub { is( Koha::Patrons->find($loser_2), undef, 'Loser 2 has been deleted' ); is( ref Koha::Patrons->find($anonymous_patron), 'Koha::Patron', 'Anonymous Patron was not deleted' ); + $anonymous_patron = Koha::Patrons->find($anonymous_patron); + $results = $anonymous_patron->merge_with( [ $keeper->id ] ); + is( $results, undef, "Anonymous patron cannot have other patrons merged into it" ); + is( Koha::Patrons->search( { borrowernumber => $keeper->id } )->count, 1, "Patron from attempted merge with AnonymousPatron still exists" ); + t::lib::Mocks::mock_preference( 'AnonymousPatron', '' ); $schema->storage->txn_rollback; }; -- 2.39.5