-
-
Notifications
You must be signed in to change notification settings - Fork 120
Expand file tree
/
Copy pathGuzzleSenderTest.php
More file actions
131 lines (95 loc) · 4.41 KB
/
GuzzleSenderTest.php
File metadata and controls
131 lines (95 loc) · 4.41 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
<?php
declare(strict_types=1);
use GuzzleHttp\Utils;
use GuzzleHttp\Client;
use GuzzleHttp\Psr7\Uri;
use Illuminate\Support\Arr;
use GuzzleHttp\HandlerStack;
use GuzzleHttp\Psr7\Response;
use Saloon\Http\Senders\GuzzleSender;
use Psr\Http\Message\RequestInterface;
use GuzzleHttp\Promise\FulfilledPromise;
use Saloon\Tests\Fixtures\Requests\UserRequest;
use Saloon\Tests\Fixtures\Connectors\TestConnector;
test('the guzzle sender will send to the right url using the correct method', function () {
$connector = new TestConnector;
$request = new UserRequest;
$sender = $connector->sender();
$pendingRequest = $connector->createPendingRequest($request);
$sender->addMiddleware(function (callable $handler) use ($pendingRequest) {
return function (RequestInterface $request, array $options) use ($handler, $pendingRequest) {
expect($request->getMethod())->toEqual($pendingRequest->getMethod()->value);
$uri = $request->getUri();
$saloonUri = new Uri($pendingRequest->getUrl());
expect($uri)->toEqual($saloonUri);
// Return fulfilled promise to fake response
return new FulfilledPromise(new Response());
};
});
$connector->send($request);
});
test('the guzzle sender will send all headers, query parameters and config', function () {
$connector = connector();
$request = new UserRequest;
$request->config()->add('timeout', 120);
$request->config()->add('debug', true);
$request->query()->add('shanty', 'yes');
$request->query()->add('sing', 'yes');
$request->headers()->add('X-Bound-For', 'South-Australia');
$request->headers()->add('X-Fancy', ['keyOne' => 'valOne', 'keyTwo' => 'valTwo']);
$sender = $connector->sender();
$sender->addMiddleware(function (callable $handler) {
return function (RequestInterface $request, array $options) use ($handler) {
expect($options['timeout'])->toEqual(120);
expect($options['debug'])->toBeTrue();
expect($request->getUri()->getQuery())->toEqual('shanty=yes&sing=yes');
expect($request->getHeaderLine('X-Bound-For'))->toEqual('South-Australia');
expect($request->getHeaderLine('X-Fancy'))->toEqual('valOne, valTwo');
// Return fulfilled promise to fake response
return new FulfilledPromise(new Response());
};
});
$connector->send($request);
});
test('the guzzle sender has the default handler stack configured by default', function () {
$connector = new TestConnector;
$sender = $connector->sender();
expect($sender)->toBeInstanceOf(GuzzleSender::class);
$handlerStack = $sender->getHandlerStack();
$saloonStack = invade($handlerStack)->stack;
$defaultStack = invade(HandlerStack::create())->stack;
expect($saloonStack)->toHaveSameSize($defaultStack)->toHaveCount(4);
expect($saloonStack[0][1])->toBe($defaultStack[0][1]);
expect($saloonStack[1][1])->toBe($defaultStack[1][1]);
expect($saloonStack[2][1])->toBe($defaultStack[2][1]);
expect($saloonStack[3][1])->toBe($defaultStack[3][1]);
expect($saloonStack[0][0])->toBeCallable();
expect($saloonStack[1][0])->toBeCallable();
expect($saloonStack[2][0])->toBeCallable();
expect($saloonStack[3][0])->toBeCallable();
});
test('the guzzle sender has default options configured', function () {
$connector = new TestConnector;
$sender = $connector->sender();
expect($sender)->toBeInstanceOf(GuzzleSender::class);
$client = $sender->getGuzzleClient();
$freshClient = new Client([
'connect_timeout' => 10,
'timeout' => 30,
'http_errors' => true,
'crypto_method' => STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT,
]);
$saloonConfig = $client->getConfig();
$defaultConfig = $freshClient->getConfig();
expect(Arr::except($saloonConfig, 'handler'))->toEqual(Arr::except($defaultConfig, 'handler'));
$saloonStack = invade($saloonConfig['handler'])->stack;
$defaultStack = invade($defaultConfig['handler'])->stack;
expect($saloonStack)->toHaveSameSize($defaultStack)->toHaveCount(4);
});
test('you can set a custom handler stack on the guzzle sender', function () {
$connector = new TestConnector;
$sender = $connector->sender();
$handlerStack = new HandlerStack(Utils::chooseHandler());
$sender->setHandlerStack($handlerStack);
expect($sender->getHandlerStack())->toBe($handlerStack);
});