diff options
Diffstat (limited to 'vendor/lusitanian/oauth/tests/Unit/OAuth2/Service/AbstractServiceTest.php')
-rw-r--r-- | vendor/lusitanian/oauth/tests/Unit/OAuth2/Service/AbstractServiceTest.php | 401 |
1 files changed, 401 insertions, 0 deletions
diff --git a/vendor/lusitanian/oauth/tests/Unit/OAuth2/Service/AbstractServiceTest.php b/vendor/lusitanian/oauth/tests/Unit/OAuth2/Service/AbstractServiceTest.php new file mode 100644 index 00000000..595db2a3 --- /dev/null +++ b/vendor/lusitanian/oauth/tests/Unit/OAuth2/Service/AbstractServiceTest.php @@ -0,0 +1,401 @@ +<?php + +namespace OAuthTest\Unit\OAuth2\Service; + +use OAuthTest\Mocks\OAuth2\Service\Mock; +use OAuth\Common\Http\Uri\Uri; +use OAuth\Common\Token\TokenInterface; + +class AbstractServiceTest extends \PHPUnit_Framework_TestCase +{ + /** + * @covers OAuth\OAuth2\Service\AbstractService::__construct + */ + public function testConstructCorrectInterface() + { + $service = $this->getMockForAbstractClass( + '\\OAuth\\OAuth2\\Service\\AbstractService', + array( + $this->getMock('\\OAuth\\Common\\Consumer\\CredentialsInterface'), + $this->getMock('\\OAuth\\Common\\Http\\Client\\ClientInterface'), + $this->getMock('\\OAuth\\Common\\Storage\\TokenStorageInterface'), + array(), + ) + ); + + $this->assertInstanceOf('\\OAuth\\OAuth2\\Service\\ServiceInterface', $service); + } + + /** + * @covers OAuth\OAuth2\Service\AbstractService::__construct + */ + public function testConstructCorrectParent() + { + $service = $this->getMockForAbstractClass( + '\\OAuth\\OAuth2\\Service\\AbstractService', + array( + $this->getMock('\\OAuth\\Common\\Consumer\\CredentialsInterface'), + $this->getMock('\\OAuth\\Common\\Http\\Client\\ClientInterface'), + $this->getMock('\\OAuth\\Common\\Storage\\TokenStorageInterface'), + array(), + ) + ); + + $this->assertInstanceOf('\\OAuth\\Common\\Service\\AbstractService', $service); + } + + /** + * @covers OAuth\OAuth2\Service\AbstractService::__construct + */ + public function testConstructCorrectParentCustomUri() + { + $service = $this->getMockForAbstractClass( + '\\OAuth\\OAuth2\\Service\\AbstractService', + array( + $this->getMock('\\OAuth\\Common\\Consumer\\CredentialsInterface'), + $this->getMock('\\OAuth\\Common\\Http\\Client\\ClientInterface'), + $this->getMock('\\OAuth\\Common\\Storage\\TokenStorageInterface'), + array(), + $this->getMock('\\OAuth\\Common\\Http\\Uri\\UriInterface'), + ) + ); + + $this->assertInstanceOf('\\OAuth\\Common\\Service\\AbstractService', $service); + } + + /** + * @covers OAuth\OAuth2\Service\AbstractService::__construct + * @covers OAuth\OAuth2\Service\AbstractService::isValidScope + */ + public function testConstructThrowsExceptionOnInvalidScope() + { + $this->setExpectedException('\\OAuth\\OAuth2\\Service\\Exception\\InvalidScopeException'); + + $service = new Mock( + $this->getMock('\\OAuth\\Common\\Consumer\\CredentialsInterface'), + $this->getMock('\\OAuth\\Common\\Http\\Client\\ClientInterface'), + $this->getMock('\\OAuth\\Common\\Storage\\TokenStorageInterface'), + array('invalidscope') + ); + } + + /** + * @covers OAuth\OAuth2\Service\AbstractService::__construct + * @covers OAuth\OAuth2\Service\AbstractService::getAuthorizationUri + * @covers OAuth\OAuth2\Service\AbstractService::getAuthorizationEndpoint + */ + public function testGetAuthorizationUriWithoutParametersOrScopes() + { + $credentials = $this->getMock('\\OAuth\\Common\\Consumer\\CredentialsInterface'); + $credentials->expects($this->once())->method('getConsumerId')->will($this->returnValue('foo')); + $credentials->expects($this->once())->method('getCallbackUrl')->will($this->returnValue('bar')); + + $service = new Mock( + $credentials, + $this->getMock('\\OAuth\\Common\\Http\\Client\\ClientInterface'), + $this->getMock('\\OAuth\\Common\\Storage\\TokenStorageInterface') + ); + + $this->assertSame( + 'http://pieterhordijk.com/auth?type=web_server&client_id=foo&redirect_uri=bar&response_type=code&scope=', + $service->getAuthorizationUri()->getAbsoluteUri() + ); + } + + /** + * @covers OAuth\OAuth2\Service\AbstractService::__construct + * @covers OAuth\OAuth2\Service\AbstractService::getAuthorizationUri + * @covers OAuth\OAuth2\Service\AbstractService::getAuthorizationEndpoint + */ + public function testGetAuthorizationUriWithParametersWithoutScopes() + { + $credentials = $this->getMock('\\OAuth\\Common\\Consumer\\CredentialsInterface'); + $credentials->expects($this->once())->method('getConsumerId')->will($this->returnValue('foo')); + $credentials->expects($this->once())->method('getCallbackUrl')->will($this->returnValue('bar')); + + $service = new Mock( + $credentials, + $this->getMock('\\OAuth\\Common\\Http\\Client\\ClientInterface'), + $this->getMock('\\OAuth\\Common\\Storage\\TokenStorageInterface') + ); + + $this->assertSame( + 'http://pieterhordijk.com/auth?foo=bar&baz=beer&type=web_server&client_id=foo&redirect_uri=bar&response_type=code&scope=', + $service->getAuthorizationUri(array('foo' => 'bar', 'baz' => 'beer'))->getAbsoluteUri() + ); + } + + /** + * @covers OAuth\OAuth2\Service\AbstractService::__construct + * @covers OAuth\OAuth2\Service\AbstractService::isValidScope + * @covers OAuth\OAuth2\Service\AbstractService::getAuthorizationUri + * @covers OAuth\OAuth2\Service\AbstractService::getAuthorizationEndpoint + */ + public function testGetAuthorizationUriWithParametersAndScopes() + { + $credentials = $this->getMock('\\OAuth\\Common\\Consumer\\CredentialsInterface'); + $credentials->expects($this->once())->method('getConsumerId')->will($this->returnValue('foo')); + $credentials->expects($this->once())->method('getCallbackUrl')->will($this->returnValue('bar')); + + $service = new Mock( + $credentials, + $this->getMock('\\OAuth\\Common\\Http\\Client\\ClientInterface'), + $this->getMock('\\OAuth\\Common\\Storage\\TokenStorageInterface'), + array('mock', 'mock2') + ); + + $this->assertSame( + 'http://pieterhordijk.com/auth?foo=bar&baz=beer&type=web_server&client_id=foo&redirect_uri=bar&response_type=code&scope=mock+mock2', + $service->getAuthorizationUri(array('foo' => 'bar', 'baz' => 'beer'))->getAbsoluteUri() + ); + } + + /** + * @covers OAuth\OAuth2\Service\AbstractService::__construct + * @covers OAuth\OAuth2\Service\AbstractService::requestAccessToken + * @covers OAuth\OAuth2\Service\AbstractService::getAccessTokenEndpoint + * @covers OAuth\OAuth2\Service\AbstractService::getExtraOAuthHeaders + * @covers OAuth\OAuth2\Service\AbstractService::parseAccessTokenResponse + * @covers OAuth\OAuth2\Service\AbstractService::service + */ + public function testRequestAccessToken() + { + $service = new Mock( + $this->getMock('\\OAuth\\Common\\Consumer\\CredentialsInterface'), + $this->getMock('\\OAuth\\Common\\Http\\Client\\ClientInterface'), + $this->getMock('\\OAuth\\Common\\Storage\\TokenStorageInterface') + ); + + $this->assertInstanceof('\\OAuth\\OAuth2\\Token\\StdOAuth2Token', $service->requestAccessToken('code')); + } + + /** + * @covers OAuth\OAuth2\Service\AbstractService::__construct + * @covers OAuth\OAuth2\Service\AbstractService::request + * @covers OAuth\OAuth2\Service\AbstractService::determineRequestUriFromPath + */ + public function testRequestThrowsExceptionWhenTokenIsExpired() + { + $tokenExpiration = new \DateTime('26-03-1984 00:00:00'); + + $token = $this->getMock('\\OAuth\\OAuth2\\Token\\TokenInterface'); + $token->expects($this->any())->method('getEndOfLife')->will($this->returnValue($tokenExpiration->format('U'))); + + $storage = $this->getMock('\\OAuth\\Common\\Storage\\TokenStorageInterface'); + $storage->expects($this->once())->method('retrieveAccessToken')->will($this->returnValue($token)); + + $service = new Mock( + $this->getMock('\\OAuth\\Common\\Consumer\\CredentialsInterface'), + $this->getMock('\\OAuth\\Common\\Http\\Client\\ClientInterface'), + $storage + ); + + $this->setExpectedException('\\OAuth\\Common\\Token\\Exception\\ExpiredTokenException', 'Token expired on 03/26/1984 at 12:00:00 AM'); + + $service->request('https://pieterhordijk.com/my/awesome/path'); + } + + /** + * @covers OAuth\OAuth2\Service\AbstractService::__construct + * @covers OAuth\OAuth2\Service\AbstractService::request + * @covers OAuth\OAuth2\Service\AbstractService::determineRequestUriFromPath + * @covers OAuth\OAuth2\Service\AbstractService::getAuthorizationMethod + * @covers OAuth\OAuth2\Service\AbstractService::parseAccessTokenResponse + * @covers OAuth\OAuth2\Service\AbstractService::service + * @covers OAuth\OAuth2\Service\AbstractService::getExtraApiHeaders + */ + public function testRequestOauthAuthorizationMethod() + { + $client = $this->getMock('\\OAuth\\Common\\Http\\Client\\ClientInterface'); + $client->expects($this->once())->method('retrieveResponse')->will($this->returnArgument(2)); + + $token = $this->getMock('\\OAuth\\OAuth2\\Token\\TokenInterface'); + $token->expects($this->once())->method('getEndOfLife')->will($this->returnValue(TokenInterface::EOL_NEVER_EXPIRES)); + $token->expects($this->once())->method('getAccessToken')->will($this->returnValue('foo')); + + $storage = $this->getMock('\\OAuth\\Common\\Storage\\TokenStorageInterface'); + $storage->expects($this->once())->method('retrieveAccessToken')->will($this->returnValue($token)); + + $service = new Mock( + $this->getMock('\\OAuth\\Common\\Consumer\\CredentialsInterface'), + $client, + $storage + ); + + $headers = $service->request('https://pieterhordijk.com/my/awesome/path'); + + $this->assertTrue(array_key_exists('Authorization', $headers)); + $this->assertTrue(in_array('OAuth foo', $headers, true)); + } + + /** + * @covers OAuth\OAuth2\Service\AbstractService::__construct + * @covers OAuth\OAuth2\Service\AbstractService::request + * @covers OAuth\OAuth2\Service\AbstractService::determineRequestUriFromPath + * @covers OAuth\OAuth2\Service\AbstractService::getAuthorizationMethod + * @covers OAuth\OAuth2\Service\AbstractService::parseAccessTokenResponse + * @covers OAuth\OAuth2\Service\AbstractService::service + * @covers OAuth\OAuth2\Service\AbstractService::getExtraApiHeaders + */ + public function testRequestQueryStringMethod() + { + $client = $this->getMock('\\OAuth\\Common\\Http\\Client\\ClientInterface'); + $client->expects($this->once())->method('retrieveResponse')->will($this->returnArgument(0)); + + $token = $this->getMock('\\OAuth\\OAuth2\\Token\\TokenInterface'); + $token->expects($this->once())->method('getEndOfLife')->will($this->returnValue(TokenInterface::EOL_NEVER_EXPIRES)); + $token->expects($this->once())->method('getAccessToken')->will($this->returnValue('foo')); + + $storage = $this->getMock('\\OAuth\\Common\\Storage\\TokenStorageInterface'); + $storage->expects($this->once())->method('retrieveAccessToken')->will($this->returnValue($token)); + + $service = new Mock( + $this->getMock('\\OAuth\\Common\\Consumer\\CredentialsInterface'), + $client, + $storage + ); + + $service->setAuthorizationMethod('querystring'); + + $uri = $service->request('https://pieterhordijk.com/my/awesome/path'); + $absoluteUri = parse_url($uri->getAbsoluteUri()); + + $this->assertSame('access_token=foo', $absoluteUri['query']); + } + + /** + * @covers OAuth\OAuth2\Service\AbstractService::__construct + * @covers OAuth\OAuth2\Service\AbstractService::request + * @covers OAuth\OAuth2\Service\AbstractService::determineRequestUriFromPath + * @covers OAuth\OAuth2\Service\AbstractService::getAuthorizationMethod + * @covers OAuth\OAuth2\Service\AbstractService::parseAccessTokenResponse + * @covers OAuth\OAuth2\Service\AbstractService::service + * @covers OAuth\OAuth2\Service\AbstractService::getExtraApiHeaders + */ + public function testRequestQueryStringTwoMethod() + { + $client = $this->getMock('\\OAuth\\Common\\Http\\Client\\ClientInterface'); + $client->expects($this->once())->method('retrieveResponse')->will($this->returnArgument(0)); + + $token = $this->getMock('\\OAuth\\OAuth2\\Token\\TokenInterface'); + $token->expects($this->once())->method('getEndOfLife')->will($this->returnValue(TokenInterface::EOL_NEVER_EXPIRES)); + $token->expects($this->once())->method('getAccessToken')->will($this->returnValue('foo')); + + $storage = $this->getMock('\\OAuth\\Common\\Storage\\TokenStorageInterface'); + $storage->expects($this->once())->method('retrieveAccessToken')->will($this->returnValue($token)); + + $service = new Mock( + $this->getMock('\\OAuth\\Common\\Consumer\\CredentialsInterface'), + $client, + $storage + ); + + $service->setAuthorizationMethod('querystring2'); + + $uri = $service->request('https://pieterhordijk.com/my/awesome/path'); + $absoluteUri = parse_url($uri->getAbsoluteUri()); + + $this->assertSame('oauth2_access_token=foo', $absoluteUri['query']); + } + + /** + * @covers OAuth\OAuth2\Service\AbstractService::__construct + * @covers OAuth\OAuth2\Service\AbstractService::request + * @covers OAuth\OAuth2\Service\AbstractService::determineRequestUriFromPath + * @covers OAuth\OAuth2\Service\AbstractService::getAuthorizationMethod + * @covers OAuth\OAuth2\Service\AbstractService::parseAccessTokenResponse + * @covers OAuth\OAuth2\Service\AbstractService::service + * @covers OAuth\OAuth2\Service\AbstractService::getExtraApiHeaders + */ + public function testRequestBearerMethod() + { + $client = $this->getMock('\\OAuth\\Common\\Http\\Client\\ClientInterface'); + $client->expects($this->once())->method('retrieveResponse')->will($this->returnArgument(2)); + + $token = $this->getMock('\\OAuth\\OAuth2\\Token\\TokenInterface'); + $token->expects($this->once())->method('getEndOfLife')->will($this->returnValue(TokenInterface::EOL_NEVER_EXPIRES)); + $token->expects($this->once())->method('getAccessToken')->will($this->returnValue('foo')); + + $storage = $this->getMock('\\OAuth\\Common\\Storage\\TokenStorageInterface'); + $storage->expects($this->once())->method('retrieveAccessToken')->will($this->returnValue($token)); + + $service = new Mock( + $this->getMock('\\OAuth\\Common\\Consumer\\CredentialsInterface'), + $client, + $storage + ); + + $service->setAuthorizationMethod('bearer'); + + $headers = $service->request('https://pieterhordijk.com/my/awesome/path'); + + $this->assertTrue(array_key_exists('Authorization', $headers)); + $this->assertTrue(in_array('Bearer foo', $headers, true)); + } + + /** + * @covers OAuth\OAuth2\Service\AbstractService::__construct + * @covers OAuth\OAuth2\Service\AbstractService::getStorage + */ + public function testGetStorage() + { + $service = new Mock( + $this->getMock('\\OAuth\\Common\\Consumer\\CredentialsInterface'), + $this->getMock('\\OAuth\\Common\\Http\\Client\\ClientInterface'), + $this->getMock('\\OAuth\\Common\\Storage\\TokenStorageInterface') + ); + + $this->assertInstanceOf('\\OAuth\\Common\\Storage\\TokenStorageInterface', $service->getStorage()); + } + + /** + * @covers OAuth\OAuth2\Service\AbstractService::__construct + * @covers OAuth\OAuth2\Service\AbstractService::refreshAccessToken + * @covers OAuth\OAuth2\Service\AbstractService::getAccessTokenEndpoint + * @covers OAuth\OAuth2\Service\AbstractService::getExtraOAuthHeaders + * @covers OAuth\OAuth2\Service\AbstractService::parseAccessTokenResponse + */ + public function testRefreshAccessTokenSuccess() + { + $service = new Mock( + $this->getMock('\\OAuth\\Common\\Consumer\\CredentialsInterface'), + $this->getMock('\\OAuth\\Common\\Http\\Client\\ClientInterface'), + $this->getMock('\\OAuth\\Common\\Storage\\TokenStorageInterface') + ); + + $token = $this->getMock('\\OAuth\\OAuth2\\Token\\StdOAuth2Token'); + $token->expects($this->once())->method('getRefreshToken')->will($this->returnValue('foo')); + + $this->assertInstanceOf('\\OAuth\\OAuth2\\Token\\StdOAuth2Token', $service->refreshAccessToken($token)); + } + + /** + * @covers OAuth\OAuth2\Service\AbstractService::__construct + * @covers OAuth\OAuth2\Service\AbstractService::isValidScope + */ + public function testIsValidScopeTrue() + { + $service = new Mock( + $this->getMock('\\OAuth\\Common\\Consumer\\CredentialsInterface'), + $this->getMock('\\OAuth\\Common\\Http\\Client\\ClientInterface'), + $this->getMock('\\OAuth\\Common\\Storage\\TokenStorageInterface') + ); + + $this->assertTrue($service->isValidScope('mock')); + } + + /** + * @covers OAuth\OAuth2\Service\AbstractService::__construct + * @covers OAuth\OAuth2\Service\AbstractService::isValidScope + */ + public function testIsValidScopeFalse() + { + $service = new Mock( + $this->getMock('\\OAuth\\Common\\Consumer\\CredentialsInterface'), + $this->getMock('\\OAuth\\Common\\Http\\Client\\ClientInterface'), + $this->getMock('\\OAuth\\Common\\Storage\\TokenStorageInterface') + ); + + $this->assertFalse($service->isValidScope('invalid')); + } +} |