/** * Tests the createResponse() method. * @param int $statusCode The status code to use. * @param \BluePsyduck\MultiCurl\Entity\Request $request The request to use. * @param bool $expectHydrateResponse Whether to expect hydrateResponse() to be called. * @param int $expectedErrorCode The expected status code. * @param string $expectedErrorMessage The expected error message. * @covers \BluePsyduck\MultiCurl\Manager::createResponse * @dataProvider provideCreateResponse */ public function testCreateResponse($statusCode, $request, $expectHydrateResponse, $expectedErrorCode, $expectedErrorMessage) { /* @var $multiCurl \BluePsyduck\MultiCurl\Wrapper\MultiCurl|\PHPUnit_Framework_MockObject_MockObject */ $multiCurl = $this->getMockBuilder('BluePsyduck\\MultiCurl\\Wrapper\\MultiCurl')->setMethods(array('removeCurl'))->getMock(); $multiCurl->expects($this->once())->method('removeCurl')->with($request->getCurl()); /* @var $manager \BluePsyduck\MultiCurl\Manager|\PHPUnit_Framework_MockObject_MockObject */ $manager = $this->getMockBuilder('BluePsyduck\\MultiCurl\\Manager')->setMethods(array('hydrateResponse'))->getMock(); $manager->expects($expectHydrateResponse ? $this->once() : $this->never())->method('hydrateResponse')->with($this->isInstanceOf('BluePsyduck\\MultiCurl\\Entity\\Response'), $request); $this->injectProperty($manager, 'multiCurl', $multiCurl); $result = $this->invokeMethod($manager, 'createResponse', array($statusCode, $request)); $this->assertInstanceOf('BluePsyduck\\MultiCurl\\Entity\\Response', $result); /* @var \BluePsyduck\MultiCurl\Entity\Response $result */ $this->assertEquals($expectedErrorCode, $result->getErrorCode()); $this->assertEquals($expectedErrorMessage, $result->getErrorMessage()); }
/** * Hydrates the data from the executed request into the response instance. * @param \BluePsyduck\MultiCurl\Entity\Response $response * @param \BluePsyduck\MultiCurl\Entity\Request $request * @return $this */ protected function hydrateResponse(Response $response, Request $request) { $curl = $request->getCurl(); $headerSize = $curl->getInfo(CURLINFO_HEADER_SIZE); $rawContent = $this->multiCurl->getContent($curl); $response->setStatusCode($curl->getInfo(CURLINFO_HTTP_CODE))->setHeaders($this->parseHeaders(substr($rawContent, 0, $headerSize)))->setContent(substr($rawContent, $headerSize)); return $this; }