The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!perl -T

use 5.006;
use strict;
use warnings FATAL => 'all';

use Test::More tests => 2;

use WWW::Foursquare::Response;
use LWP::UserAgent;

diag("Testing response");

# response is OK
my $ua = LWP::UserAgent->new();
mock_response($ua, 200, 'OK', '{"response":"OK"}');
my $res = $ua->get('http://foursquare.com');
my $response = WWW::Foursquare::Response->new();

my $get_result = $response->process($res);
ok($get_result eq 'OK', 'Process right response');

# response is FAIL
mock_response($ua, 400, 'Bad Request', '{"meta":{"errorType":"param_error"},"error":"invalid_grant"}');
$res = $ua->get('http://foursquare.com');
eval { $get_result = $response->process($res); };
ok($@ =~ /param_error/, 'Process wrong response');

sub mock_response {
    my ($ua, $http_code, $http_status, $content) = @_;

    $ua->remove_handler('request_send');
    $ua->add_handler(request_send => sub {
        my ($request, $ua, $h) = @_;
 
        my $http_response = HTTP::Response->new($http_code, $http_status);
        $http_response->request($request);
        $http_response->content($content);

        return $http_response;
    });
}