use strict;
use warnings;
-use Test::More tests => 3;
+use Test::More tests => 4;
use t::lib::Mocks;
ok(!C4::Heading::valid_heading_subfield('600', 'i'), '600i not valid for bib');
ok(!C4::Heading::valid_heading_subfield('012', 'a'), '012a invalid field for bib');
-}
+};
+
+subtest "_search tests" => sub {
+ plan tests => 3;
+
+ t::lib::Mocks::mock_preference('marcflavour', 'MARC21');
+ t::lib::Mocks::mock_preference('SearchEngine', 'Elasticsearch');
+ my $search = Test::MockModule->new('Koha::SearchEngine::Elasticsearch::Search');
+
+ $search->mock('search_auth_compat', sub {
+ my $self = shift;
+ my $search_query = shift;
+ return $search_query;
+ });
+
+ my $field = MARC::Field->new( '100', ' ', '', a => 'Yankovic, Al', d => '1959-,' );
+ my $heading = C4::Heading->new_from_field($field);
+ my $search_query = $heading->_search( 'match-heading' );
+ my $terms = $search_query->{query}->{bool}->{must};
+ is_deeply( $terms->[0], { term => { 'match-heading.ci_raw' => 'Yankovic, Al 1959' } }, "Search formed as expected for a non-subject field with single punctuation mark");
+
+
+ my $field = MARC::Field->new( '100', ' ', '', a => 'Yankovic, Al', d => '1959-,', e => '[author]' );
+ my $heading = C4::Heading->new_from_field($field);
+ my $search_query = $heading->_search( 'match-heading' );
+ my $terms = $search_query->{query}->{bool}->{must};
+ is_deeply( $terms->[0], { term => { 'match-heading.ci_raw' => 'Yankovic, Al 1959' } }, "Search formed as expected for a non-subject field with doulbe punctuation, hyphen+comma");
+
+ $field = MARC::Field->new( '100', ' ', '', a => 'Tolkien, J.R.R.,', e => '[author]' );
+ $heading = C4::Heading->new_from_field($field);
+ $search_query = $heading->_search( 'match-heading' );
+ $terms = $search_query->{query}->{bool}->{must};
+ is_deeply( $terms->[0], { term => { 'match-heading.ci_raw' => 'Tolkien, J.R.R' } }, "Search formed as expected for a non-subject field with double punctuation, period+comma ");
+
+};