Skip to content

Commit 1441bb1

Browse files
fix: cast generated header values to strings (#2717)
Co-authored-by: Brent Shaffer <betterbrent@google.com>
1 parent 3cc1f74 commit 1441bb1

4 files changed

Lines changed: 45 additions & 4 deletions

File tree

src/Http/MediaFileUpload.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -297,9 +297,9 @@ private function fetchResumeUri()
297297
$body = $this->request->getBody();
298298
$headers = [
299299
'content-type' => 'application/json; charset=UTF-8',
300-
'content-length' => $body->getSize(),
300+
'content-length' => (string) $body->getSize(),
301301
'x-upload-content-type' => $this->mimeType,
302-
'x-upload-content-length' => $this->size,
302+
'x-upload-content-length' => (string) $this->size,
303303
'expect' => '',
304304
];
305305
foreach ($headers as $key => $value) {

src/Service/Resource.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -240,7 +240,7 @@ public function call($name, $arguments, $expectedClass = null)
240240
if ($this->client->shouldDefer()) {
241241
// @TODO find a better way to do this
242242
$request = $request
243-
->withHeader('X-Php-Expected-Class', $expectedClass);
243+
->withHeader('X-Php-Expected-Class', (string) $expectedClass);
244244

245245
return $request;
246246
}

tests/Google/Http/MediaFileUploadTest.php

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,14 @@
2121

2222
namespace Google\Tests\Http;
2323

24-
use Google\Tests\BaseTest;
24+
use Google\Client;
2525
use Google\Http\MediaFileUpload;
2626
use Google\Service\Drive;
27+
use Google\Tests\BaseTest;
2728
use GuzzleHttp\Psr7;
2829
use GuzzleHttp\Psr7\Request;
30+
use GuzzleHttp\Psr7\Response;
31+
use Prophecy\Argument;
2932

3033
class MediaFileUploadTest extends BaseTest
3134
{
@@ -132,6 +135,23 @@ public function testGetResumeUri()
132135
$this->assertEquals('resumable', $query['uploadType']);
133136
}
134137

138+
public function testGetResumeUriUsesStringHeaderValues()
139+
{
140+
$client = $this->prophesize(Client::class);
141+
$client->execute(Argument::that(function ($request) {
142+
$this->assertSame(['2'], $request->getHeader('content-length'));
143+
$this->assertSame(['5'], $request->getHeader('x-upload-content-length'));
144+
145+
return true;
146+
}), false)->willReturn(new Response(200, ['location' => 'https://upload.example.com']));
147+
148+
$request = new Request('POST', 'http://www.example.com', [], '{}');
149+
$media = new MediaFileUpload($client->reveal(), $request, 'text/plain', null, true);
150+
$media->setFileSize(5);
151+
152+
$this->assertSame('https://upload.example.com', $media->getResumeUri());
153+
}
154+
135155
public function testNextChunk()
136156
{
137157
$this->checkToken();

tests/Google/Service/ResourceTest.php

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,27 @@ public function testCall()
106106
$this->assertEquals("POST", $request->getMethod());
107107
$this->assertFalse($request->hasHeader('Content-Type'));
108108
$this->assertFalse($request->hasHeader('X-Goog-Api-Version'));
109+
$this->assertSame([''], $request->getHeader('X-Php-Expected-Class'));
110+
}
111+
112+
public function testCallWithExpectedClassHeader()
113+
{
114+
$resource = new GoogleResource(
115+
$this->service,
116+
"test",
117+
"testResource",
118+
[
119+
"methods" => [
120+
"testMethod" => [
121+
"parameters" => [],
122+
"path" => "method/path",
123+
"httpMethod" => "POST",
124+
]
125+
]
126+
]
127+
);
128+
$request = $resource->call("testMethod", [[]], \stdClass::class);
129+
$this->assertSame([\stdClass::class], $request->getHeader('X-Php-Expected-Class'));
109130
}
110131

111132
public function testCallWithUniverseDomainTemplate()

0 commit comments

Comments
 (0)