public function processResponse(CommandTransaction $transaction) { $payload = $transaction->response->json(); if ($payload['error']) { throw APIErrorException::createFromTransaction($transaction); } // replace string datetime with objects if (is_array($payload['result'])) { array_walk_recursive($payload['result'], function (&$value, $key) { //01 31 2010 13:09:05 +0600 $pattern = '/^\\d{2}\\s\\d{2}\\s\\d{4}\\s\\d{2}:\\d{2}:\\d{2}\\s.?\\d{4}$/'; $format = 'd m Y H:i:s O'; if (preg_match($pattern, $value)) { $value = \DateTime::createFromFormat($format, $value); } }); } return ['id' => $payload['id'], 'code' => $transaction->response->getStatusCode(), 'result' => $payload['result'] ?: []]; }
protected function verifyExceptionObject($code, $class) { $client = $this->getMock('GuzzleHttp\\Command\\ServiceClientInterface'); $command = $this->getMock('LacunaPHP\\APIClient\\Command\\APICommandInterface'); $transaction = new CommandTransaction($client, $command); $transaction->request = $this->getMock('GuzzleHttp\\Message\\RequestInterface'); $transaction->request->method('getUrl')->willReturn('https://api.example.com/module'); $transaction->response = $this->getMock('GuzzleHttp\\Message\\ResponseInterface'); $transaction->response->method('getStatusCode')->willReturn(500); $transaction->response->method('getReasonPhrase')->willReturn('Unknown Exception'); $transaction->response->method('json')->willReturn(['jsonrpc' => '2.0', 'id' => 1, 'error' => ['code' => $code, 'message' => 'API Error', 'data' => ['class' => $class]]]); $exception = APIErrorException::createFromTransaction($transaction); $this->assertInstanceOf($class, $exception); $this->assertEquals($code, $exception->getCode()); $this->assertEquals('API Error', $exception->getMessage()); $this->assertEquals(['class' => $class], $exception->getData()); $this->assertEquals(1, $exception->getID()); }