PluginProbe
StockPack – Stock photos and AI images from Unsplash, Adobe Stock, Freepik and more / 2.5.1
StockPack – Stock photos and AI images from Unsplash, Adobe Stock, Freepik and more v2.5.1
3.7.2 3.7.1 3.7.0 3.6.0 3.6.1 3.5.2 trunk 2.0 2.1 2.2 2.3 2.4 2.4.1 2.4.2 2.4.3 2.5.0 2.5.1 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6 2.5.7 2.6.0 2.6.1 All 73 releases
stockpack / vendor / guzzlehttp / guzzle / tests / MiddlewareTest.php

MiddlewareTest.php in StockPack – Stock photos and AI images from Unsplash, Adobe Stock, Freepik and more 2.5.1, at vendor/guzzlehttp/guzzle/tests/MiddlewareTest.php

218 lines 7.8 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 namespace GuzzleHttp\Tests;
3
4 use GuzzleHttp\Cookie\CookieJar;
5 use GuzzleHttp\Cookie\SetCookie;
6 use GuzzleHttp\Exception\RequestException;
7 use GuzzleHttp\Handler\MockHandler;
8 use GuzzleHttp\HandlerStack;
9 use GuzzleHttp\MessageFormatter;
10 use GuzzleHttp\Middleware;
11 use GuzzleHttp\Promise\PromiseInterface;
12 use GuzzleHttp\Psr7\Request;
13 use GuzzleHttp\Psr7\Response;
14 use PHPUnit\Framework\TestCase;
15 use Psr\Http\Message\RequestInterface;
16 use Psr\Http\Message\ResponseInterface;
17 use Psr\Log\Test\TestLogger;
18
19 class MiddlewareTest extends TestCase
20 {
21 public function testAddsCookiesToRequests()
22 {
23 $jar = new CookieJar();
24 $m = Middleware::cookies($jar);
25 $h = new MockHandler(
26 [
27 function (RequestInterface $request) {
28 return new Response(200, [
29 'Set-Cookie' => (string) new SetCookie([
30 'Name' => 'name',
31 'Value' => 'value',
32 'Domain' => 'foo.com'
33 ])
34 ]);
35 }
36 ]
37 );
38 $f = $m($h);
39 $f(new Request('GET', 'http://foo.com'), ['cookies' => $jar])->wait();
40 self::assertCount(1, $jar);
41 }
42
43 /**
44 * @expectedException \GuzzleHttp\Exception\ClientException
45 */
46 public function testThrowsExceptionOnHttpClientError()
47 {
48 $m = Middleware::httpErrors();
49 $h = new MockHandler([new Response(404)]);
50 $f = $m($h);
51 $p = $f(new Request('GET', 'http://foo.com'), ['http_errors' => true]);
52 self::assertSame('pending', $p->getState());
53 $p->wait();
54 self::assertSame('rejected', $p->getState());
55 }
56
57 /**
58 * @expectedException \GuzzleHttp\Exception\ServerException
59 */
60 public function testThrowsExceptionOnHttpServerError()
61 {
62 $m = Middleware::httpErrors();
63 $h = new MockHandler([new Response(500)]);
64 $f = $m($h);
65 $p = $f(new Request('GET', 'http://foo.com'), ['http_errors' => true]);
66 self::assertSame('pending', $p->getState());
67 $p->wait();
68 self::assertSame('rejected', $p->getState());
69 }
70
71 /**
72 * @dataProvider getHistoryUseCases
73 */
74 public function testTracksHistory($container)
75 {
76 $m = Middleware::history($container);
77 $h = new MockHandler([new Response(200), new Response(201)]);
78 $f = $m($h);
79 $p1 = $f(new Request('GET', 'http://foo.com'), ['headers' => ['foo' => 'bar']]);
80 $p2 = $f(new Request('HEAD', 'http://foo.com'), ['headers' => ['foo' => 'baz']]);
81 $p1->wait();
82 $p2->wait();
83 self::assertCount(2, $container);
84 self::assertSame(200, $container[0]['response']->getStatusCode());
85 self::assertSame(201, $container[1]['response']->getStatusCode());
86 self::assertSame('GET', $container[0]['request']->getMethod());
87 self::assertSame('HEAD', $container[1]['request']->getMethod());
88 self::assertSame('bar', $container[0]['options']['headers']['foo']);
89 self::assertSame('baz', $container[1]['options']['headers']['foo']);
90 }
91
92 public function getHistoryUseCases()
93 {
94 return [
95 [[]], // 1. Container is an array
96 [new \ArrayObject()] // 2. Container is an ArrayObject
97 ];
98 }
99
100 public function testTracksHistoryForFailures()
101 {
102 $container = [];
103 $m = Middleware::history($container);
104 $request = new Request('GET', 'http://foo.com');
105 $h = new MockHandler([new RequestException('error', $request)]);
106 $f = $m($h);
107 $f($request, [])->wait(false);
108 self::assertCount(1, $container);
109 self::assertSame('GET', $container[0]['request']->getMethod());
110 self::assertInstanceOf(RequestException::class, $container[0]['error']);
111 }
112
113 public function testTapsBeforeAndAfter()
114 {
115 $calls = [];
116 $m = function ($handler) use (&$calls) {
117 return function ($request, $options) use ($handler, &$calls) {
118 $calls[] = '2';
119 return $handler($request, $options);
120 };
121 };
122
123 $m2 = Middleware::tap(
124 function (RequestInterface $request, array $options) use (&$calls) {
125 $calls[] = '1';
126 },
127 function (RequestInterface $request, array $options, PromiseInterface $p) use (&$calls) {
128 $calls[] = '3';
129 }
130 );
131
132 $h = new MockHandler([new Response()]);
133 $b = new HandlerStack($h);
134 $b->push($m2);
135 $b->push($m);
136 $comp = $b->resolve();
137 $p = $comp(new Request('GET', 'http://foo.com'), []);
138 self::assertSame('123', implode('', $calls));
139 self::assertInstanceOf(PromiseInterface::class, $p);
140 self::assertSame(200, $p->wait()->getStatusCode());
141 }
142
143 public function testMapsRequest()
144 {
145 $h = new MockHandler([
146 function (RequestInterface $request, array $options) {
147 self::assertSame('foo', $request->getHeaderLine('Bar'));
148 return new Response(200);
149 }
150 ]);
151 $stack = new HandlerStack($h);
152 $stack->push(Middleware::mapRequest(function (RequestInterface $request) {
153 return $request->withHeader('Bar', 'foo');
154 }));
155 $comp = $stack->resolve();
156 $p = $comp(new Request('PUT', 'http://www.google.com'), []);
157 self::assertInstanceOf(PromiseInterface::class, $p);
158 }
159
160 public function testMapsResponse()
161 {
162 $h = new MockHandler([new Response(200)]);
163 $stack = new HandlerStack($h);
164 $stack->push(Middleware::mapResponse(function (ResponseInterface $response) {
165 return $response->withHeader('Bar', 'foo');
166 }));
167 $comp = $stack->resolve();
168 $p = $comp(new Request('PUT', 'http://www.google.com'), []);
169 $p->wait();
170 self::assertSame('foo', $p->wait()->getHeaderLine('Bar'));
171 }
172
173 public function testLogsRequestsAndResponses()
174 {
175 $h = new MockHandler([new Response(200)]);
176 $stack = new HandlerStack($h);
177 $logger = new TestLogger();
178 $formatter = new MessageFormatter();
179 $stack->push(Middleware::log($logger, $formatter));
180 $comp = $stack->resolve();
181 $p = $comp(new Request('PUT', 'http://www.google.com'), []);
182 $p->wait();
183 self::assertCount(1, $logger->records);
184 self::assertContains('"PUT / HTTP/1.1" 200', $logger->records[0]['message']);
185 }
186
187 public function testLogsRequestsAndResponsesCustomLevel()
188 {
189 $h = new MockHandler([new Response(200)]);
190 $stack = new HandlerStack($h);
191 $logger = new TestLogger();
192 $formatter = new MessageFormatter();
193 $stack->push(Middleware::log($logger, $formatter, 'debug'));
194 $comp = $stack->resolve();
195 $p = $comp(new Request('PUT', 'http://www.google.com'), []);
196 $p->wait();
197 self::assertCount(1, $logger->records);
198 self::assertContains('"PUT / HTTP/1.1" 200', $logger->records[0]['message']);
199 self::assertSame('debug', $logger->records[0]['level']);
200 }
201
202 public function testLogsRequestsAndErrors()
203 {
204 $h = new MockHandler([new Response(404)]);
205 $stack = new HandlerStack($h);
206 $logger = new TestLogger();
207 $formatter = new MessageFormatter('{code} {error}');
208 $stack->push(Middleware::log($logger, $formatter));
209 $stack->push(Middleware::httpErrors());
210 $comp = $stack->resolve();
211 $p = $comp(new Request('PUT', 'http://www.google.com'), ['http_errors' => true]);
212 $p->wait(false);
213 self::assertCount(1, $logger->records);
214 self::assertContains('PUT http://www.google.com', $logger->records[0]['message']);
215 self::assertContains('404 Not Found', $logger->records[0]['message']);
216 }
217 }
218