BioPerl-Run
view release on metacpan or search on metacpan
t/SoapEU-unit.t view on Meta::CPAN
#-*-perl-*-
#testing SoapEUtilities and components
use strict;
use warnings;
our $home;
BEGIN {
use Bio::Root::Test;
use lib '.';
$home = '.'; # set to '.' for Build use,
# '..' for debugging from .t file
unshift @INC, $home;
test_begin(-tests => 139,
-requires_modules => [qw(Bio::DB::ESoap
Bio::DB::ESoap::WSDL
Bio::DB::SoapEUtilities
Bio::DB::SoapEUtilities::Result
Bio::DB::SoapEUtilities::FetchAdaptor
Bio::DB::SoapEUtilities::LinkAdaptor
Bio::DB::SoapEUtilities::DocSumAdaptor
SOAP::Lite
XML::Twig
)]);
}
# use data files for most unit testing
# see skip section for network tests
my $dep_msg = "NCBI SOAP EUtilities API no longer supported as of 2015, modules are deprecated and will be removed in a future release";
diag($dep_msg);
# ESoap::WSDL
SKIP: {
skip($dep_msg, 139);
my $NCBI_SOAP_SVC = "http://eutils.ncbi.nlm.nih.gov/entrez/eutils/soap/v2.0/soap_adapter_2_0.cgi";
my @EUTILS = qw( einfo esearch elink egquery epost espell esummary);
diag("NOTE: No network access required for these tests; all are local file-based.");
ok my $wsdl = Bio::DB::ESoap::WSDL->new(-wsdl => test_input_file('eutils.wsdl')), "wsdl parse from file";
is_deeply ( [sort values %{$wsdl->operations}], [sort @EUTILS ], "available operations (as of 1/9/10)" );
is $wsdl->service, $NCBI_SOAP_SVC, "correct soap svc url (as of 1/9/10)";
is_deeply( $wsdl->request_parameters('einfo'),
{ 'eInfoRequest' => [
{ 'db' => 1 },
{ 'tool' => 1 },
{ 'email' => 1 }
] } , 'einfo request parameters');
is_deeply( $wsdl->response_parameters('einfo'),
{'eInfoResult' =>
[ {'ERROR' => 1},
{'DbList' => [{'DbName|' => 1 }]},
{'DbInfo' => [
{'DbName' => 1 },
{'MenuName' => 1},
{'Description' => 1},
{'Count' => 1},
{'LastUpdate' => 1},
{'FieldList' => [
{'Field' => [
{'Name' => 1},
{'FullName' => 1},
{'Description' => 1},
{'TermCount' => 1},
{'IsDate' => 1},
{'IsNumerical' => 1},
{'SingleToken' => 1},
{'Hierarchy' => 1},
{'IsHidden' => 1}
]}
]},
{'LinkList' => [
{'Link' => [
{'Name' => 1},
{'Menu' => 1},
{'Description' => 1},
{'DbTo' => 1}
]}
]}
]}
]}, 'einfo response parameters');
is_deeply( $wsdl->request_parameters('egquery'),
{ 'eGqueryRequest' => [
{ 'term' => 1 },
{ 'tool' => 1 },
{ 'email' => 1 }
] } , 'egquery request parameters');
is_deeply( $wsdl->response_parameters('egquery'),
{ 'Result' => [
{ 'Term' => 1 },
{ 'eGQueryResult' => [
{'ERROR' => 1},
{'ResultItem' => [
{'DbName' => 1},
{'MenuName' => 1},
{'Count' => 1},
{'Status' => 1}
]}
]}
]} , 'egquery response parameters');
# ESoap
ok my $dumfac = Bio::DB::ESoap->new( -util => 'run_eLink',
-wsdl_file => test_input_file('eutils.wsdl') ), "dummy ESoap factory";
is $dumfac->util, 'run_eLink', 'operation accessor';
ok $dumfac = Bio::DB::ESoap->new( -util => 'elink',
-wsdl_file => test_input_file('eutils.wsdl') ), "dummy ESoap factory";
is $dumfac->util, 'run_eLink', 'operation name converted';
require File::Spec;
is( (File::Spec->splitpath($dumfac->wsdl_file))[-1], 'eutils.wsdl', 'wsdl filename accessor' );
is $dumfac->_request_elt_name, 'eLinkRequest', 'request element name';
is $dumfac->_result_elt_name, 'eLinkResult', 'result element name';
is_deeply( [sort $dumfac->available_parameters], [sort qw( db id reldate mindate maxdate datetype term dbfrom linkname WebEnv query_key cmd tool email )], 'elink available parameters via Bio::ParameterBaseI');
ok $dumfac->set_parameters( -db => 'gene', -id => 12345, -tool => 'ESoapTest' ), 'set_parameters';
ok $dumfac->parameters_changed, "parameters_changed flag set";
is_deeply( [$dumfac->get_parameters], [qw( db gene id 12345 tool ESoapTest )],
'get_parameters' );
ok !$dumfac->parameters_changed, "parameters_changed flag cleared";
is $dumfac->db, 'gene', 'parameter as accessor';
is $dumfac->tool, 'ESoapTest', 'parameter as accessor (2)';
ok $dumfac->reset_parameters, "reset_parameters";
ok $dumfac->parameters_changed, "parameters_changed flipped";
# SoapEUtilities
ok $dumfac = Bio::DB::SoapEUtilities->new( -wsdl_file => test_input_file('eutils.wsdl') ), "make SoapEU factory";
ok $dumfac->esearch( -db => 'gene', -term => 'bat guano' ), "esearch instance";
ok $dumfac->elink( -dbfrom => 'protein', -db => 'taxonomy', -id => [1234,5678] ),
"elink instance";
is_deeply( [$dumfac->esearch->get_parameters],
[qw( db gene term ), "bat guano"], "esearch get_parameters");
is_deeply( [$dumfac->elink->get_parameters],
[qw(db taxonomy dbfrom protein id ), [1234, 5678]],
"elink get_parameters" );
is $dumfac->esearch->db, 'gene', "esearch delegation";
is $dumfac->elink->db, 'taxonomy', "elink delegation";
ok $dumfac->esearch->db('protein'), "esearch set parameter by accessor";
ok $dumfac->esearch->parameters_changed, "esearch parameters_changed";
is $dumfac->esearch->db, 'protein', "was set";
ok !$dumfac->elink->parameters_changed, "elink not parameters_changed";
# work over SoapEUtilities::Result
$dumfac->esummary();
open my $xmlsumf, test_input_file('esum_result.xml');
{ local $/ = undef;
$dumfac->{'_response_message'} = SOAP::Deserializer->deserialize(<$xmlsumf>);
}
ok my $result = Bio::DB::SoapEUtilities::Result->new($dumfac), "create Result object (esummary)";
is $result->util, 'esummary', 'util accessor';
is $result->count, 3, "count";
( run in 0.842 second using v1.01-cache-2.11-cpan-39bf76dae61 )