use 5.014;
use File::stat;
use File::Temp;
use Mojo::UserAgent::Mockable;
use Mojo::UserAgent::Mockable::Serializer;
use Test::Most;
my $dir = File::Temp->newdir;
my @transactions;
push @transactions, Mojo::UserAgent->new->get(q{https://www.vam.ac.uk/api/json/museumobject/O1}), Mojo::UserAgent->new->get(q{https://www.vam.ac.uk/api/json/museumobject/O1});
my @results = map { $_->res->json } @transactions;
plan skip_all => 'Museum API not responing properly' unless ref $results[0] eq 'ARRAY';
my $output_file = qq{$dir/victoria_and_albert.json};
my $mock = Mojo::UserAgent::Mockable->new( mode => 'record', file => $output_file );
for ( 0 .. $#transactions ) {
my $result_from_mock;
my $index = $_;
diag qq{Check result $index};
lives_ok {
$mock->get(
$transactions[$_]->req->url->clone,
sub {
my ( $ua, $tx ) = @_;
diag qq{Get URL $index};
is_deeply $tx->res->json, $results[$index], qq{result $index matches that of stock Mojo UA (nonblocking)};
}
);
}
'get() did not die (nonblocking)';
}
Mojo::IOLoop->start unless Mojo::IOLoop->is_running;
$mock->save;
ok -e $output_file, 'Output file exists';
isnt stat($output_file)->size, 0, 'Output file has nonzero size';
my @deserialized = Mojo::UserAgent::Mockable::Serializer->new->retrieve($output_file);
is scalar @deserialized, scalar @transactions, 'Transaction count matches';
done_testing;