@@ -36,17 +36,19 @@ function it_redirects_on_302(
36
36
$ responseRedirect ->hasHeader ('Location ' )->willReturn (true );
37
37
$ responseRedirect ->getHeaderLine ('Location ' )->willReturn ('/redirect ' );
38
38
39
- $ request ->getRequestTarget ()->willReturn ('/original ' );
40
39
$ request ->getUri ()->willReturn ($ uri );
41
40
$ request ->withUri ($ uriRedirect )->willReturn ($ modifiedRequest );
41
+ $ uri ->__toString ()->willReturn ('/original ' );
42
42
43
43
$ uri ->withPath ('/redirect ' )->willReturn ($ uriRedirect );
44
44
$ uriRedirect ->withFragment ('' )->willReturn ($ uriRedirect );
45
45
$ uriRedirect ->withQuery ('' )->willReturn ($ uriRedirect );
46
+ $ uriRedirect ->__toString ()->willReturn ('/redirect ' );
46
47
47
- $ modifiedRequest ->getRequestTarget ()->willReturn (' /redirect ' );
48
+ $ modifiedRequest ->getUri ()->willReturn ($ uriRedirect );
48
49
$ modifiedRequest ->getMethod ()->willReturn ('GET ' );
49
50
51
+
50
52
$ next = function (RequestInterface $ receivedRequest ) use ($ request , $ responseRedirect ) {
51
53
if (Argument::is ($ request ->getWrappedObject ())->scoreArgument ($ receivedRequest )) {
52
54
return new FulfilledPromise ($ responseRedirect ->getWrappedObject ());
@@ -67,7 +69,7 @@ function it_redirects_on_302(
67
69
$ finalPromise ->wait ()->shouldReturn ($ finalResponse );
68
70
}
69
71
70
- function it_use_storage_on_301 (UriInterface $ uriRedirect , RequestInterface $ request , RequestInterface $ modifiedRequest )
72
+ function it_use_storage_on_301 (UriInterface $ uri , UriInterface $ uriRedirect , RequestInterface $ request , RequestInterface $ modifiedRequest )
71
73
{
72
74
$ this ->beAnInstanceOf ('spec\Http\Client\Common\Plugin\RedirectPluginStub ' );
73
75
$ this ->beConstructedWith ($ uriRedirect , '/original ' , '301 ' );
@@ -76,12 +78,15 @@ function it_use_storage_on_301(UriInterface $uriRedirect, RequestInterface $requ
76
78
throw new \Exception ('Must not be called ' );
77
79
};
78
80
79
- $ request ->getRequestTarget ()->willReturn ('/original ' );
81
+ $ request ->getUri ()->willReturn ($ uri );
82
+ $ uri ->__toString ()->willReturn ('/original ' );
80
83
$ request ->withUri ($ uriRedirect )->willReturn ($ modifiedRequest );
81
84
82
- $ modifiedRequest ->getRequestTarget ()->willReturn (' /redirect ' );
85
+ $ modifiedRequest ->getUri ()->willReturn ($ uriRedirect );
83
86
$ modifiedRequest ->getMethod ()->willReturn ('GET ' );
84
87
88
+ $ uriRedirect ->__toString ()->willReturn ('/redirect ' );
89
+
85
90
$ this ->handleRequest ($ request , $ next , function () {});
86
91
}
87
92
@@ -98,8 +103,8 @@ function it_stores_a_301(
98
103
$ this ->beAnInstanceOf ('spec\Http\Client\Common\Plugin\RedirectPluginStub ' );
99
104
$ this ->beConstructedWith ($ uriRedirect , '' , '301 ' );
100
105
101
- $ request ->getRequestTarget ()->willReturn ('/301-url ' );
102
106
$ request ->getUri ()->willReturn ($ uri );
107
+ $ uri ->__toString ()->willReturn ('/301-url ' );
103
108
104
109
$ responseRedirect ->getStatusCode ()->willReturn ('301 ' );
105
110
$ responseRedirect ->hasHeader ('Location ' )->willReturn (true );
@@ -111,9 +116,11 @@ function it_stores_a_301(
111
116
112
117
$ request ->withUri ($ uriRedirect )->willReturn ($ modifiedRequest );
113
118
114
- $ modifiedRequest ->getRequestTarget ()->willReturn (' /redirect ' );
119
+ $ modifiedRequest ->getUri ()->willReturn ($ uriRedirect );
115
120
$ modifiedRequest ->getMethod ()->willReturn ('GET ' );
116
121
122
+ $ uriRedirect ->__toString ()->willReturn ('/redirect ' );
123
+
117
124
$ next = function (RequestInterface $ receivedRequest ) use ($ request , $ responseRedirect ) {
118
125
if (Argument::is ($ request ->getWrappedObject ())->scoreArgument ($ receivedRequest )) {
119
126
return new FulfilledPromise ($ responseRedirect ->getWrappedObject ());
@@ -142,7 +149,8 @@ function it_replace_full_url(
142
149
ResponseInterface $ finalResponse ,
143
150
Promise $ promise
144
151
) {
145
- $ request ->getRequestTarget ()->willReturn ('/original ' );
152
+ $ request ->getUri ()->willReturn ($ uri );
153
+ $ uri ->__toString ()->willReturn ('/original ' );
146
154
147
155
$ responseRedirect ->getStatusCode ()->willReturn ('302 ' );
148
156
$ responseRedirect ->hasHeader ('Location ' )->willReturn (true );
@@ -158,9 +166,11 @@ function it_replace_full_url(
158
166
159
167
$ request ->withUri ($ uriRedirect )->willReturn ($ modifiedRequest );
160
168
161
- $ modifiedRequest ->getRequestTarget ()->willReturn (' /redirect ' );
169
+ $ modifiedRequest ->getUri ()->willReturn ($ uriRedirect );
162
170
$ modifiedRequest ->getMethod ()->willReturn ('GET ' );
163
171
172
+ $ uriRedirect ->__toString ()->willReturn ('/redirect ' );
173
+
164
174
$ next = function (RequestInterface $ receivedRequest ) use ($ request , $ responseRedirect ) {
165
175
if (Argument::is ($ request ->getWrappedObject ())->scoreArgument ($ receivedRequest )) {
166
176
return new FulfilledPromise ($ responseRedirect ->getWrappedObject ());
@@ -179,15 +189,16 @@ function it_replace_full_url(
179
189
$ this ->handleRequest ($ request , $ next , $ first );
180
190
}
181
191
182
- function it_throws_http_exception_on_no_location (RequestInterface $ request , ResponseInterface $ responseRedirect )
192
+ function it_throws_http_exception_on_no_location (RequestInterface $ request , UriInterface $ uri , ResponseInterface $ responseRedirect )
183
193
{
184
194
$ next = function (RequestInterface $ receivedRequest ) use ($ request , $ responseRedirect ) {
185
195
if (Argument::is ($ request ->getWrappedObject ())->scoreArgument ($ receivedRequest )) {
186
196
return new FulfilledPromise ($ responseRedirect ->getWrappedObject ());
187
197
}
188
198
};
189
199
190
- $ request ->getRequestTarget ()->willReturn ('/original ' );
200
+ $ request ->getUri ()->willReturn ($ uri );
201
+ $ uri ->__toString ()->willReturn ('/original ' );
191
202
$ responseRedirect ->getStatusCode ()->willReturn ('302 ' );
192
203
$ responseRedirect ->hasHeader ('Location ' )->willReturn (false );
193
204
@@ -196,15 +207,16 @@ function it_throws_http_exception_on_no_location(RequestInterface $request, Resp
196
207
$ promise ->shouldThrow ('Http\Client\Exception\HttpException ' )->duringWait ();
197
208
}
198
209
199
- function it_throws_http_exception_on_invalid_location (RequestInterface $ request , ResponseInterface $ responseRedirect )
210
+ function it_throws_http_exception_on_invalid_location (RequestInterface $ request , UriInterface $ uri , ResponseInterface $ responseRedirect )
200
211
{
201
212
$ next = function (RequestInterface $ receivedRequest ) use ($ request , $ responseRedirect ) {
202
213
if (Argument::is ($ request ->getWrappedObject ())->scoreArgument ($ receivedRequest )) {
203
214
return new FulfilledPromise ($ responseRedirect ->getWrappedObject ());
204
215
}
205
216
};
206
217
207
- $ request ->getRequestTarget ()->willReturn ('/original ' );
218
+ $ request ->getUri ()->willReturn ($ uri );
219
+ $ uri ->__toString ()->willReturn ('/original ' );
208
220
$ responseRedirect ->getHeaderLine ('Location ' )->willReturn ('scheme:///invalid ' );
209
221
210
222
$ responseRedirect ->getStatusCode ()->willReturn ('302 ' );
@@ -256,7 +268,8 @@ function it_switch_method_for_302(
256
268
ResponseInterface $ finalResponse ,
257
269
Promise $ promise
258
270
) {
259
- $ request ->getRequestTarget ()->willReturn ('/original ' );
271
+ $ request ->getUri ()->willReturn ($ uri );
272
+ $ uri ->__toString ()->willReturn ('/original ' );
260
273
261
274
$ responseRedirect ->getStatusCode ()->willReturn ('302 ' );
262
275
$ responseRedirect ->hasHeader ('Location ' )->willReturn (true );
@@ -270,7 +283,8 @@ function it_switch_method_for_302(
270
283
$ request ->withUri ($ uriRedirect )->willReturn ($ modifiedRequest );
271
284
$ modifiedRequest ->getUri ()->willReturn ($ uriRedirect );
272
285
273
- $ modifiedRequest ->getRequestTarget ()->willReturn ('/redirect ' );
286
+ $ modifiedRequest ->getUri ()->willReturn ($ uriRedirect );
287
+ $ uriRedirect ->__toString ()->willReturn ('/redirect ' );
274
288
$ modifiedRequest ->getMethod ()->willReturn ('POST ' );
275
289
$ modifiedRequest ->withMethod ('GET ' )->willReturn ($ modifiedRequest );
276
290
@@ -303,7 +317,8 @@ function it_clears_headers(
303
317
) {
304
318
$ this ->beConstructedWith (['preserve_header ' => ['Accept ' ]]);
305
319
306
- $ request ->getRequestTarget ()->willReturn ('/original ' );
320
+ $ request ->getUri ()->willReturn ($ uri );
321
+ $ uri ->__toString ()->willReturn ('/original ' );
307
322
308
323
$ responseRedirect ->getStatusCode ()->willReturn ('302 ' );
309
324
$ responseRedirect ->hasHeader ('Location ' )->willReturn (true );
@@ -316,7 +331,8 @@ function it_clears_headers(
316
331
317
332
$ request ->withUri ($ uriRedirect )->willReturn ($ modifiedRequest );
318
333
319
- $ modifiedRequest ->getRequestTarget ()->willReturn ('/redirect ' );
334
+ $ modifiedRequest ->getUri ()->willReturn ($ uriRedirect );
335
+ $ uriRedirect ->__toString ()->willReturn ('/redirect ' );
320
336
$ modifiedRequest ->getMethod ()->willReturn ('GET ' );
321
337
$ modifiedRequest ->getHeaders ()->willReturn (['Accept ' => 'value ' , 'Cookie ' => 'value ' ]);
322
338
$ modifiedRequest ->withoutHeader ('Cookie ' )->willReturn ($ modifiedRequest );
@@ -347,8 +363,8 @@ function it_throws_circular_redirection_exception(UriInterface $uri, UriInterfac
347
363
$ this ->beAnInstanceOf ('spec\Http\Client\Common\Plugin\RedirectPluginStubCircular ' );
348
364
$ this ->beConstructedWith (spl_object_hash ((object )$ first ));
349
365
350
- $ request ->getRequestTarget ()->willReturn ('/original ' );
351
366
$ request ->getUri ()->willReturn ($ uri );
367
+ $ uri ->__toString ()->willReturn ('/original ' );
352
368
353
369
$ responseRedirect ->getStatusCode ()->willReturn ('302 ' );
354
370
$ responseRedirect ->hasHeader ('Location ' )->willReturn (true );
@@ -360,7 +376,7 @@ function it_throws_circular_redirection_exception(UriInterface $uri, UriInterfac
360
376
361
377
$ request ->withUri ($ uriRedirect )->willReturn ($ modifiedRequest );
362
378
$ modifiedRequest ->getUri ()->willReturn ($ uriRedirect );
363
- $ modifiedRequest -> getRequestTarget ()->willReturn ('/redirect ' );
379
+ $ uriRedirect -> __toString ()->willReturn ('/redirect ' );
364
380
$ modifiedRequest ->getMethod ()->willReturn ('GET ' );
365
381
366
382
$ next = function (RequestInterface $ receivedRequest ) use ($ request , $ responseRedirect ) {
@@ -373,6 +389,53 @@ function it_throws_circular_redirection_exception(UriInterface $uri, UriInterfac
373
389
$ promise ->shouldReturnAnInstanceOf ('Http\Promise\RejectedPromise ' );
374
390
$ promise ->shouldThrow ('Http\Client\Common\Exception\CircularRedirectionException ' )->duringWait ();
375
391
}
392
+
393
+ function it_redirects_http_to_https (
394
+ UriInterface $ uri ,
395
+ UriInterface $ uriRedirect ,
396
+ RequestInterface $ request ,
397
+ ResponseInterface $ responseRedirect ,
398
+ RequestInterface $ modifiedRequest ,
399
+ ResponseInterface $ finalResponse ,
400
+ Promise $ promise
401
+ ) {
402
+ $ responseRedirect ->getStatusCode ()->willReturn ('302 ' );
403
+ $ responseRedirect ->hasHeader ('Location ' )->willReturn (true );
404
+ $ responseRedirect ->getHeaderLine ('Location ' )->willReturn ('https://my-site.com/original ' );
405
+
406
+ $ request ->getUri ()->willReturn ($ uri );
407
+ $ request ->withUri ($ uriRedirect )->willReturn ($ modifiedRequest );
408
+ $ uri ->__toString ()->willReturn ('http://my-site.com/original ' );
409
+
410
+ $ uri ->withScheme ('https ' )->willReturn ($ uriRedirect );
411
+ $ uriRedirect ->withHost ('my-site.com ' )->willReturn ($ uriRedirect );
412
+ $ uriRedirect ->withPath ('/original ' )->willReturn ($ uriRedirect );
413
+ $ uriRedirect ->withFragment ('' )->willReturn ($ uriRedirect );
414
+ $ uriRedirect ->withQuery ('' )->willReturn ($ uriRedirect );
415
+ $ uriRedirect ->__toString ()->willReturn ('https://my-site.com/original ' );
416
+
417
+ $ modifiedRequest ->getUri ()->willReturn ($ uriRedirect );
418
+ $ modifiedRequest ->getMethod ()->willReturn ('GET ' );
419
+
420
+ $ next = function (RequestInterface $ receivedRequest ) use ($ request , $ responseRedirect ) {
421
+ if (Argument::is ($ request ->getWrappedObject ())->scoreArgument ($ receivedRequest )) {
422
+ return new FulfilledPromise ($ responseRedirect ->getWrappedObject ());
423
+ }
424
+ };
425
+
426
+ $ first = function (RequestInterface $ receivedRequest ) use ($ modifiedRequest , $ promise ) {
427
+ if (Argument::is ($ modifiedRequest ->getWrappedObject ())->scoreArgument ($ receivedRequest )) {
428
+ return $ promise ->getWrappedObject ();
429
+ }
430
+ };
431
+
432
+ $ promise ->getState ()->willReturn (Promise::FULFILLED );
433
+ $ promise ->wait ()->shouldBeCalled ()->willReturn ($ finalResponse );
434
+
435
+ $ finalPromise = $ this ->handleRequest ($ request , $ next , $ first );
436
+ $ finalPromise ->shouldReturnAnInstanceOf ('Http\Promise\FulfilledPromise ' );
437
+ $ finalPromise ->wait ()->shouldReturn ($ finalResponse );
438
+ }
376
439
}
377
440
378
441
class RedirectPluginStub extends RedirectPlugin
0 commit comments