use_ok
"JSON::RPC::Parser"
;
use_ok
"JSON::RPC::Procedure"
;
subtest
'basic'
=>
sub
{
my
$req
= Plack::Request->new( {
QUERY_STRING
=>
'method=sum¶ms=[1,2,3]&id=1'
,
REQUEST_METHOD
=>
"GET"
,
} );
my
$parser
= JSON::RPC::Parser->new(
coder
=> JSON->new,
);
my
$procedure
=
$parser
->construct_from_req(
$req
);
ok
$procedure
,
"procedure is defined"
;
isa_ok
$procedure
,
"JSON::RPC::Procedure"
;
is
$procedure
->id, 1,
"id matches"
;
is
$procedure
->method,
"sum"
,
"method matches"
;
is_deeply
$procedure
->params, [ 1, 2, 3 ],
"parameters match"
;
my
$request_hash
= {
"method"
=>
"sum"
,
"params"
=> [1, 2, 3],
"id"
=> 2,
"jsonrpc"
=>
"2.0"
};
my
$request_json
= to_json(
$request_hash
);
open
my
$input
,
"<"
, \
$request_json
;
my
$cl
=
length
$request_json
;
$req
= Plack::Request->new( {
'psgi.input'
=>
$input
,
REQUEST_METHOD
=>
"POST"
,
CONTENT_LENGTH
=>
$cl
,
CONTENT_TYPE
=>
'application/json'
} );
$procedure
=
$parser
->construct_from_req(
$req
);
is
$procedure
->jsonrpc,
"2.0"
,
"jsonrpc matches"
;
ok
$procedure
->has_id,
"has id"
;
close
$input
;
delete
$request_hash
->{id};
$request_json
= to_json(
$request_hash
);
open
$input
,
"<"
, \
$request_json
;
$cl
=
length
$request_json
;
$req
= Plack::Request->new( {
'psgi.input'
=>
$input
,
REQUEST_METHOD
=>
"POST"
,
CONTENT_LENGTH
=>
$cl
,
CONTENT_TYPE
=>
'application/json'
} );
$procedure
=
$parser
->construct_from_req(
$req
);
ok !
$procedure
->has_id,
"does not have an id"
;
close
$input
;
my
$request_array
= [
{
"method"
=>
"ping"
,
"id"
=>
undef
,
"jsonrpc"
=>
"2.0"
},
{
"method"
=>
"ping"
,
"id"
=> 3,
"jsonrpc"
=>
"2.0"
},
];
$request_json
= to_json(
$request_array
);
open
$input
,
"<"
, \
$request_json
;
$cl
=
length
$request_json
;
$req
= Plack::Request->new( {
'psgi.input'
=>
$input
,
REQUEST_METHOD
=>
"POST"
,
CONTENT_LENGTH
=>
$cl
,
CONTENT_TYPE
=>
'application/json'
} );
my
$procedures
=
$parser
->construct_from_req(
$req
);
ok
$procedures
,
"procedures are defined"
;
is
@$procedures
, 2,
"should be 2 procedures"
;
ok ((
$procedures
->[0]->has_id &&
$procedures
->[1]->has_id),
"both procedures have ids"
);
ok ((!
defined
$procedures
->[0]->id),
"first procedure has NULL id"
);
is
$procedures
->[1]->id, 3,
"second procedure id matches"
;
close
$input
;
};
done_testing;