Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 784edde

Browse filesBrowse files
committed
[HttpClient] Fix handling error info in MockResponse
1 parent 382cde2 commit 784edde
Copy full SHA for 784edde

File tree

3 files changed

+21
-29
lines changed
Filter options

3 files changed

+21
-29
lines changed

‎src/Symfony/Component/HttpClient/Response/MockResponse.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/HttpClient/Response/MockResponse.php
+6-2Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,7 @@ protected static function select(ClientState $multi, float $timeout): int
204204
private static function writeRequest(self $response, array $options, ResponseInterface $mock)
205205
{
206206
$onProgress = $options['on_progress'] ?? static function () {};
207-
$response->info += $mock->getInfo() ?: [];
207+
$response->info += $mock->getInfo();
208208

209209
// simulate "size_upload" if it is set
210210
if (isset($response->info['size_upload'])) {
@@ -249,7 +249,7 @@ private static function readResponse(self $response, array $options, ResponseInt
249249
$onProgress = $options['on_progress'] ?? static function () {};
250250

251251
// populate info related to headers
252-
$info = $mock->getInfo() ?: [];
252+
$info = $mock->getInfo();
253253
$response->info['http_code'] = ($info['http_code'] ?? 0) ?: $mock->getStatusCode() ?: 200;
254254
$response->addResponseHeaders($info['response_headers'] ?? [], $response->info, $response->headers);
255255
$dlSize = isset($response->headers['content-encoding']) || 'HEAD' === $response->info['http_method'] || \in_array($response->info['http_code'], [204, 304], true) ? 0 : (int) ($response->headers['content-length'][0] ?? 0);
@@ -260,6 +260,10 @@ private static function readResponse(self $response, array $options, ResponseInt
260260
'http_code' => $response->info['http_code'],
261261
] + $info + $response->info;
262262

263+
if (null !== $response->info['error']) {
264+
throw new TransportException($response->info['error']);
265+
}
266+
263267
if (!isset($response->info['total_time'])) {
264268
$response->info['total_time'] = microtime(true) - $response->info['start_time'];
265269
}

‎src/Symfony/Component/HttpClient/Tests/MockHttpClientTest.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/HttpClient/Tests/MockHttpClientTest.php
+4-27Lines changed: 4 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
use Symfony\Component\HttpClient\Response\ResponseStream;
1919
use Symfony\Contracts\HttpClient\ChunkInterface;
2020
use Symfony\Contracts\HttpClient\HttpClientInterface;
21-
use Symfony\Contracts\HttpClient\ResponseInterface;
2221

2322
class MockHttpClientTest extends HttpClientTestCase
2423
{
@@ -141,16 +140,8 @@ protected function getHttpClient(string $testCase): HttpClientInterface
141140
break;
142141

143142
case 'testDnsError':
144-
$mock = $this->createMock(ResponseInterface::class);
145-
$mock->expects($this->any())
146-
->method('getStatusCode')
147-
->willThrowException(new TransportException('DSN error'));
148-
$mock->expects($this->any())
149-
->method('getInfo')
150-
->willReturn([]);
151-
152-
$responses[] = $mock;
153-
$responses[] = $mock;
143+
$responses[] = $mockResponse = new MockResponse('', ['error' => 'DNS error']);
144+
$responses[] = $mockResponse;
154145
break;
155146

156147
case 'testToStream':
@@ -164,12 +155,7 @@ protected function getHttpClient(string $testCase): HttpClientInterface
164155
break;
165156

166157
case 'testTimeoutOnAccess':
167-
$mock = $this->createMock(ResponseInterface::class);
168-
$mock->expects($this->any())
169-
->method('getHeaders')
170-
->willThrowException(new TransportException('Timeout'));
171-
172-
$responses[] = $mock;
158+
$responses[] = new MockResponse('', ['error' => 'Timeout']);
173159
break;
174160

175161
case 'testAcceptHeader':
@@ -231,16 +217,7 @@ protected function getHttpClient(string $testCase): HttpClientInterface
231217
break;
232218

233219
case 'testMaxDuration':
234-
$mock = $this->createMock(ResponseInterface::class);
235-
$mock->expects($this->any())
236-
->method('getContent')
237-
->willReturnCallback(static function (): void {
238-
usleep(100000);
239-
240-
throw new TransportException('Max duration was reached.');
241-
});
242-
243-
$responses[] = $mock;
220+
$responses[] = new MockResponse('', ['error' => 'Max duration was reached.']);
244221
break;
245222
}
246223

‎src/Symfony/Component/HttpClient/Tests/Response/MockResponseTest.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/HttpClient/Tests/Response/MockResponseTest.php
+11Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
use PHPUnit\Framework\TestCase;
66
use Symfony\Component\HttpClient\Exception\JsonException;
7+
use Symfony\Component\HttpClient\Exception\TransportException;
78
use Symfony\Component\HttpClient\Response\MockResponse;
89

910
/**
@@ -83,4 +84,14 @@ public function toArrayErrors()
8384
'message' => 'JSON content was expected to decode to an array, "integer" returned for "https://example.com/file.json".',
8485
];
8586
}
87+
88+
public function testErrorIsTakenIntoAccountInInitialization()
89+
{
90+
$this->expectException(TransportException::class);
91+
$this->expectExceptionMessage('ccc error');
92+
93+
MockResponse::fromRequest('GET', 'https://symfony.com', [], new MockResponse('', [
94+
'error' => 'ccc error',
95+
]))->getStatusCode();
96+
}
8697
}

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.