The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use warnings;
use Test::More qw( no_plan );
use URI;
use XML::Simple;

use_ok( 'SRU::Request::SearchRetrieve' );

my $url = 'http://myserver.com/myurl?operation=searchRetrieve&version=1.1&query=dc.identifier+%3d%220-8212-1623-6%22&recordSchema=dc&recordPacking=XML&stylesheet=http://myserver.com/myStyle';

CONSTRUCTOR: {
    my $request = SRU::Request::SearchRetrieve->new(
        version         => '1.1',
        query           => 'dc.identifier ="0-8212-1623-6"',
        recordSchema    => 'dc',
        recordPacking   => 'XML',
        stylesheet      => 'http://myserver.com/myStyle' );
    is( $request->version(), '1.1', 'version()' );
    is( $request->query(), 'dc.identifier ="0-8212-1623-6"', 'query()' );
    is( $request->recordSchema(), 'dc', 'recordSchema()' );
    is( $request->recordPacking(), 'XML', 'recordPacking()' );
    is( $request->stylesheet(), 'http://myserver.com/myStyle', 'stylesheet()' );
    is( $request->type(), 'searchRetrieve', 'type()' );
}

CQL: {
    my $request = SRU::Request::SearchRetrieve->newFromURI( $url );
    my $node = $request->cql();
    isa_ok( $node, 'CQL::TermNode', 'got CQL node' );
    is( $node->toCQL(), 'dc.identifier = 0-8212-1623-6', 'correct CQL' );
}

FROM_URI: {
    my $uri = URI->new( $url );
    my $request = SRU::Request->newFromURI( $uri );
    isa_ok( $request, 'SRU::Request::SearchRetrieve' );
    is( $request->version(), '1.1', 'version()' );
    is( $request->query(), 'dc.identifier ="0-8212-1623-6"', 'query()' );
    is( $request->recordSchema(), 'dc', 'recordSchema()' );
    is( $request->recordPacking(), 'XML', 'recordPacking()' );
    is( $request->stylesheet(), 'http://myserver.com/myStyle', 'stylesheet()' );
}

FROM_STRING: {
    my $request = SRU::Request->newFromURI( $url );
    isa_ok( $request, 'SRU::Request::SearchRetrieve' );
    is( $request->version(), '1.1', 'version()' );
    is( $request->query(), 'dc.identifier ="0-8212-1623-6"', 'query()' );
    is( $request->recordSchema(), 'dc', 'recordSchema()' );
    is( $request->recordPacking(), 'XML', 'recordPacking()' );
    is( $request->stylesheet(), 'http://myserver.com/myStyle', 'stylesheet()' );
}

AS_XML: {
    my $request = SRU::Request->newFromURI( $url );
    my $xml = XMLin( $request->asXML(), KeepRoot => 1 );
    is( $xml->{echoedSearchRetrieveRequest}{version}, '1.1',
        'found version in XML' );
    is( $xml->{echoedSearchRetrieveRequest}{query},  
        'dc.identifier ="0-8212-1623-6"', 'found query in XML' );
    is( $xml->{echoedSearchRetrieveRequest}{recordPacking}, 'XML', 
        'found recordPacking in XML' );
    is( $xml->{echoedSearchRetrieveRequest}{stylesheet}, 
        'http://myserver.com/myStyle', 'found stylesheet in XML' );
}