]>
Dogcows Code - chaz/graphql-client/blob - t/client.t
16 subtest
'transport' => sub {
17 my $client = GraphQL
::Client-
>new(transport_class
=> 'http');
18 isa_ok
($client->transport, 'GraphQL::Client::http', 'decide transport from transport_class');
20 $client = GraphQL
::Client-
>new(url
=> 'https://localhost:4000/graphql');
21 isa_ok
($client->transport, 'GraphQL::Client::http', 'decide transport from url');
23 $client = GraphQL
::Client-
>new(transport_class
=> 'not a real class');
24 is($client->transport_class, 'not a real class', 'transport_class constructor works');
25 throws_ok
{ $client->transport } qr/^Failed to load transport/, 'throws if invalid transport';
28 subtest
'request to transport' => sub {
29 my $mock = MockTransport-
>new;
30 my $client = GraphQL
::Client-
>new(transport
=> $mock);
32 $client->execute('{hello}');
33 my $req = ($mock->requests)[-1];
34 is_deeply
($req->[0], {
36 }, 'query is passed to transport');
38 $client->execute('{hello}', {foo
=> 'bar'});
39 $req = ($mock->requests)[-1];
40 is_deeply
($req->[0], {
42 variables
=> {foo
=> 'bar'},
43 }, 'vars passed to transport');
45 $client->execute('{hello}', {foo
=> 'bar'}, 'opname');
46 $req = ($mock->requests)[-1];
47 is_deeply
($req->[0], {
49 variables
=> {foo
=> 'bar'},
50 operationName
=> 'opname',
51 }, 'operationName passed to transport');
53 $client->execute('{hello}', {foo
=> 'bar'}, 'opname', {baz
=> 'qux'});
54 $req = ($mock->requests)[-1];
55 is_deeply
($req->[1], {
57 }, 'transport options passed to transport');
59 $client->execute('{hello}', {foo
=> 'bar'}, {baz
=> 'qux'});
60 $req = ($mock->requests)[-1];
61 is_deeply
($req->[1], {
63 }, 'operation name can be omitted with transport options');
66 subtest
'success response' => sub {
67 my $mock = MockTransport-
>new;
68 my $client = GraphQL
::Client-
>new(transport
=> $mock);
73 hello
=> 'Hello world!',
77 my $resp = $client->execute('{hello}');
79 data
=> {hello
=> 'Hello world!'},
80 }, 'response is packed') or diag explain
$resp;
82 local $client->{unpack} = 1;
83 my $resp = $client->execute('{hello}');
85 hello
=> 'Hello world!',
86 }, 'success response is unpacked') or diag explain
$resp;
89 $mock->response(Future-
>done({
92 hello
=> 'Hello world!',
96 my $f = $client->execute('{hello}');
98 data
=> {hello
=> 'Hello world!'},
99 }, 'future response is packed') or diag explain
$f->get;
101 local $client->{unpack} = 1;
102 my $f = $client->execute('{hello}');
104 hello
=> 'Hello world!',
105 }, 'future success response is unpacked') or diag explain
$f->get;
109 subtest
'response with errors' => sub {
110 my $mock = MockTransport-
>new;
111 my $client = GraphQL
::Client-
>new(transport
=> $mock);
116 hello
=> 'Hello world!',
125 my $resp = $client->execute('{hello}');
127 data
=> {hello
=> 'Hello world!'},
128 errors
=> [{message
=> 'Uh oh'}],
129 }, 'response is packed') or diag explain
$resp;
131 local $client->{unpack} = 1;
132 throws_ok
{ $client->execute('{hello}') } qr/^Uh oh$/, 'error response thrown';
134 is($err->error, 'Uh oh', 'error message is from first error');
135 is($err->type, 'graphql', 'error type is "graphql"');
136 my $resp = $err->{response
};
138 data
=> {hello
=> 'Hello world!'},
139 errors
=> [{message
=> 'Uh oh'}],
140 }, 'error includes the response') or diag explain
$resp;
145 error
=> 'Transport error',
150 $resp = $client->execute('{hello}');
152 errors
=> [{message
=> 'Transport error'}],
153 }, 'unpacked response munges error into response') or diag explain
$resp;
155 local $client->{unpack} = 1;
156 throws_ok
{ $client->execute('{hello}') } qr/^Transport error$/, 'error response thrown';
158 my $resp = $err->{response
};
160 errors
=> [{message
=> 'Transport error'}],
161 }, 'error includes the constructed response') or diag explain
$resp;
This page took 0.046905 seconds and 4 git commands to generate.