Weather-OpenWeatherMap/lib/Weather/OpenWeatherMap/Test.pm
package Weather::OpenWeatherMap::Test;
$Weather::OpenWeatherMap::Test::VERSION = '0.005004';
=pod
=for Pod::Coverage .*
=cut
use strictures 2;
use Carp;
use Path::Tiny;
use File::ShareDir 'dist_dir', 'dist_file';
use parent 'Exporter::Tiny';
our @EXPORT = our @EXPORT_OK = qw/
get_test_data
mock_http_ua
/;
sub get_test_data {
my $type = lc shift || confess "No type specified";
my $base = 'Weather-OpenWeatherMap';
my $path = dist_file( $base,
$type eq 'current' ? 'current.json'
: $type =~ /^3day/ ? '3day.json'
: $type eq 'forecast' ? '3day.json'
: $type eq 'hourly' ? 'hourly.json'
: $type eq 'failure' ? 'failure.json'
: $type eq 'error' ? 'failure.json'
: $type eq 'find' ? 'find.json'
: $type eq 'search' ? 'find.json'
: confess "Unknown type $type"
);
path($path)->slurp_utf8
}
{ package
Weather::OpenWeatherMap::Test::MockUA;
use strict; use warnings FATAL => 'all';
require HTTP::Response;
use parent 'LWP::UserAgent';
sub requested_count { my ($self) = @_; $self->{'__requested'} }
sub request {
my ($self, $http_request) = @_;
my $url = $http_request->uri;
$self->{'__requested'}++;
if ($url =~ /forecast/) {
return $url =~ /daily/ ?
HTTP::Response->new( 200 => undef => [] => $self->{forecast_json} )
: HTTP::Response->new( 200 => undef => [] => $self->{hourly_json} )
} elsif ($url =~ /find/) {
return HTTP::Response->new( 200 => undef => [] => $self->{find_json} )
}
HTTP::Response->new( 200 => undef => [] => $self->{current_json} )
}
}
sub mock_http_ua {
return bless +{
map {; ($_ . '_json' => get_test_data($_) ) } qw/
forecast
hourly
current
find
/
}, 'Weather::OpenWeatherMap::Test::MockUA'
}
1;