From dea7caa09bfe067580e4ed5901e0bd827a7da3e0 Mon Sep 17 00:00:00 2001
From: Nick <nick@bywatersolutions.com>
Date: Wed, 30 Oct 2019 14:07:02 +0000
Subject: [PATCH] Bug 17374: (follow-up) Unit tests and remove warns

Signed-off-by: Maxime Dufresne <maxime.dufresne@inlibro.com>
---
 C4/Utils/DataTables/Members.pm            |  2 --
 members/member.pl                         |  1 -
 t/db_dependent/Utils/Datatables_Members.t | 22 ++++++++++++++++++++--
 t/db_dependent/selenium/patrons_search.t  | 22 +++++++++++++++++++++-
 4 files changed, 41 insertions(+), 6 deletions(-)

diff --git a/C4/Utils/DataTables/Members.pm b/C4/Utils/DataTables/Members.pm
index 5c54fe0c16..4488514b7c 100644
--- a/C4/Utils/DataTables/Members.pm
+++ b/C4/Utils/DataTables/Members.pm
@@ -14,7 +14,6 @@ sub search {
     my $branchcode = $params->{branchcode};
     my $searchtype = $params->{searchtype} || 'contain';
     my $searchfieldstype = $params->{searchfieldstype} || 'standard';
-    warn $searchfieldstype;
     my $dt_params = $params->{dt_params};
 
     unless ( $searchmember ) {
@@ -146,7 +145,6 @@ sub search {
 
     my $where;
     $where = " WHERE " . join (" AND ", @where_strs) if @where_strs;
-    warn $where;
     my $orderby = dt_build_orderby($dt_params);
 
     my $limit;
diff --git a/members/member.pl b/members/member.pl
index a495b21256..2c136c3c9b 100755
--- a/members/member.pl
+++ b/members/member.pl
@@ -65,7 +65,6 @@ if ( $quicksearch and $searchmember ) {
 }
 
 my $searchfieldstype = $input->param('searchfieldstype') || 'standard';
-warn "script type $searchfieldstype";
 $template->param( 'alphabet' => C4::Context->preference('alphabet') || join ' ', 'A' .. 'Z' );
 
 my $view = $input->request_method() eq "GET" ? "show_form" : "show_results";
diff --git a/t/db_dependent/Utils/Datatables_Members.t b/t/db_dependent/Utils/Datatables_Members.t
index d378f8fe97..feca4f88fc 100644
--- a/t/db_dependent/Utils/Datatables_Members.t
+++ b/t/db_dependent/Utils/Datatables_Members.t
@@ -17,7 +17,7 @@
 
 use Modern::Perl;
 
-use Test::More tests => 50;
+use Test::More tests => 51;
 
 use C4::Context;
 use C4::Members;
@@ -57,7 +57,8 @@ my $john_doe = $builder->build({
             surname      => 'Doe',
             branchcode   => $branchcode,
             dateofbirth  => '1983-03-01',
-            userid       => 'john.doe'
+            userid       => 'john.doe',
+            initials     => 'pacman'
         },
 });
 
@@ -113,6 +114,8 @@ my %dt_params = (
     iDisplayStart    => 0
 );
 
+t::lib::Mocks::mock_preference('DefaultPatronSearchFields', '');
+
 # Search "John Doe"
 my $search_results = C4::Utils::DataTables::Members::search({
     searchmember     => "John Doe",
@@ -461,5 +464,20 @@ subtest 'ExtendedPatronAttributes' => sub {
         "'Dupont' is contained in 2 surnames and a patron attribute. Patron attribute one should not be displayed if searching in specific fields (Bug 18094)");
 };
 
+subtest 'Search by any borrowers field (bug 17374)' => sub {
+    plan tests => 2;
+
+    my $search_results = C4::Utils::DataTables::Members::search({
+        searchmember     => "pacman",
+        searchfieldstype => 'initials',
+        searchtype       => 'contain',
+        branchcode       => $branchcode,
+        dt_params        => \%dt_params
+    });
+    is( $search_results->{ iTotalDisplayRecords }, 1, "We find only 1 patron when searching for initials 'pacman'" );
+
+    is( $search_results->{ patrons }[0]->{ cardnumber }, $john_doe->{cardnumber}, "We find the correct patron when sesrching by initials" )
+};
+
 # End
 $schema->storage->txn_rollback;
diff --git a/t/db_dependent/selenium/patrons_search.t b/t/db_dependent/selenium/patrons_search.t
index 1d8cd98e48..c0ec35764b 100644
--- a/t/db_dependent/selenium/patrons_search.t
+++ b/t/db_dependent/selenium/patrons_search.t
@@ -40,7 +40,7 @@ my $builder       = t::lib::TestBuilder->new;
 
 our @cleanup;
 subtest 'Search patrons' => sub {
-    plan tests => 6;
+    plan tests => 12;
 
     my @patrons;
     my $borrowernotes           = q|<strong>just 'a" note</strong> \123 ❤|;
@@ -58,6 +58,7 @@ subtest 'Search patrons' => sub {
     my $library = $builder->build_object(
         { class => 'Koha::Libraries', value => { branchname => $branchname } }
     );
+    my $default_patron_search_fields = C4::Context->preference('DefaultPatronSearchFields');
     for my $i ( 1 .. 25 ) {
         push @patrons,
           $builder->build_object(
@@ -77,7 +78,25 @@ subtest 'Search patrons' => sub {
     }
 
     $s->auth;
+    C4::Context->set_preference('DefaultPatronSearchFields',"");
     $driver->get( $base_url . "/members/members-home.pl" );
+    my @adv_options = $driver->find_elements('//select[@id="searchfieldstype"]/option');
+    my @filter_options = $driver->find_elements('//select[@id="searchfieldstype_filter"]/option');
+    is( scalar @adv_options, 11, 'All standard fields are searchable if DefaultPatronSearchFields not set');
+    is( scalar @filter_options, 11, 'All standard fields are searchable by filter if DefaultPatronSearchFields not set');
+    C4::Context->set_preference('DefaultPatronSearchFields',"initials");
+    $driver->get( $base_url . "/members/members-home.pl" );
+    @adv_options = $driver->find_elements('//select[@id="searchfieldstype"]/option');
+    @filter_options = $driver->find_elements('//select[@id="searchfieldstype_filter"]/option');
+    is( scalar @adv_options, 12, 'New option added when DefaultPatronSearchFields is populated with a field');
+    is( scalar @filter_options, 12, 'New filter option added when DefaultPatronSearchFields is populated with a field');
+    C4::Context->set_preference('DefaultPatronSearchFields',"initials,horses");
+    $driver->get( $base_url . "/members/members-home.pl" );
+    @adv_options = $driver->find_elements('//select[@id="searchfieldstype"]/option');
+    @filter_options = $driver->find_elements('//select[@id="searchfieldstype_filter"]/option');
+    is( scalar @adv_options, 12, 'Invalid option not added when DefaultPatronSearchFields is populated with an invalid field');
+    is( scalar @filter_options, 12, 'Invalid filter option not added when DefaultPatronSearchFields is populated with an invalid field');
+    C4::Context->set_preference('DefaultPatronSearchFields',"");
     $s->fill_form( { searchmember_filter => 'test_patron' } );
     $s->submit_form;
     my $first_patron = $patrons[0];
@@ -114,6 +133,7 @@ subtest 'Search patrons' => sub {
     push @cleanup, $_ for @patrons;
     push @cleanup, $library;
     push @cleanup, $patron_category;
+    C4::Context->set_preference('DefaultPatronSearchFields',$default_patron_search_fields);
 };
 
 END {
-- 
2.11.0