diff --git a/tests/ServerTest.php b/tests/ServerTest.php index 3f823a17..2251258a 100644 --- a/tests/ServerTest.php +++ b/tests/ServerTest.php @@ -3,13 +3,21 @@ namespace LeagueTests; use League\OAuth2\Server\Entities\ClientEntity; +use League\OAuth2\Server\Exception\OAuthServerException; +use League\OAuth2\Server\Grant\AuthCodeGrant; use League\OAuth2\Server\Grant\ClientCredentialsGrant; use League\OAuth2\Server\Repositories\AccessTokenRepositoryInterface; +use League\OAuth2\Server\Repositories\AuthCodeRepositoryInterface; use League\OAuth2\Server\Repositories\ClientRepositoryInterface; +use League\OAuth2\Server\Repositories\RefreshTokenRepositoryInterface; use League\OAuth2\Server\Repositories\ScopeRepositoryInterface; +use League\OAuth2\Server\Repositories\UserRepositoryInterface; +use League\OAuth2\Server\ResponseTypes\BearerTokenResponse; use League\OAuth2\Server\Server; use LeagueTests\Stubs\StubResponseType; +use Psr\Http\Message\RequestInterface; use Psr\Http\Message\ResponseInterface; +use Zend\Diactoros\ServerRequest; class ServerTest extends \PHPUnit_Framework_TestCase { @@ -53,4 +61,80 @@ class ServerTest extends \PHPUnit_Framework_TestCase $response = $server->respondToRequest(); $this->assertEquals(200, $response->getStatusCode()); } + + public function testRespondToRequestPsrResponse() + { + $client = new ClientEntity(); + $client->setIdentifier('foo'); + $client->setIdentifier('http://bar.com'); + + $clientRepository = $this->getMock(ClientRepositoryInterface::class); + $clientRepository->method('getClientEntity')->willReturn($client); + + $server = new Server( + $clientRepository, + $this->getMock(AccessTokenRepositoryInterface::class), + $this->getMock(ScopeRepositoryInterface::class), + '', + '', + new StubResponseType() + ); + + $server->enableGrantType( + new AuthCodeGrant( + $this->getMock(AuthCodeRepositoryInterface::class), + $this->getMock(RefreshTokenRepositoryInterface::class), + $this->getMock(UserRepositoryInterface::class), + new \DateInterval('PT1H') + ), + new \DateInterval('PT1M') + ); + + $_SERVER['HTTP_HOST'] = 'http://auth.com'; + $_SERVER['REQUEST_URI'] = '/auth'; + $_GET['response_type'] = 'code'; + $_GET['client_id'] = $client->getIdentifier(); + $_GET['redirect_uri'] = $client->getRedirectUri(); + $response = $server->respondToRequest(); + $this->assertEquals(200, $response->getStatusCode()); + $this->assertTrue($response instanceof ResponseInterface); + } + + public function testGetResponseType() + { + $clientRepository = $this->getMock(ClientRepositoryInterface::class); + + $server = new Server( + $clientRepository, + $this->getMock(AccessTokenRepositoryInterface::class), + $this->getMock(ScopeRepositoryInterface::class), + '', + '' + ); + + $abstractGrantReflection = new \ReflectionClass($server); + $method = $abstractGrantReflection->getMethod('getResponseType'); + $method->setAccessible(true); + + $this->assertTrue($method->invoke($server) instanceof BearerTokenResponse); + } + + public function testValidateRequest() + { + $clientRepository = $this->getMock(ClientRepositoryInterface::class); + + $server = new Server( + $clientRepository, + $this->getMock(AccessTokenRepositoryInterface::class), + $this->getMock(ScopeRepositoryInterface::class), + '', + '' + ); + + try { + $server->validateRequest(new ServerRequest()); + } catch (OAuthServerException $e) { + $this->assertEquals('Missing "Authorization" header', $e->getHint()); + } + } }