Bug 27673: Replace YAML with YAML::XS
[koha-ffzg.git] / t / db_dependent / OAI / Server.t
old mode 100644 (file)
new mode 100755 (executable)
index f924994..7efac23
 use Modern::Perl;
 use Test::MockTime qw/set_fixed_time restore_time/;
 
-use Test::More tests => 30;
+use Test::More tests => 31;
 use DateTime;
+use File::Basename;
+use File::Spec;
 use Test::MockModule;
 use Test::Warn;
 use XML::Simple;
-use YAML;
+use YAML::XS;
 
 use t::lib::Mocks;
 
@@ -72,10 +74,10 @@ $dbh->do('DELETE FROM oai_sets');
 
 set_fixed_time(CORE::time());
 
-my $base_datetime = DateTime->now();
+my $base_datetime = dt_from_string();
 my $date_added = $base_datetime->ymd . ' ' .$base_datetime->hms . 'Z';
 my $date_to = substr($date_added, 0, 10) . 'T23:59:59Z';
-my (@header, @marcxml, @oaidc);
+my (@header, @marcxml, @oaidc, @marcxml_transformed);
 my $sth = $dbh->prepare('UPDATE biblioitems     SET timestamp=? WHERE biblionumber=?');
 my $sth2 = $dbh->prepare('UPDATE biblio_metadata SET timestamp=? WHERE biblionumber=?');
 
@@ -85,9 +87,11 @@ foreach my $index ( 0 .. NUMBER_OF_MARC_RECORDS - 1 ) {
     if (C4::Context->preference('marcflavour') eq 'UNIMARC') {
         $record->append_fields( MARC::Field->new('101', '', '', 'a' => "lng" ) );
         $record->append_fields( MARC::Field->new('200', '', '', 'a' => "Title $index" ) );
+        $record->append_fields( MARC::Field->new('952', '', '', 'a' => "Code" ) );
     } else {
         $record->append_fields( MARC::Field->new('008', '                                   lng' ) );
         $record->append_fields( MARC::Field->new('245', '', '', 'a' => "Title $index" ) );
+        $record->append_fields( MARC::Field->new('952', '', '', 'a' => "Code" ) );
     }
     my ($biblionumber) = AddBiblio($record, '');
     my $timestamp = $base_datetime->ymd . ' ' .$base_datetime->hms;
@@ -96,6 +100,9 @@ foreach my $index ( 0 .. NUMBER_OF_MARC_RECORDS - 1 ) {
     $timestamp .= 'Z';
     $timestamp =~ s/ /T/;
     $record = GetMarcBiblio({ biblionumber => $biblionumber });
+    my $record_transformed = $record->clone;
+    $record_transformed->delete_fields( $record_transformed->field('952'));
+    $record_transformed = XMLin($record_transformed->as_xml_record);
     $record = XMLin($record->as_xml_record);
     push @header, { datestamp => $timestamp, identifier => "TEST:$biblionumber" };
     my $dc = {
@@ -122,6 +129,13 @@ foreach my $index ( 0 .. NUMBER_OF_MARC_RECORDS - 1 ) {
             record => $record,
         },
     };
+
+    push @marcxml_transformed, {
+        header => $header[$index],
+        metadata => {
+            record => $record_transformed,
+        },
+    };
 }
 
 my $syspref = {
@@ -162,9 +176,9 @@ sub test_query {
     delete $response->{responseDate};
     unless (is_deeply($response, \%full_expected, $test)) {
         diag
-            "PARAM:" . Dump($param) .
-            "EXPECTED:" . Dump(\%full_expected) .
-            "RESPONSE:" . Dump($response);
+            "PARAM:" . YAML::XS::Dump($param) .
+            "EXPECTED:" . YAML::XS::Dump(\%full_expected) .
+            "RESPONSE:" . YAML::XS::Dump($response);
     }
 }
 
@@ -348,6 +362,20 @@ test_query(
     },
 });
 
+#  List records, but now transformed by XSLT
+t::lib::Mocks::mock_preference("OAI-PMH:ConfFile" =>  File::Spec->rel2abs(dirname(__FILE__)) . "/oaiconf.yaml");
+test_query('ListRecords marcxml with xsl transformation',
+    { verb => 'ListRecords', metadataPrefix => 'marcxml' },
+    { ListRecords => {
+        record => [ @marcxml_transformed[0..2] ],
+        resumptionToken => {
+            content => "marcxml/3/1970-01-01T00:00:00Z/$date_to//0/0",
+            cursor => 3,
+        }
+    },
+});
+t::lib::Mocks::mock_preference("OAI-PMH:ConfFile" => '');
+
 restore_time();
 
 subtest 'Bug 19725: OAI-PMH ListRecords and ListIdentifiers should use biblio_metadata.timestamp' => sub {
@@ -362,7 +390,7 @@ subtest 'Bug 19725: OAI-PMH ListRecords and ListIdentifiers should use biblio_me
     $record->append_fields(MARC::Field->new(999, '', '', z => '_'));
     ModBiblio( $record, $biblionumber );
     my $from_dt = dt_from_string(
-        Koha::Biblio::Metadatas->find({ biblionumber => $biblionumber, format => 'marcxml', marcflavour => 'MARC21' })->timestamp
+        Koha::Biblio::Metadatas->find({ biblionumber => $biblionumber, format => 'marcxml', schema => 'MARC21' })->timestamp
     );
     my $from = $from_dt->ymd . 'T' . $from_dt->hms . 'Z';
     $oaidc[0]->{header}->{datestamp} = $from;