X-Git-Url: http://koha-dev.rot13.org:8081/gitweb/?a=blobdiff_plain;f=t%2Fdb_dependent%2FXISBN.t;h=1f6f797aa7501f683000c8fc07eff0ae09af84bb;hb=eca3f6d37c24b5a510d26e0a0b8e0233420fe03a;hp=8f5c8bdff1fb5cc5fb3f7dceac151eee8a3a6fce;hpb=6c0b51460ea812c27f75058ba33c5e99d1a8e9e3;p=srvgit diff --git a/t/db_dependent/XISBN.t b/t/db_dependent/XISBN.t index 8f5c8bdff1..1f6f797aa7 100755 --- a/t/db_dependent/XISBN.t +++ b/t/db_dependent/XISBN.t @@ -1,48 +1,123 @@ #!/usr/bin/perl # -# This Koha test module is a stub! +# This Koha test module is a stub! # Add more tests here!!! -use strict; -use warnings; -use Test::Class::Load qw ( t/db_dependent/ ); -use Test::More tests => 4; +use Modern::Perl; + +use Test::More tests => 5; use MARC::Record; use C4::Biblio; use C4::XISBN; -use Data::Dumper; use C4::Context; +use C4::Search; +use Test::MockModule; BEGIN { - use_ok('C4::XISBN'); + use_ok('C4::XISBN'); } -KohaTest::clear_test_database(); -KohaTest::create_test_database(); +my $dbh = C4::Context->dbh; +$dbh->{RaiseError} = 1; +$dbh->{AutoCommit} = 0; + +my $search_module = new Test::MockModule('C4::Search'); + +$search_module->mock('SimpleSearch', \&Mock_SimpleSearch ); + +my $context = C4::Context->new; + +my ( $biblionumber_tag, $biblionumber_subfield ) = + GetMarcFromKohaField( 'biblio.biblionumber', '' ); +my ( $isbn_tag, $isbn_subfield ) = + GetMarcFromKohaField( 'biblioitems.isbn', '' ); + +# Harry Potter and the Sorcerer's Stone, 1st American ed. 1997 +my $isbn1 = '0590353403'; +# ThingISBN match : Silent Wing, First Edition 1998 +my $isbn2 = '0684843897'; +# XISBN match : Harry Potter and the Sorcerer's Stone, +# 1. Scholastic mass market paperback printing1. +my $isbn3 = '043936213X'; + +my $biblionumber1 = _add_biblio_with_isbn($isbn1); +my $biblionumber2 = _add_biblio_with_isbn($isbn2); +my $biblionumber3 = _add_biblio_with_isbn($isbn3); + +my $trial = C4::XISBN::get_biblionumber_from_isbn($isbn1); +is( $trial->[0]->{biblionumber}, + $biblionumber1, + "It gets the correct biblionumber from the only isbn we have added." ); -my $isbn = '0590353403'; -my $isbn2 = '0747554560'; +$trial = C4::XISBN::_get_biblio_from_xisbn($isbn1); +is( $trial->{biblionumber}, + $biblionumber1, "Gets biblionumber like the previous test." ); -my $marc_record=MARC::Record->new; -my $field = MARC::Field->new('020','','','a' => $isbn); -$marc_record->append_fields($field); -my($biblionumber,$biblioitemnumber) = AddBiblio($marc_record,''); +$context->set_preference( 'ThingISBN', 1 ); +$context->set_preference( 'XISBN', 0 ); +my $results_thingisbn = C4::XISBN::get_xisbns($isbn1); +is( $results_thingisbn->[0]->{biblionumber}, + $biblionumber3, + "Gets correct biblionumber from a book with a similar isbn using ThingISBN." ); -my $marc_record=MARC::Record->new; -my $field = MARC::Field->new('020','','','a' => $isbn2); -$marc_record->append_fields($field); -my($biblionumber,$biblioitemnumber) = AddBiblio($marc_record,''); +$context->set_preference( 'ThingISBN', 0 ); +$context->set_preference( 'XISBN', 1 ); +my $results_xisbn = C4::XISBN::get_xisbns($isbn1); +is( $results_xisbn->[0]->{biblionumber}, + $biblionumber3, + "Gets correct biblionumber from a book with a similar isbn using XISBN." ); +$dbh->rollback; -my $trial = C4::XISBN::get_biblionumber_from_isbn($isbn); -is($trial->[0]->{biblionumber},1,"It gets the correct biblionumber from the only isbn we have added."); +# Util subs -$trial = C4::XISBN::_get_biblio_from_xisbn($isbn); -is($trial->{biblionumber},1,"Gets biblionumber like the previous test."); +# Add new biblio with isbn and return biblionumber +sub _add_biblio_with_isbn { + my $isbn = shift; -# doesn't work yet; -my $context = C4::Context->new(); -$context->set_preference('ThingISBN','on'); -diag C4::Context::preference('ThingISBN'); -my $var = C4::XISBN::get_xisbns($isbn); -is($var->[0]->{biblionumber},2,"Gets correct biblionumber from a book with a similar isbn."); + my $marc_record = MARC::Record->new; + my $field = MARC::Field->new( $isbn_tag, '', '', $isbn_subfield => $isbn ); + $marc_record->append_fields($field); + my ( $biblionumber, $biblioitemnumber ) = AddBiblio( $marc_record, '' ); + return $biblionumber; +} + +# Mocked subs + +# C4::Search::SimpleSearch +sub Mock_SimpleSearch { + my $query = shift; + my @results; + + $query =~ s/-//g; + my $ret_biblionumber; + if ( $query =~ /$isbn1/ ) { + $ret_biblionumber = $biblionumber1; + } + elsif ( $query =~ /$isbn2/ ) { + $ret_biblionumber = $biblionumber2; + } + elsif ( $query =~ /$isbn3/ ) { + $ret_biblionumber = $biblionumber3; + } + + my $record = MARC::Record->new; + $record->leader(' ngm a22 7a 4500'); + my $biblionumber_field; + if ( $biblionumber_tag < 10 ) { + $biblionumber_field = + MARC::Field->new( $biblionumber_tag, $ret_biblionumber ); + } + else { + $biblionumber_field = MARC::Field->new( $biblionumber_tag, '', '', + $biblionumber_subfield => $ret_biblionumber ); + } + $record->append_fields($biblionumber_field); + + my $indexing_mode = C4::Context->config('zebra_bib_index_mode') // 'dom'; + push @results, ( $indexing_mode eq 'dom' ) + ? $record->as_xml() + : $record->as_usmarc() ; + + return ( undef, \@results, 1 ); +}