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

my $flickr_api_key = $ENV{FLICKR_API_KEY};
BEGIN
{
    eval {
        require XML::Parser::Lite::Tree;
        require XML::Parser::Lite::Tree::XPath;
    };
    if ($@) {
        plan(skip_all => "XML::Parser::Lite::Tree not installed");
    } else {
        plan(tests => 7);
    }
    use_ok("WebService::Simple");
}

{
    my $service = WebService::Simple->new(
        base_url => "http://api.flickr.com/services/rest/",
        response_parser => 'XML::Lite',
        params   => {
            api_key => $flickr_api_key
        }
    );
    isa_ok( $service->response_parser, "WebService::Simple::Parser::XML::Lite");

    SKIP: {
        if (! $flickr_api_key ) {
            skip( "Please set FLICKR_API_KEY to enable this test", 5 );
        }
    
        my $response = $service->get( { method => "flickr.test.echo", name => "value" } );
        my $xml = $response->parse_response;
    
        isa_ok( $xml, 'XML::Parser::Lite::Tree::XPath' );
        is( $xml->select_nodes( '/rsp' )->[-1]{attributes}{stat}, 'ok', '/rsp and @stat' );
        is( $xml->select_nodes( '/rsp/api_key' )->[-1]{children}[0]{content}, $flickr_api_key, '/rsp/api_key', );
        is( $xml->select_nodes( '/rsp/name' )->[-1]{children}[0]{content}, "value", '/rsp/name' );
        is( $xml->select_nodes( '/rsp/method' )->[-1]{children}[0]{content}, 'flickr.test.echo', '/rsp/method' );
    }
}