221 lines
8.8 KiB
PHP
221 lines
8.8 KiB
PHP
<?php
|
|
|
|
namespace OAuthTest\Unit\OAuth2\Service;
|
|
|
|
use OAuth\OAuth2\Service\GitHub;
|
|
use OAuth\Common\Token\TokenInterface;
|
|
|
|
class GitHubTest extends \PHPUnit_Framework_TestCase
|
|
{
|
|
/**
|
|
* @covers OAuth\OAuth2\Service\GitHub::__construct
|
|
*/
|
|
public function testConstructCorrectInterfaceWithoutCustomUri()
|
|
{
|
|
$service = new GitHub(
|
|
$this->getMock('\\OAuth\\Common\\Consumer\\CredentialsInterface'),
|
|
$this->getMock('\\OAuth\\Common\\Http\\Client\\ClientInterface'),
|
|
$this->getMock('\\OAuth\\Common\\Storage\\TokenStorageInterface')
|
|
);
|
|
|
|
$this->assertInstanceOf('\\OAuth\\OAuth2\\Service\\ServiceInterface', $service);
|
|
}
|
|
|
|
/**
|
|
* @covers OAuth\OAuth2\Service\GitHub::__construct
|
|
*/
|
|
public function testConstructCorrectInstanceWithoutCustomUri()
|
|
{
|
|
$service = new GitHub(
|
|
$this->getMock('\\OAuth\\Common\\Consumer\\CredentialsInterface'),
|
|
$this->getMock('\\OAuth\\Common\\Http\\Client\\ClientInterface'),
|
|
$this->getMock('\\OAuth\\Common\\Storage\\TokenStorageInterface')
|
|
);
|
|
|
|
$this->assertInstanceOf('\\OAuth\\OAuth2\\Service\\AbstractService', $service);
|
|
}
|
|
|
|
/**
|
|
* @covers OAuth\OAuth2\Service\GitHub::__construct
|
|
*/
|
|
public function testConstructCorrectInstanceWithCustomUri()
|
|
{
|
|
$service = new GitHub(
|
|
$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\\OAuth2\\Service\\AbstractService', $service);
|
|
}
|
|
|
|
/**
|
|
* @covers OAuth\OAuth2\Service\GitHub::__construct
|
|
* @covers OAuth\OAuth2\Service\GitHub::getAuthorizationEndpoint
|
|
*/
|
|
public function testGetAuthorizationEndpoint()
|
|
{
|
|
$service = new GitHub(
|
|
$this->getMock('\\OAuth\\Common\\Consumer\\CredentialsInterface'),
|
|
$this->getMock('\\OAuth\\Common\\Http\\Client\\ClientInterface'),
|
|
$this->getMock('\\OAuth\\Common\\Storage\\TokenStorageInterface')
|
|
);
|
|
|
|
$this->assertSame('https://github.com/login/oauth/authorize', $service->getAuthorizationEndpoint()->getAbsoluteUri());
|
|
}
|
|
|
|
/**
|
|
* @covers OAuth\OAuth2\Service\GitHub::__construct
|
|
* @covers OAuth\OAuth2\Service\GitHub::getAccessTokenEndpoint
|
|
*/
|
|
public function testGetAccessTokenEndpoint()
|
|
{
|
|
$service = new GitHub(
|
|
$this->getMock('\\OAuth\\Common\\Consumer\\CredentialsInterface'),
|
|
$this->getMock('\\OAuth\\Common\\Http\\Client\\ClientInterface'),
|
|
$this->getMock('\\OAuth\\Common\\Storage\\TokenStorageInterface')
|
|
);
|
|
|
|
$this->assertSame('https://github.com/login/oauth/access_token', $service->getAccessTokenEndpoint()->getAbsoluteUri());
|
|
}
|
|
|
|
/**
|
|
* @covers OAuth\OAuth2\Service\GitHub::__construct
|
|
* @covers OAuth\OAuth2\Service\GitHub::getAuthorizationMethod
|
|
*/
|
|
public function testGetAuthorizationMethod()
|
|
{
|
|
$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 GitHub(
|
|
$this->getMock('\\OAuth\\Common\\Consumer\\CredentialsInterface'),
|
|
$client,
|
|
$storage
|
|
);
|
|
|
|
$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\GitHub::__construct
|
|
* @covers OAuth\OAuth2\Service\GitHub::parseAccessTokenResponse
|
|
*/
|
|
public function testParseAccessTokenResponseThrowsExceptionOnNulledResponse()
|
|
{
|
|
$client = $this->getMock('\\OAuth\\Common\\Http\\Client\\ClientInterface');
|
|
$client->expects($this->once())->method('retrieveResponse')->will($this->returnValue(null));
|
|
|
|
$service = new GitHub(
|
|
$this->getMock('\\OAuth\\Common\\Consumer\\CredentialsInterface'),
|
|
$client,
|
|
$this->getMock('\\OAuth\\Common\\Storage\\TokenStorageInterface')
|
|
);
|
|
|
|
$this->setExpectedException('\\OAuth\\Common\\Http\\Exception\\TokenResponseException');
|
|
|
|
$service->requestAccessToken('foo');
|
|
}
|
|
|
|
/**
|
|
* @covers OAuth\OAuth2\Service\GitHub::__construct
|
|
* @covers OAuth\OAuth2\Service\GitHub::parseAccessTokenResponse
|
|
*/
|
|
public function testParseAccessTokenResponseThrowsExceptionOnError()
|
|
{
|
|
$client = $this->getMock('\\OAuth\\Common\\Http\\Client\\ClientInterface');
|
|
$client->expects($this->once())->method('retrieveResponse')->will($this->returnValue('{"error":"some_error"}'));
|
|
|
|
$service = new GitHub(
|
|
$this->getMock('\\OAuth\\Common\\Consumer\\CredentialsInterface'),
|
|
$client,
|
|
$this->getMock('\\OAuth\\Common\\Storage\\TokenStorageInterface')
|
|
);
|
|
|
|
$this->setExpectedException('\\OAuth\\Common\\Http\\Exception\\TokenResponseException');
|
|
|
|
$service->requestAccessToken('foo');
|
|
}
|
|
|
|
/**
|
|
* @covers OAuth\OAuth2\Service\GitHub::__construct
|
|
* @covers OAuth\OAuth2\Service\GitHub::parseAccessTokenResponse
|
|
*/
|
|
public function testParseAccessTokenResponseValidWithoutRefreshToken()
|
|
{
|
|
$client = $this->getMock('\\OAuth\\Common\\Http\\Client\\ClientInterface');
|
|
$client->expects($this->once())->method('retrieveResponse')->will($this->returnValue('{"access_token":"foo","expires_in":"bar"}'));
|
|
|
|
$service = new GitHub(
|
|
$this->getMock('\\OAuth\\Common\\Consumer\\CredentialsInterface'),
|
|
$client,
|
|
$this->getMock('\\OAuth\\Common\\Storage\\TokenStorageInterface')
|
|
);
|
|
|
|
$this->assertInstanceOf('\\OAuth\\OAuth2\\Token\\StdOAuth2Token', $service->requestAccessToken('foo'));
|
|
}
|
|
|
|
/**
|
|
* @covers OAuth\OAuth2\Service\GitHub::__construct
|
|
* @covers OAuth\OAuth2\Service\GitHub::getExtraOAuthHeaders
|
|
*/
|
|
public function testGetExtraOAuthHeaders()
|
|
{
|
|
$client = $this->getMock('\\OAuth\\Common\\Http\\Client\\ClientInterface');
|
|
$client->expects($this->once())->method('retrieveResponse')->will($this->returnCallback(function($uri, $params, $extraHeaders) {
|
|
\PHPUnit_Framework_Assert::assertTrue(array_key_exists('Accept', $extraHeaders));
|
|
\PHPUnit_Framework_Assert::assertTrue(in_array('application/json', $extraHeaders, true));
|
|
|
|
return '{"access_token":"foo","expires_in":"bar"}';
|
|
}));
|
|
|
|
$service = new GitHub(
|
|
$this->getMock('\\OAuth\\Common\\Consumer\\CredentialsInterface'),
|
|
$client,
|
|
$this->getMock('\\OAuth\\Common\\Storage\\TokenStorageInterface')
|
|
);
|
|
|
|
$this->assertInstanceOf('\\OAuth\\OAuth2\\Token\\StdOAuth2Token', $service->requestAccessToken('foo'));
|
|
}
|
|
|
|
/**
|
|
* @covers OAuth\OAuth2\Service\GitHub::__construct
|
|
* @covers OAuth\OAuth2\Service\GitHub::getExtraApiHeaders
|
|
*/
|
|
public function testGetExtraApiHeaders()
|
|
{
|
|
$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 GitHub(
|
|
$this->getMock('\\OAuth\\Common\\Consumer\\CredentialsInterface'),
|
|
$client,
|
|
$storage
|
|
);
|
|
|
|
$headers = $service->request('https://pieterhordijk.com/my/awesome/path');
|
|
|
|
$this->assertTrue(array_key_exists('Accept', $headers));
|
|
$this->assertSame('application/vnd.github.beta+json', $headers['Accept']);
|
|
}
|
|
}
|