152 lines
5.2 KiB
PHP
152 lines
5.2 KiB
PHP
<?php
|
|
|
|
use JsonRPC\Exception\AccessDeniedException;
|
|
use JsonRPC\Exception\AuthenticationFailureException;
|
|
use JsonRPC\Exception\InvalidJsonFormatException;
|
|
use JsonRPC\Exception\InvalidJsonRpcFormatException;
|
|
use JsonRPC\Exception\ResponseEncodingFailureException;
|
|
use JsonRPC\Exception\ResponseException;
|
|
use JsonRPC\Response\ResponseBuilder;
|
|
|
|
require_once __DIR__.'/../../../../vendor/autoload.php';
|
|
|
|
class ResponseBuilderTest extends PHPUnit_Framework_TestCase
|
|
{
|
|
public function testBuildResponse()
|
|
{
|
|
$response = ResponseBuilder::create()
|
|
->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);
|
|
}
|
|
}
|