use warnings;
use strict;
-use Test::More tests => 14;
+use Test::More tests => 29;
my $search = join(' ', @ARGV) || 'croatia';
ok( my $hits = $o->search( $search ), "search: $search" );
like $hits, qr/^\d+$/, "hits: $hits";
-foreach ( 1 .. 10 ) {
+foreach ( 1 .. 25 ) { # > 20 to hit next page
ok( my $marc = $o->next_marc, "next_marc $_" );
diag $marc;
diag "got $hits results";
- foreach my $link ( $self->mech->find_all_links( url_regex => qr{/Record/\d+} ) ) {
- push @{ $self->{records} }, $link->url;
- }
+ $self->populate_records;
return $self->{hits} = $hits;
}
+sub populate_records {
+ my ($self) = @_;
+
+ foreach my $link ( $self->mech->find_all_links( url_regex => qr{/Record/\d+} ) ) {
+ my $url = $link->url;
+ push @{ $self->{records} }, $url;
+ warn "## ++ $url\n";
+ }
+}
sub next_marc {
my ($self,$format) = @_;
my $url = shift @{ $self->{records} };
+ if ( ! $url ) {
+ diag "fetch next page";
+ $self->save_content;
+ $self->mech->follow_link( text_regex => qr/Next/ );
+ $self->populate_records;
+ $url = shift @{ $self->{records} };
+ if ( ! $url ) {
+ warn "ERROR no more results\n";
+ return;
+ }
+ }
+
my $id = $1 if $url =~ m{Record/(\d+)};
$self->mech->get( $url . '.mrc' );
$self->save_marc( "$id.marc", $marc );
+ $self->mech->back; # return to search results for next page
+
return $id;
}