withId(123) ->withResult('test') ->build(); $this->assertEquals('{"jsonrpc":"2.0","result":"test","id":123}', $response); } public function testBuildResponseWithError() { $response = ResponseBuilder::create() ->withId(123) ->withResult('test') ->withError(42, 'Test', 'More info') ->build(); $this->assertEquals('{"jsonrpc":"2.0","error":{"code":42,"message":"Test","data":"More info"},"id":123}', $response); } public function testBuildResponseWithException() { $response = ResponseBuilder::create() ->withId(123) ->withResult('test') ->withException(new Exception('Test')) ->build(); $this->assertEquals('{"jsonrpc":"2.0","error":{"code":0,"message":"Test"},"id":123}', $response); } public function testBuildResponseWithResponseException() { $exception = new ResponseException('Error', 42); $exception->setData('Data'); $response = ResponseBuilder::create() ->withId(123) ->withResult('test') ->withException($exception) ->build(); $this->assertEquals('{"jsonrpc":"2.0","error":{"code":42,"message":"Error","data":"Data"},"id":123}', $response); } public function testBuildResponseWithAccessDeniedException() { $responseBuilder = ResponseBuilder::create(); $response = $responseBuilder ->withId(123) ->withResult('test') ->withException(new AccessDeniedException('Test')) ->build(); $this->assertEquals('{"jsonrpc":"2.0","error":{"code":403,"message":"Forbidden"},"id":123}', $response); $this->assertEquals('HTTP/1.0 403 Forbidden', $responseBuilder->getStatus()); $this->assertEquals( array('Content-Type' => 'application/json'), $responseBuilder->getHeaders() ); } public function testBuildResponseWithAuthenticationFailureException() { $responseBuilder = ResponseBuilder::create(); $response = $responseBuilder ->withId(123) ->withResult('test') ->withException(new AuthenticationFailureException('Test')) ->build(); $this->assertEquals('{"jsonrpc":"2.0","error":{"code":401,"message":"Unauthorized"},"id":123}', $response); $this->assertEquals('HTTP/1.0 401 Unauthorized', $responseBuilder->getStatus()); $this->assertEquals( array('Content-Type' => 'application/json', 'WWW-Authenticate' => 'Basic realm="JsonRPC"'), $responseBuilder->getHeaders() ); } public function testBuildResponseWithResponseEncodingFailureException() { $response = ResponseBuilder::create() ->withId(123) ->withResult('test') ->withException(new ResponseEncodingFailureException('Test')) ->build(); $this->assertEquals('{"jsonrpc":"2.0","error":{"code":-32603,"message":"Internal error","data":"Test"},"id":123}', $response); } public function testBuildResponseWithInvalidArgumentException() { $response = ResponseBuilder::create() ->withId(123) ->withResult('test') ->withException(new InvalidArgumentException('Test')) ->build(); $this->assertEquals('{"jsonrpc":"2.0","error":{"code":-32602,"message":"Invalid params","data":"Test"},"id":123}', $response); } public function testBuildResponseWithBadFunctionCallException() { $response = ResponseBuilder::create() ->withId(123) ->withResult('test') ->withException(new BadFunctionCallException('Test')) ->build(); $this->assertEquals('{"jsonrpc":"2.0","error":{"code":-32601,"message":"Method not found"},"id":123}', $response); } public function testBuildResponseWithInvalidJsonRpcFormatException() { $response = ResponseBuilder::create() ->withId(123) ->withResult('test') ->withException(new InvalidJsonRpcFormatException('Test')) ->build(); $this->assertEquals('{"jsonrpc":"2.0","error":{"code":-32600,"message":"Invalid Request"},"id":null}', $response); } public function testBuildResponseWithInvalidJsonFormatException() { $response = ResponseBuilder::create() ->withId(123) ->withResult('test') ->withException(new InvalidJsonFormatException('Test')) ->build(); $this->assertEquals('{"jsonrpc":"2.0","error":{"code":-32700,"message":"Parse error"},"id":null}', $response); } }