From 07f16b44c002b4e2fb1ff20e76e31795f2b61aba Mon Sep 17 00:00:00 2001
From: Kyle M Hall <kyle@bywatersolutions.com>
Date: Wed, 29 Apr 2020 07:22:26 -0400
Subject: [PATCH] Bug 14708: Don't allow merging of other patron records into
 Anonymous Patron

---
 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 e5c2202f38..e909686f60 100644
--- a/Koha/Patron.pm
+++ b/Koha/Patron.pm
@@ -543,6 +543,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
@@ -555,9 +558,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 fca1be5dbd..ffb3300a80 100644
--- a/t/db_dependent/Koha/Patrons.t
+++ b/t/db_dependent/Koha/Patrons.t
@@ -1683,7 +1683,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();
 
@@ -1729,6 +1729,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.24.2 (Apple Git-127)