Bug 28290: (follow-up) Unit test
[srvgit] / t / Matcher.t
index 3a5494e..2c7b288 100755 (executable)
@@ -27,7 +27,7 @@ use Module::Load::Conditional qw/check_install/;
 
 BEGIN {
     if ( check_install( module => 'Test::DBIx::Class' ) ) {
-        plan tests => 12;
+        plan tests => 13;
     } else {
         plan skip_all => "Need Test::DBIx::Class"
     }
@@ -38,7 +38,7 @@ use Test::DBIx::Class;
 my $db = Test::MockModule->new('Koha::Database');
 $db->mock( _new_schema => sub { return Schema(); } );
 
-use_ok('C4::Matcher');
+use_ok('C4::Matcher', qw( GetMatcherList GetMatcherId ));
 
 fixtures_ok [
     MarcMatcher => [
@@ -82,7 +82,7 @@ is( $testmatcher->description(), 'match on ISSN', 'testing code accessor' );
 
 subtest '_get_match_keys() tests' => sub {
 
-    plan tests => 17;
+    plan tests => 21;
 
     my $matchpoint = get_title_matchpoint({
         length => 0,
@@ -92,6 +92,12 @@ subtest '_get_match_keys() tests' => sub {
 
     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-'),
@@ -242,6 +248,44 @@ subtest '_get_match_keys() tests' => sub {
 
     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 {
@@ -311,3 +355,50 @@ sub get_authors_matchpoint {
     return $matchpoint;
 }
 
+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;
+}