From b2b54b835408e79ae4571c2949fcba89dd017f0b Mon Sep 17 00:00:00 2001 From: Matthias Meusburger Date: Tue, 10 Sep 2024 15:34:07 +0000 Subject: [PATCH] Bug 35659: (QA follow-up): Add init function tests by using Koha's OAI server Signed-off-by: Victor Grousset/tuxayo Signed-off-by: David Cook Sponsored-by: Association KohaLa - https://koha-fr.org/ Signed-off-by: Katrin Fischer --- Koha/OAI/Client/Harvester.pm | 13 ++++--- t/db_dependent/Koha/OAIHarvester.t | 55 +++++++++++++++++++++++++----- 2 files changed, 55 insertions(+), 13 deletions(-) diff --git a/Koha/OAI/Client/Harvester.pm b/Koha/OAI/Client/Harvester.pm index 779632824d..9e60214be1 100644 --- a/Koha/OAI/Client/Harvester.pm +++ b/Koha/OAI/Client/Harvester.pm @@ -87,10 +87,10 @@ Starts harvesting sub init { my ( $self, $args ) = @_; - $self->printlog("Starting OAI Harvest from repository"); my $server = $self->{server}; my $days = $self->{days}; + my $init_results; my $h = HTTP::OAI::Harvester->new( repository => HTTP::OAI::Identify->new( @@ -117,6 +117,7 @@ sub init { $lmdflog .= $_->metadataPrefix . " "; } $self->printlog("Available metadata formats for this repository: $lmdflog"); + $init_results->{metadata_formats} = $lmdflog; } catch { $self->printlog("ListMetadataFormats failed"); }; @@ -148,7 +149,8 @@ sub init { ); if ( $response->is_error ) { $self->printlog( "Error requesting ListRecords: " . $response->code . " " . $response->message ); - exit; + $init_results->{is_error} = $response->message; + return $init_results; } $self->printlog( "Request URL: " . $response->requestURL ); @@ -164,6 +166,7 @@ sub init { my $status = $self->processRecord($oai_record); $stats{$status}++; } + $init_results->{total} = $stats{'total'}; my $results = ''; foreach my $status (@statuses) { @@ -193,20 +196,22 @@ sub init { ) ) or $self->printlog("OAI_HARVEST_REPORT letter not found"); - my $success = C4::Letters::EnqueueLetter( + my $message_id = C4::Letters::EnqueueLetter( { letter => $letter, to_address => C4::Context->preference("OAI-PMH:HarvestEmailReport"), message_transport_type => 'email' } ); - if ($success) { + if ($message_id) { $self->printlog("Email report enqueued"); + $init_results->{letter_message_id} = $message_id; } else { $self->printlog("Unable to enqueue report email"); } } $self->printlog("Ending OAI Harvest from repository"); + return $init_results; } =head2 processRecord diff --git a/t/db_dependent/Koha/OAIHarvester.t b/t/db_dependent/Koha/OAIHarvester.t index c8ecd701b4..1a64ed22e2 100755 --- a/t/db_dependent/Koha/OAIHarvester.t +++ b/t/db_dependent/Koha/OAIHarvester.t @@ -18,11 +18,13 @@ # along with Koha; if not, see . use Modern::Perl; -use Test::More tests => 24; +use Test::More tests => 28; use Test::Exception; use File::Temp qw/tempfile/; use t::lib::TestBuilder; +use t::lib::Mocks; + use HTTP::OAI; use HTTP::OAI::Metadata::OAI_DC; use HTTP::OAI::Record; @@ -39,8 +41,8 @@ $schema->storage->txn_begin; my $new_oai_biblio = Koha::OAIServer->new( { - endpoint => 'my_host1.org', - oai_set => 'set1', + endpoint => C4::Context->preference('OPACBaseURL') . '/cgi-bin/koha/oai.pl', + oai_set => '', servername => 'my_test_1', dataformat => 'oai_dc', recordtype => 'biblio', @@ -48,8 +50,25 @@ my $new_oai_biblio = Koha::OAIServer->new( } )->store; +C4::Context->set_preference( 'OAI-PMH', 1 ); +t::lib::Mocks::mock_preference( + 'OAI-PMH:HarvestEmailReport', + C4::Context->preference('KohaAdminEmailAddress') +); + my $harvester = Koha::OAI::Client::Harvester->new( { server => $new_oai_biblio, verbose => 1, days => 1, force => 1 } ); +my $init_results = $harvester->init(); + +like( + $init_results->{metadata_formats}, + qr/oai_dc marc21 marcxml/, + 'Got list of supported metadata formats' +); +is( $init_results->{is_error}, undef, 'ListRecords request worked' ); +cmp_ok( $init_results->{total}, '>', 0, 'Records have been processed' ); +isnt( $init_results->{letter_message_id}, undef, 'Report has been enqueued' ); + my $record = 'Pièces diverses ARCH/0320 [cote]FR-920509801 [RCR établissement]Central obrera boliviana [Fonds ou collection]1 carton1971/2000Archives et manuscrits'; @@ -80,7 +99,10 @@ is( $status, 'updated', 'When force is used, record is updated' ); $harvester = Koha::OAI::Client::Harvester->new( { server => $new_oai_biblio, verbose => 1, days => 1, force => 0 } ); $status = $harvester->processRecord($r); -is( $status, 'skipped', 'When force is not used, record is skipped (already up to date)' ); +is( + $status, 'skipped', + 'When force is not used, record is skipped (already up to date)' +); $r->header->datestamp('2018-05-10T09:18:13Z'); $status = $harvester->processRecord($r); @@ -105,7 +127,10 @@ isnt( $r->header->status('deleted'); $status = $harvester->processRecord($r); -is( $status, 'deleted', 'When a record is marked to be deleted, status is deleted' ); +is( + $status, 'deleted', + 'When a record is marked to be deleted, status is deleted' +); $imported_record = Koha::Import::OAI::Biblios->find( { identifier => 'oai:myarchive.org:oid-234' } ); is( $imported_record, undef, 'Record has been deleted' ); @@ -145,7 +170,10 @@ $status = $harvester->processRecord($r); is( $status, 'updated', 'Authority with no date is updated' ); $status = $harvester->processRecord($r); -is( $status, 'updated', 'Authority with no date is updated even without force' ); +is( + $status, 'updated', + 'Authority with no date is updated even without force' +); $r->header->identifier('oai:myarchive.org:oid-162'); $r->header->datestamp('2017-05-10T09:18:13Z'); @@ -158,11 +186,17 @@ is( $status, 'updated', 'When force is used, authority is updated' ); $harvester = Koha::OAI::Client::Harvester->new( { server => $new_oai_auth, verbose => 1, days => 1, force => 0 } ); $status = $harvester->processRecord($r); -is( $status, 'skipped', 'When force is not used, authority is skipped (already up to date)' ); +is( + $status, 'skipped', + 'When force is not used, authority is skipped (already up to date)' +); $r->header->datestamp('2018-05-10T09:18:13Z'); $status = $harvester->processRecord($r); -is( $status, 'updated', 'When force is not used, authority is updated if newer' ); +is( + $status, 'updated', + 'When force is not used, authority is updated if newer' +); my $imported_authority = Koha::Import::OAI::Authorities->find( { identifier => 'oai:myarchive.org:oid-162' } ); $imported_authority->update( @@ -183,7 +217,10 @@ isnt( $r->header->status('deleted'); $status = $harvester->processRecord($r); -is( $status, 'deleted', 'When an authority is marked to be deleted, status is deleted' ); +is( + $status, 'deleted', + 'When an authority is marked to be deleted, status is deleted' +); $imported_record = Koha::Import::OAI::Biblios->find( { identifier => 'oai:myarchive.org:oid-162' } ); is( $imported_record, undef, 'Authority has been deleted' ); -- 2.39.5