package MyTypemap;
sub get_typemap { return {} }
package main;
use Test::More;
use CGI;
plan tests => 8;
use_ok(SOAP::WSDL::Server);
use_ok(SOAP::WSDL::Server::Simple);
my $server = SOAP::WSDL::Server::Simple->new( {class_resolver => 'MyTypemap',} );
$server->set_action_map_ref( {'testaction' => 'testmethod',} );
test_fault_output();
test_deserializer_fault();
test_simple_fault();
test_success();
#
# test _output by forcing a fault (passing a empty CGI object)
# IO::Scalar required
#
sub test_fault_output {
no warnings qw(once);
SKIP: {
eval "require IO::Scalar"
or skip 'IO::Scalar required for testing...', 1;
# set up a IO::Scalar handle as STDOUT
local *IO::Scalar::BINMODE = sub { };
my $output = q{};
my $fh = IO::Scalar->new( \$output );
{
local *STDOUT = $fh;
# don't try to print() anything from here on - it gehts caught in $output,
#and does not make it to STDOUT...
$server->handle( CGI->new() );
}
like $output, qr{no \s element \s found}xms;
}
}
sub test_deserializer_fault {
*SOAP::WSDL::Server::Simple::_output = sub {
like $_[1]->content(), qr{Error \s deserializing \s message}xms,
'Fault on (wrong) content';
};
local $ENV{REQUEST_METHOD} = 'POST';
local $ENV{HTTP_SOAPACTION} = 'testaction';
$server->handle(
CGI->new( {
POSTDATA => q{
Kutter
Martin
Herr
}
} ) );
}
sub test_simple_fault {
*SOAP::WSDL::Server::Simple::_output = sub {
is $_[1]->code, 500;
like $_[1]->content(), qr{Something \s is \s rotten}xms,
'Fault on (wrong) content';
};
local $ENV{REQUEST_METHOD} = 'POST';
local $ENV{HTTP_SOAPAction} = 'testaction';
local *SOAP::WSDL::Server::handle = sub { die 'Something is rotten' };
$server->handle(
CGI->new( {
POSTDATA => q{
Kutter
Martin
Herr
}
} ) );
}
sub test_success {
*SOAP::WSDL::Server::Simple::_output = sub {
is $_[1]->code(), 200;
like $_[1]->content(), qr{Everything \s OK}xms,
'Status 200 on OK content';
};
local $ENV{REQUEST_METHOD} = 'POST';
local $ENV{HTTP_SOAPAction} = 'testaction';
local *SOAP::WSDL::Server::handle = sub { 'Everything OK' };
$server->handle(
CGI->new( {
POSTDATA => q{
Kutter
Martin
Herr
}
} ) );
}