From 2ab514be2ed8ba753171e596ecdd49be544b916e Mon Sep 17 00:00:00 2001 From: Nick Clemens Date: Fri, 10 Jul 2020 13:15:58 +0000 Subject: [PATCH] Bug 24807: (follow-up) Add support for spaces as unknown characters --- Koha/SearchEngine/Elasticsearch.pm | 2 +- t/Koha/SearchEngine/Elasticsearch.t | 25 ++++++++++++++++++++++--- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/Koha/SearchEngine/Elasticsearch.pm b/Koha/SearchEngine/Elasticsearch.pm index 5be63fdcab..a3676acd2f 100644 --- a/Koha/SearchEngine/Elasticsearch.pm +++ b/Koha/SearchEngine/Elasticsearch.pm @@ -909,7 +909,7 @@ sub _field_mappings { push @{$default_options->{value_callbacks}}, sub { my ($value) = @_; # Replace "u" with "0" for sorting - return map { s/[u]/0/gr } ( $value =~ /[0-9u]{4}/g ); + return map { s/[u\s]/0/gr } ( $value =~ /[0-9u\s]{4}/g ); }; } diff --git a/t/Koha/SearchEngine/Elasticsearch.t b/t/Koha/SearchEngine/Elasticsearch.t index 9623156aa0..595b3ec35d 100644 --- a/t/Koha/SearchEngine/Elasticsearch.t +++ b/t/Koha/SearchEngine/Elasticsearch.t @@ -118,7 +118,7 @@ subtest 'get_elasticsearch_mappings() tests' => sub { subtest 'Koha::SearchEngine::Elasticsearch::marc_records_to_documents () tests' => sub { - plan tests => 58; + plan tests => 59; t::lib::Mocks::mock_preference('marcflavour', 'MARC21'); t::lib::Mocks::mock_preference('ElasticsearchMARCFormat', 'ISO2709'); @@ -361,14 +361,25 @@ subtest 'Koha::SearchEngine::Elasticsearch::marc_records_to_documents () tests' MARC::Field->new('999', '', '', c => '1234568'), MARC::Field->new('952', '', '', 0 => 1, g => 'string where should be numeric', o => $long_callno), ); - my $records = [$marc_record_1, $marc_record_2]; + my $marc_record_3 = MARC::Record->new(); + $marc_record_3->leader(' cam 22 a 4500'); + $marc_record_3->append_fields( + MARC::Field->new('008', '901111s19uu xxk|||| |00| ||eng c'), + MARC::Field->new('100', '', '', a => 'Author 2'), + # MARC::Field->new('210', '', '', a => 'Title 3'), + # MARC::Field->new('245', '', '', a => 'Title: third record'), + MARC::Field->new('260', '', '', a => 'New York :', b => 'Ace ,', c => ' 89 '), + MARC::Field->new('999', '', '', c => '1234568'), + MARC::Field->new('952', '', '', 0 => 1, g => 'string where should be numeric', o => $long_callno), + ); + my $records = [$marc_record_1, $marc_record_2, $marc_record_3]; $see->get_elasticsearch_mappings(); #sort_fields will call this and use the actual db values unless we call it first my $docs = $see->marc_records_to_documents($records); # First record: - is(scalar @{$docs}, 2, 'Two records converted to documents'); + is(scalar @{$docs}, 3, 'Two records converted to documents'); is_deeply($docs->[0]->{control_number}, ['123'], 'First record control number should be set correctly'); @@ -527,6 +538,14 @@ subtest 'Koha::SearchEngine::Elasticsearch::marc_records_to_documents () tests' 'Second document date-of-publication field should be set correctly' ); + # Third record: + + is_deeply( + $docs->[2]->{'copydate'}, + ['0890'], + 'Third document copydate field should be set correctly' + ); + # Mappings marc_type: ok(!(defined $docs->[0]->{unimarc_title}), "No mapping when marc_type doesn't match marc flavour"); -- 2.11.0