Beispiel #1
0
 public function it_should_catch_any_exception_and_convert_it_to_error(RequestParserInterface $requestParser, MethodDispatcherInterface $methodDispatcher, ResponseSerializerInterface $responseSerializer, ErrorResponseFactory $errorResponseFactory)
 {
     $requestParser->parse('{"jsonrpc":"2.0","method":"calculator.calculateProfit","params":{"month":"January"},"id":"calculate-january-profit"}')->willReturn(new Request('2.0', 'calculate-january-profit', 'calculator.calculateProfit', ['month' => 'January']));
     $methodDispatcher->dispatch('calculator.calculateProfit', ['month' => 'January'])->will(function () {
         throw new Exception('test', 32);
     });
     $errorResponseFactory->createForException(new Exception('test', 32), 'calculate-january-profit')->willReturn(ErrorResponse::applicationDefinedError('calculate-january-profit', 'test', 32));
     $responseSerializer->serializeResponse('2.0', new ErrorResponse('calculate-january-profit', new Error('test', 32)))->willReturn('{"jsonrpc":"2.0","error": {"code": 32, "message": "test"}')->shouldBeCalled();
     $this->handle('{"jsonrpc":"2.0","method":"calculator.calculateProfit","params":{"month":"January"},"id":"calculate-january-profit"}')->shouldBeLike('{"jsonrpc":"2.0","error": {"code": 32, "message": "test"}');
 }
 /**
  * @param \Exception  $exception
  * @param string|null $id
  *
  * @return ErrorResponse
  */
 public function createForException(\Exception $exception, $id = null)
 {
     switch (true) {
         case $exception instanceof ParseException:
             return ErrorResponse::parseError($exception->getMessage() ?: 'Parse error');
         case $exception instanceof InvalidRequestException:
             return ErrorResponse::invalidRequestError($exception->getMessage() ?: 'Invalid request');
         case $exception instanceof MethodNotFoundException:
             return ErrorResponse::methodNotFoundError($id, $exception->getMessage() ?: 'Method not found');
         case $exception instanceof InvalidCallableArgumentsException:
         case $exception instanceof InvalidMethodParametersException:
             return ErrorResponse::invalidParamsError($id, $exception->getMessage() ?: 'Invalid params');
         case $exception instanceof ApplicationDefinedException:
             return ErrorResponse::applicationDefinedError($id, $exception->getMessage(), $exception->getCode());
         case $exception instanceof \Exception:
         default:
             if ($this->exposeInternalExceptions) {
                 return new ErrorResponse($id, new Error($exception->getMessage(), $exception->getCode()));
             }
             return ErrorResponse::applicationError($id);
     }
 }