/** * @dataProvider insertObjectProvider */ public function testInsertObject(array $options, $expectedUploaderType, $expectedContentType, array $expectedMetadata) { $actualRequest = null; $response = new Response(200, ['Location' => 'http://www.mordor.com'], $this->successBody); $this->requestWrapper->send(Argument::type('Psr\\Http\\Message\\RequestInterface'), Argument::type('array'))->will(function ($args) use(&$actualRequest, $response) { $request = $args[0]; if ($request->getMethod() === 'POST') { $actualRequest = $request; } return $response; }); $rest = new Rest(); $rest->setRequestWrapper($this->requestWrapper->reveal()); $uploader = $rest->insertObject($options); $uploader->upload(); list($contentType, $metadata) = $this->getContentTypeAndMetadata($actualRequest); $this->assertInstanceOf($expectedUploaderType, $uploader); $this->assertEquals($expectedContentType, $contentType); foreach ($expectedMetadata as $key => $value) { $this->assertEquals($value, $metadata[$key]); } }