diff --git a/src/Http/MediaFileUpload.php b/src/Http/MediaFileUpload.php index 2713ea415..0edd1405f 100644 --- a/src/Http/MediaFileUpload.php +++ b/src/Http/MediaFileUpload.php @@ -297,9 +297,9 @@ private function fetchResumeUri() $body = $this->request->getBody(); $headers = [ 'content-type' => 'application/json; charset=UTF-8', - 'content-length' => $body->getSize(), + 'content-length' => (string) $body->getSize(), 'x-upload-content-type' => $this->mimeType, - 'x-upload-content-length' => $this->size, + 'x-upload-content-length' => (string) $this->size, 'expect' => '', ]; foreach ($headers as $key => $value) { diff --git a/src/Service/Resource.php b/src/Service/Resource.php index 693aaa781..a81b85a9f 100644 --- a/src/Service/Resource.php +++ b/src/Service/Resource.php @@ -240,7 +240,7 @@ public function call($name, $arguments, $expectedClass = null) if ($this->client->shouldDefer()) { // @TODO find a better way to do this $request = $request - ->withHeader('X-Php-Expected-Class', $expectedClass); + ->withHeader('X-Php-Expected-Class', (string) $expectedClass); return $request; } diff --git a/tests/Google/Http/MediaFileUploadTest.php b/tests/Google/Http/MediaFileUploadTest.php index ae7bffedf..361b0f290 100644 --- a/tests/Google/Http/MediaFileUploadTest.php +++ b/tests/Google/Http/MediaFileUploadTest.php @@ -21,11 +21,14 @@ namespace Google\Tests\Http; -use Google\Tests\BaseTest; +use Google\Client; use Google\Http\MediaFileUpload; use Google\Service\Drive; +use Google\Tests\BaseTest; use GuzzleHttp\Psr7; use GuzzleHttp\Psr7\Request; +use GuzzleHttp\Psr7\Response; +use Prophecy\Argument; class MediaFileUploadTest extends BaseTest { @@ -132,6 +135,23 @@ public function testGetResumeUri() $this->assertEquals('resumable', $query['uploadType']); } + public function testGetResumeUriUsesStringHeaderValues() + { + $client = $this->prophesize(Client::class); + $client->execute(Argument::that(function ($request) { + $this->assertSame(['2'], $request->getHeader('content-length')); + $this->assertSame(['5'], $request->getHeader('x-upload-content-length')); + + return true; + }), false)->willReturn(new Response(200, ['location' => 'https://upload.example.com'])); + + $request = new Request('POST', 'http://www.example.com', [], '{}'); + $media = new MediaFileUpload($client->reveal(), $request, 'text/plain', null, true); + $media->setFileSize(5); + + $this->assertSame('https://upload.example.com', $media->getResumeUri()); + } + public function testNextChunk() { $this->checkToken(); diff --git a/tests/Google/Service/ResourceTest.php b/tests/Google/Service/ResourceTest.php index b8d3d8959..4ce6c9443 100644 --- a/tests/Google/Service/ResourceTest.php +++ b/tests/Google/Service/ResourceTest.php @@ -106,6 +106,27 @@ public function testCall() $this->assertEquals("POST", $request->getMethod()); $this->assertFalse($request->hasHeader('Content-Type')); $this->assertFalse($request->hasHeader('X-Goog-Api-Version')); + $this->assertSame([''], $request->getHeader('X-Php-Expected-Class')); + } + + public function testCallWithExpectedClassHeader() + { + $resource = new GoogleResource( + $this->service, + "test", + "testResource", + [ + "methods" => [ + "testMethod" => [ + "parameters" => [], + "path" => "method/path", + "httpMethod" => "POST", + ] + ] + ] + ); + $request = $resource->call("testMethod", [[]], \stdClass::class); + $this->assertSame([\stdClass::class], $request->getHeader('X-Php-Expected-Class')); } public function testCallWithUniverseDomainTemplate()