The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use Test::More tests => 18; 

use strict;
use warnings;
$XML::SAX::ParserPackage = $XML::SAX::ParserPackage ||= $ENV{'NOH_ParserPackage'};

use_ok( 'Net::OAI::Harvester' );

my $h = new_ok('Net::OAI::Harvester' => [ baseURL => 'http://memory.loc.gov/cgi-bin/oai2_0' ]);

## get a known ID (this may have to change over time)

my $id = 'oai:lcoa1.loc.gov:loc.gmd/g3764s.pm003250';
my $r = $h->getRecord( identifier => $id, metadataPrefix => 'oai_dc' );

my $HTE;
if ( my $e = $r->HTTPError() ) {
    $HTE = "HTTP Error ".$e->status_line;
    $HTE .= " [Retry-After: ".$r->HTTPRetryAfter()."]" if $e->code() == 503;
  }

SKIP: {
    skip $HTE, 5 if $HTE;

    ok( ! $r->errorCode(), "errorCode()" );
    ok( ! $r->errorString(), "errorString()" );

    my $header = $r->header();
    is( $header->identifier, $id, 'identifier()' );

## extract metadata and see if a few things are there 

    my $dc = $r->metadata();
    is( 
        $dc->title(), 
        'View of Springfield, Mass. 1875.',
        'got dc:title from record' 
    );

    is( 
        $dc->identifier(),
        'http://hdl.loc.gov/loc.gmd/g3764s.pm003250',
        'got dc:identifier from record' 
    );
}


## test a custom handler
use lib qw( t );

$r = $h->getRecord( 
    identifier		=> $id, 
    metadataPrefix	=> 'oai_dc',
    metadataHandler	=> 'MyHandler',
);

undef $HTE;
if ( my $e = $r->HTTPError() ) {
    $HTE = "HTTP Error ".$e->status_line;
    $HTE .= " [Retry-After: ".$r->HTTPRetryAfter()."]" if $e->code() == 503;
  }

SKIP: {
    skip $HTE, 2 if $HTE;

    my $metadata = $r->metadata();
    isa_ok( $metadata, 'MyHandler' );
    is( $metadata->title(), 'View of Springfield, Mass. 1875.', 'custom handler works' );
  }

## test another custom handler

$r = $h->getRecord( 
    identifier		=> $id, 
    metadataPrefix	=> 'oai_dc',
    metadataHandler	=> 'YourHandler',
);

undef $HTE;
if ( my $e = $r->HTTPError() ) {
    $HTE = "HTTP Error ".$e->status_line;
    $HTE .= " [Retry-After: ".$r->HTTPRetryAfter()."]" if $e->code() == 503;
  }

SKIP: {
    skip $HTE, 3 if $HTE;

    my $metadata = $r->metadata();
    isa_ok( $metadata, 'YourHandler' );
    isa_ok( $metadata, 'MyHandler' );
    is( $metadata->result(), 'View of Springfield, Mass. 1875.', 'custom handler works' );
};

## test based on instance of a custom handler

use_ok( 'YourHandler' );
my $customhandler = new_ok('YourHandler');
isa_ok( $customhandler, 'XML::SAX::Base' );
$r = $h->getRecord( 
    identifier		=> $id, 
    metadataPrefix	=> 'oai_dc',
    metadataHandler	=> $customhandler,
);

undef $HTE;
if ( my $e = $r->HTTPError() ) {
    $HTE = "HTTP Error ".$e->status_line;
    $HTE .= " [Retry-After: ".$r->HTTPRetryAfter()."]" if $e->code() == 503;
  }

SKIP: {
    skip $HTE, 3 if $HTE;

    my $metadata = $r->metadata();
    isa_ok( $metadata, 'YourHandler' );
    isa_ok( $metadata, 'MyHandler' );
    is( $metadata->result(), 'View of Springfield, Mass. 1875.', 'custom handler works' );
}