BEGIN {
if ( check_install( module => 'Test::DBIx::Class' ) ) {
- plan tests => 12;
+ plan tests => 13;
} else {
plan skip_all => "Need Test::DBIx::Class"
}
}
-use_ok('C4::Matcher');
-
use Test::DBIx::Class;
+my $db = Test::MockModule->new('Koha::Database');
+$db->mock( _new_schema => sub { return Schema(); } );
+
+use_ok('C4::Matcher', qw( GetMatcherList GetMatcherId ));
+
fixtures_ok [
MarcMatcher => [
[ 'matcher_id', 'code', 'description', 'record_type', 'threshold' ],
],
], 'add fixtures';
-my $db = Test::MockModule->new('Koha::Database');
-$db->mock( _new_schema => sub { return Schema(); } );
-
my @matchers = C4::Matcher::GetMatcherList();
is( $matchers[0]->{'matcher_id'}, 1, 'First matcher_id value is 1' );
subtest '_get_match_keys() tests' => sub {
- plan tests => 17;
+ plan tests => 21;
my $matchpoint = get_title_matchpoint({
length => 0,
my $record = MARC::Record->new();
$record->append_fields(
+ MARC::Field->new('020', '1', ' ',
+ a => '978-1451697216 (alk. paper)'),
+ MARC::Field->new('020', '1', ' ',
+ a => '145169721X (alk. paper)'),
+ MARC::Field->new('020', '1', ' ',
+ a => '1NOTISBN3'),
MARC::Field->new('100', '1', ' ',
a => 'King, Stephen',
d => 'd1947-'),
is( $keys[0], ' .; THE T[]:,ALIS(M)/AN\'" STEPHEN KING, PETER STRAUB.',
'Match key correctly normalized if invalid normalization routine specified' );
+
+ $matchpoint = get_isbn_matchpoint({
+ length => 0,
+ norms => [ 'ISBN' ],
+ offset => 0
+ });
+ @keys = C4::Matcher::_get_match_keys( $record, $matchpoint );
+ is( $keys[0], '9781451697216',
+ 'Match key correctly calculated as ISBN13 when ISBN normalizer used');
+ is( $keys[1], '9781451697216',
+ 'Match key correctly calculated as ISBN13 when ISBN normalizer used');
+ is( $keys[2], '1NOTISBN3',
+ 'Match key passed through if not an isbn when ISBN normalizer used');
+
+ $matchpoint = get_title_matchpoint({
+ length => 0,
+ offset => 0
+ });
+ delete $matchpoint->{component}->{subfields};
+ @keys = C4::Matcher::_get_match_keys( $record, $matchpoint );
+ is( $keys[0], ' .; thE t[]:,aliS(m)/An\'" Stephen King, Peter Straub.', "Match key correctly returns whole field if no subfields specified" )
+};
+
+subtest '_get_match_keys() leader tests' => sub {
+ plan tests => 2;
+ my $record = MARC::Record->new();
+ my $matchpoint = get_leader_matchpoint({
+ length => 1,
+ offset => 6,
+ });
+
+ my @keys = C4::Matcher::_get_match_keys( $record, $matchpoint );
+ is( $keys[0], ' ', 'Match key correctly calculated as " " from LDR6 when no leader available');
+
+ $record->leader('01344cam a22003014a 4500');
+
+ @keys = C4::Matcher::_get_match_keys( $record, $matchpoint );
+ is( $keys[0], 'a', 'Match key correctly calculated as "a" from LDR6');
};
sub get_title_matchpoint {
return $matchpoint;
}
-1;
+sub get_isbn_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 => '020'
+ },
+ ],
+ index => "isbn",
+ score => 1000
+ };
+
+ return $matchpoint;
+}
+
+sub get_leader_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,
+ tag => 'LDR'
+ },
+ ],
+ };
+
+ return $matchpoint;
+}