From 505f54828f8f1ccb515bd6eb78d5f5fce637a05b Mon Sep 17 00:00:00 2001 From: Nick Clemens Date: Tue, 7 Mar 2023 20:05:28 +0000 Subject: [PATCH] Bug 33100: Unit test Signed-off-by: Martin Renvoize --- t/db_dependent/Heading.t | 38 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 36 insertions(+), 2 deletions(-) diff --git a/t/db_dependent/Heading.t b/t/db_dependent/Heading.t index bef0162d2e..20f94ac3b3 100755 --- a/t/db_dependent/Heading.t +++ b/t/db_dependent/Heading.t @@ -18,7 +18,7 @@ use strict; use warnings; -use Test::More tests => 3; +use Test::More tests => 4; use t::lib::Mocks; @@ -60,4 +60,38 @@ subtest "UNIMARC tests" => sub { 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 "); + +}; -- 2.39.2