Bug 17318: Unit tests
The current C4::Matcher::_get_match_keys implementation doesn't take normalization rules params into account. This patch makes Matcher.t test the proposed behaviour for new hardcoded values, that match string normalization routines introduced by Bu 17302. Possible values are: - upper_case - lower_case - remove_spaces - legacy_default - none * 'legacy_default' is left (for now) to catch the current behaviour. So tests which did not get a 'norm' param, now are passed 'legacy_default' and they still pass. * 'none' means no normalization, of course Note: on introducing 'none', a bug got highlighted, because the subfields traversal loop was introducing an unneeded space. The tests from 17304 get adjusted to reflect this. To test: - Run: $ sudo koha-shell kohadev ; cd kohaclone $ prove t/Matcher.t => FAIL: The routine doesn't care about the norms param. Sponsored-by: FIT Signed-off-by: Mark Tompsett <mtompset@hotmail.com> Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org> Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
This commit is contained in:
parent
e155029eea
commit
a0af2d7d5c
111
t/Matcher.t
111
t/Matcher.t
|
|
@ -19,6 +19,7 @@ use Modern::Perl;
|
|||
|
||||
use Test::More;
|
||||
use Test::MockModule;
|
||||
use Test::Warn;
|
||||
|
||||
use MARC::Record;
|
||||
|
||||
|
|
@ -86,11 +87,11 @@ is( $testmatcher->description(), 'match on ISSN', 'testing code accessor' );
|
|||
|
||||
subtest '_get_match_keys() tests' => sub {
|
||||
|
||||
plan tests => 8;
|
||||
plan tests => 17;
|
||||
|
||||
my $matchpoint = get_title_matchpoint({
|
||||
length => 0,
|
||||
norms => [],
|
||||
norms => [ 'legacy_default' ],
|
||||
offset => 0
|
||||
});
|
||||
|
||||
|
|
@ -114,7 +115,7 @@ subtest '_get_match_keys() tests' => sub {
|
|||
|
||||
$matchpoint = get_title_matchpoint({
|
||||
length => 9,
|
||||
norms => [],
|
||||
norms => [ 'legacy_default' ],
|
||||
offset => 0
|
||||
});
|
||||
@keys = C4::Matcher::_get_match_keys( $record, $matchpoint );
|
||||
|
|
@ -123,16 +124,16 @@ subtest '_get_match_keys() tests' => sub {
|
|||
|
||||
$matchpoint = get_title_matchpoint({
|
||||
length => 9,
|
||||
norms => [],
|
||||
norms => [ 'legacy_default' ],
|
||||
offset => 1
|
||||
});
|
||||
@keys = C4::Matcher::_get_match_keys( $record, $matchpoint );
|
||||
is( $keys[0], 'THE',
|
||||
is( $keys[0], 'THE T',
|
||||
'Match key correctly calculated with length 9 and offset 1');
|
||||
|
||||
$matchpoint = get_title_matchpoint({
|
||||
length => 9,
|
||||
norms => [],
|
||||
norms => [ 'legacy_default' ],
|
||||
offset => 2
|
||||
});
|
||||
@keys = C4::Matcher::_get_match_keys( $record, $matchpoint );
|
||||
|
|
@ -141,7 +142,7 @@ subtest '_get_match_keys() tests' => sub {
|
|||
|
||||
$matchpoint = get_authors_matchpoint({
|
||||
length => 0,
|
||||
norms => [],
|
||||
norms => [ 'legacy_default' ],
|
||||
offset => 0
|
||||
});
|
||||
@keys = C4::Matcher::_get_match_keys( $record, $matchpoint );
|
||||
|
|
@ -150,30 +151,102 @@ subtest '_get_match_keys() tests' => sub {
|
|||
|
||||
$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 => [],
|
||||
norms => [ 'legacy_default' ],
|
||||
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 9');
|
||||
|
||||
$matchpoint = get_authors_matchpoint({
|
||||
length => 10,
|
||||
norms => [ 'legacy_default' ],
|
||||
offset => 0
|
||||
});
|
||||
@keys = C4::Matcher::_get_match_keys( $record, $matchpoint );
|
||||
is( $keys[0], 'STRAUB PE KING STEP',
|
||||
'Match key correctly calculated with multiple components, length 10');
|
||||
|
||||
$matchpoint = get_authors_matchpoint({
|
||||
length => 10,
|
||||
norms => [],
|
||||
norms => [ 'legacy_default' ],
|
||||
offset => 2
|
||||
});
|
||||
@keys = C4::Matcher::_get_match_keys( $record, $matchpoint );
|
||||
is( $keys[0], 'TRAUB PET ING STEPH',
|
||||
is( $keys[0], 'RAUB PETE NG STEPHE',
|
||||
'Match key correctly calculated with multiple components, length 10, offset 1');
|
||||
|
||||
$matchpoint = get_title_matchpoint({
|
||||
length => 0,
|
||||
norms => [ 'none', 'none' ],
|
||||
offset => 0
|
||||
});
|
||||
@keys = C4::Matcher::_get_match_keys( $record, $matchpoint );
|
||||
is( $keys[0], ' .; thE t[]:,aliS(m)/An\'" Stephen King, Peter Straub.',
|
||||
'Match key intact if \'none\' specified, length 0 and offset 0' );
|
||||
|
||||
$matchpoint = get_authors_matchpoint({
|
||||
length => 0,
|
||||
norms => [ 'upper_case' ],
|
||||
offset => 0
|
||||
});
|
||||
@keys = C4::Matcher::_get_match_keys( $record, $matchpoint );
|
||||
is( $keys[0], 'STRAUB, PETER KING, STEPHEN',
|
||||
'Match key correctly calculated with multiple components, \'upper_case\' norm');
|
||||
|
||||
$matchpoint = get_authors_matchpoint({
|
||||
length => 0,
|
||||
norms => [ 'lower_case' ],
|
||||
offset => 0
|
||||
});
|
||||
@keys = C4::Matcher::_get_match_keys( $record, $matchpoint );
|
||||
is( $keys[0], 'straub, peter king, stephen',
|
||||
'Match key correctly calculated with multiple components, \'lower_case\' norm');
|
||||
|
||||
$matchpoint = get_authors_matchpoint({
|
||||
length => 0,
|
||||
norms => [ 'remove_spaces' ],
|
||||
offset => 0
|
||||
});
|
||||
@keys = C4::Matcher::_get_match_keys( $record, $matchpoint );
|
||||
is( $keys[0], 'Straub,Peter King,Stephen',
|
||||
'Match key correctly calculated with multiple components, \'remove_spaces\' norm');
|
||||
|
||||
$matchpoint = get_authors_matchpoint({
|
||||
length => 0,
|
||||
norms => [ 'remove_spaces', 'lower_case' ],
|
||||
offset => 0
|
||||
});
|
||||
@keys = C4::Matcher::_get_match_keys( $record, $matchpoint );
|
||||
is( $keys[0], 'straub,peter king,stephen',
|
||||
'Match key correctly calculated with multiple components, \'remove_spaces\' and \'lower_case\' norm');
|
||||
|
||||
my $norm = 'unknown_norm';
|
||||
$matchpoint = get_title_matchpoint({
|
||||
length => 0,
|
||||
norms => [ $norm ],
|
||||
offset => 0
|
||||
});
|
||||
warning_is
|
||||
{ @keys = C4::Matcher::_get_match_keys( $record, $matchpoint ) }
|
||||
qq{Invalid normalization routine required ($norm)},
|
||||
'Passing an invalid normalization routine name raises a warning';
|
||||
|
||||
is( $keys[0], ' .; thE t[]:,aliS(m)/An\'" Stephen King, Peter Straub.',
|
||||
'Match key intact if invalid normalization routine specified' );
|
||||
|
||||
$matchpoint = get_title_matchpoint({
|
||||
length => 0,
|
||||
norms => [ $norm, 'upper_case' ],
|
||||
offset => 0
|
||||
});
|
||||
warning_is
|
||||
{ @keys = C4::Matcher::_get_match_keys( $record, $matchpoint ) }
|
||||
qq{Invalid normalization routine required ($norm)},
|
||||
'Passing an invalid normalization routine name raises a warning';
|
||||
|
||||
is( $keys[0], ' .; THE T[]:,ALIS(M)/AN\'" STEPHEN KING, PETER STRAUB.',
|
||||
'Match key correctly normalized if invalid normalization routine specified' );
|
||||
};
|
||||
|
||||
sub get_title_matchpoint {
|
||||
|
|
|
|||
Loading…
Reference in New Issue