From 347e6fe63b7eb0dade041c22d284ea5a517b5403 Mon Sep 17 00:00:00 2001 From: Tomas Cohen Arazi Date: Wed, 14 Sep 2016 16:00:19 -0300 Subject: [PATCH] [PASSED QA] Bug 17304: Introduce C4::Matcher::_get_match_keys unit tests This function is used in several places, but it's behaviour is not covered by tests, thus trying to patch it can be problematic without introducing regressions. This patch introduces unit tests for it, in the t/Matcher.t file. To test: - Apply the patch - Run: $ prove t/Matcher.t => SUCCESS: Tests pass - Sign off :-D Signed-off-by: Marcel de Rooy Signed-off-by: Katrin Fischer --- t/Matcher.t | 163 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 162 insertions(+), 1 deletion(-) diff --git a/t/Matcher.t b/t/Matcher.t index 652f061..aac83b0 100755 --- a/t/Matcher.t +++ b/t/Matcher.t @@ -20,11 +20,13 @@ use Modern::Perl; use Test::More; use Test::MockModule; +use MARC::Record; + use Module::Load::Conditional qw/check_install/; BEGIN { if ( check_install( module => 'Test::DBIx::Class' ) ) { - plan tests => 11; + plan tests => 12; } else { plan skip_all => "Need Test::DBIx::Class" } @@ -82,4 +84,163 @@ $testmatcher->description('match on ISSN'); is( $testmatcher->description(), 'match on ISSN', 'testing code accessor' ); +subtest '_get_match_keys() tests' => sub { + + plan tests => 8; + + my $matchpoint = get_title_matchpoint({ + length => 0, + norms => [], + offset => 0 + }); + + my $record = MARC::Record->new(); + $record->append_fields( + MARC::Field->new('100', '1', ' ', + a => 'King, Stephen', + d => 'd1947-'), + MARC::Field->new('245', ' ', ' ', + a => ' .; thE t[]:,aliS(m)/An\'"', + c => 'Stephen King, Peter Straub.' ), + MARC::Field->new('700', ' ', ' ', + a => 'Straub, Peter', + d => '1943-') + ); + + my @keys = C4::Matcher::_get_match_keys( $record, $matchpoint ); + + is( $keys[0], 'THE TALISMAN STEPHEN KING PETER STRAUB', + 'Match key correctly calculated with no $norms'); + + $matchpoint = get_title_matchpoint({ + length => 9, + norms => [], + offset => 0 + }); + @keys = C4::Matcher::_get_match_keys( $record, $matchpoint ); + is( $keys[0], 'THE', + 'Match key correctly calculated with length 9'); + + $matchpoint = get_title_matchpoint({ + length => 9, + norms => [], + offset => 1 + }); + @keys = C4::Matcher::_get_match_keys( $record, $matchpoint ); + is( $keys[0], 'THE', + 'Match key correctly calculated with length 9 and offset 1'); + + $matchpoint = get_title_matchpoint({ + length => 9, + norms => [], + offset => 2 + }); + @keys = C4::Matcher::_get_match_keys( $record, $matchpoint ); + is( $keys[0], 'THE T', + 'Match key correctly calculated with length 9 and offset 2, should not remove space'); + + $matchpoint = get_authors_matchpoint({ + length => 0, + norms => [], + offset => 0 + }); + @keys = C4::Matcher::_get_match_keys( $record, $matchpoint ); + is( $keys[0], 'STRAUB PETER KING STEPHEN', + 'Match key correctly calculated with multiple components'); + + $matchpoint = get_authors_matchpoint({ + length => 9, + norms => [], + offset => 0 + }); + @keys = C4::Matcher::_get_match_keys( $record, $matchpoint ); + is( $keys[0], 'STRAUB KING ST', + 'Match key correctly calculated with multiple components, length 9'); + + $matchpoint = get_authors_matchpoint({ + length => 10, + norms => [], + offset => 0 + }); + @keys = C4::Matcher::_get_match_keys( $record, $matchpoint ); + is( $keys[0], 'STRAUB P KING STE', + 'Match key correctly calculated with multiple components, length 10'); + + $matchpoint = get_authors_matchpoint({ + length => 10, + norms => [], + offset => 2 + }); + @keys = C4::Matcher::_get_match_keys( $record, $matchpoint ); + is( $keys[0], 'TRAUB PET ING STEPH', + 'Match key correctly calculated with multiple components, length 10, offset 1'); +}; + +sub get_title_matchpoint { + + my $params = shift; + + my $length = $params->{length} // 0; + my $norms = $params->{norms} // []; + my $offset = $params->{offset} // 0; + + my $matchpoint = { + components => [ + { + length => $length, + norms => $norms, + offset => $offset, + subfields => + { + a => 1, + c => 1 + }, + tag => '245' + } + ], + index => "title", + score => 1000 + }; + + return $matchpoint; +} + +sub get_authors_matchpoint { + + my $params = shift; + + my $length = $params->{length} // 0; + my $norms = $params->{norms} // []; + my $offset = $params->{offset} // 0; + + my $matchpoint = { + components => [ + { + length => $length, + norms => $norms, + offset => $offset, + subfields => + { + a => 1 + }, + tag => '700' + }, + { + length => $length, + norms => $norms, + offset => $offset, + subfields => + { + a => 1 + }, + tag => '100' + } + ], + index => "author", + score => 1000 + }; + + return $matchpoint; +} + 1; -- 2.7.4