#!perl use strict; use warnings; BEGIN { use FindBin; use lib "$FindBin::Bin/lib"; chdir 't' if -d 't'; use lib qw[../lib inc]; require 'local_request.pl'; } use Test::More 'no_plan'; use Catalyst::Test 'TestApp'; use RPC::XML; use HTTP::Request; use Data::Dumper; # init -- mention var twice due to warnings; $RPC::XML::ENCODING = $RPC::XML::ENCODING = 'UTF-8'; my $EntryPoint = 'http://localhost/rpc'; my $Method = 'rpc.settings.test'; run_test( { input => { 1 => "b" } } ); # a single hashref run_test( 1..9 ); # a list of args sub run_test { my @args = @_; my $str = RPC::XML::request->new( $Method, @args )->as_string; my $req = HTTP::Request->new( POST => $EntryPoint ); $req->header( 'Content-Length' => length($str) ); $req->header( 'Content-Type' => 'text/xml' ); $req->content( $str ); my $res = request( $req ); ok( $res, "Got response on '$Method'" ); ok( $res->is_success, " Response successfull 2XX" ); is( $res->code, 200, " Reponse code 200" ); my $data = RPC::XML::Parser->new->parse( $res->content )->value->value; ### general settings { is( $data->{method}, $Method, " Method name matches" ); is( $data->{body}, $str, " Body as expected" ); ok( $data->{is_xmlrpc}, " Request got flagged as xmlrpc req" ); } ### ->param { for my $key ( qw[xmlrpc_params catalyst_params] ) { ### different structure based on whether we sent a single ### hashref or somethign else is_deeply( $data->{$key}, ( @args == 1 ? @args : {} ), " '$key' returned correctly" ); } ok( $data->{'params_same'}, " Params are identical" ); } ### ->args { for my $key ( qw[xmlrpc_args catalyst_args sub_args] ) { is_deeply( $data->{$key}, \@args, " '$key' returned correctly" ); } #ok( $data->{'args_same'}, " Args are identical" ); } }