100% code coverage

1.0
Tom Anderson 2014-04-25 12:53:08 -07:00
parent 1a190e760f
commit 375d01c0b8
10 changed files with 130 additions and 25 deletions

View File

@ -48,6 +48,6 @@ class Eventbrite extends IdentityProvider
public function userScreenName($response, \League\OAuth2\Client\Token\AccessToken $token)
{
return array($response->first_name, $response->last_name);
return $response->user->user_id;
}
}

View File

@ -111,7 +111,7 @@ abstract class IdentityProvider
}
$grant = new $grant;
} elseif (! $grant instanceof GrantInterface) {
throw new \InvalidArgumentException($grant.' is not an instance of League\OAuth2\Client\Grant\GrantInterface');
throw new \InvalidArgumentException(get_class($grant) . ' is not an instance of League\OAuth2\Client\Grant\GrantInterface');
}
$defaultParams = array(
@ -126,21 +126,30 @@ abstract class IdentityProvider
try {
switch (strtoupper($this->method)) {
case 'GET':
// @codeCoverageIgnoreStart
// No providers included with this library use get but 3rd parties may
$client = $this->getHttpClient();
$client->setBaseUrl($this->urlAccessToken() . '?' . $this->httpBuildQuery($requestParams, '', '&', PHP_QUERY_RFC1738));
$request = $client->send();
$response = $request->getBody();
break;
// @codeCoverageIgnoreEnd
case 'POST':
$client = $this->getHttpClient();
$client->setBaseUrl($this->urlAccessToken());
$request = $client->post(null, null, $requestParams)->send();
$response = $request->getBody();
break;
// @codeCoverageIgnoreStart
default:
throw new \InvalidArgumentException('Neither GET nor POST is specified for request');
// @codeCoverageIgnoreEnd
}
} catch (BadResponseException $e) {
// @codeCoverageIgnoreStart
$raw_response = explode("\n", $e->getResponse());
$response = end($raw_response);
// @codeCoverageIgnoreEnd
}
switch ($this->responseType) {
@ -153,36 +162,38 @@ abstract class IdentityProvider
}
if (isset($result['error']) && ! empty($result['error'])) {
// @codeCoverageIgnoreStart
throw new IDPException($result);
// @codeCoverageIgnoreEnd
}
return $grant->handleResponse($result);
}
public function getUserDetails(AccessToken $token, $force = false)
public function getUserDetails(AccessToken $token)
{
$response = $this->fetchUserDetails($token);
return $this->userDetails(json_decode($response), $token);
}
public function getUserUid(AccessToken $token, $force = false)
public function getUserUid(AccessToken $token)
{
$response = $this->fetchUserDetails($token, $force);
$response = $this->fetchUserDetails($token, true);
return $this->userUid(json_decode($response), $token);
}
public function getUserEmail(AccessToken $token, $force = false)
public function getUserEmail(AccessToken $token)
{
$response = $this->fetchUserDetails($token, $force);
$response = $this->fetchUserDetails($token, true);
return $this->userEmail(json_decode($response), $token);
}
public function getUserScreenName(AccessToken $token, $force = false)
public function getUserScreenName(AccessToken $token)
{
$response = $this->fetchUserDetails($token, $force);
$response = $this->fetchUserDetails($token, true);
return $this->userScreenName(json_decode($response), $token);
}
@ -195,6 +206,7 @@ abstract class IdentityProvider
* @param string $arg_separator
* @param null|integer $enc_type
* @return string
* @codeCoverageIgnoreStart
*/
protected function httpBuildQuery($params, $numeric_prefix = 0, $arg_separator = '&', $enc_type = null)
{
@ -210,7 +222,7 @@ abstract class IdentityProvider
return $url;
}
protected function fetchUserDetails(AccessToken $token, $force = false)
protected function fetchUserDetails(AccessToken $token)
{
$url = $this->urlUserDetails($token);

View File

@ -15,13 +15,15 @@ class User
protected $imageUrl;
protected $urls;
public function __get($property) {
public function __get($property)
{
if (property_exists($this, $property)) {
return $this->$property;
}
}
public function __set($property, $value) {
public function __set($property, $value)
{
if (property_exists($this, $property)) {
$this->$property = $value;
}

View File

@ -69,15 +69,4 @@ class AccessToken
{
return (string) $this->accessToken;
}
/**
* Return a boolean if the property is set
*
* @param string variable name
* @return bool
*/
public function __isset($key)
{
return isset($this->$key);
}
}

View File

@ -0,0 +1,46 @@
<?php
namespace LeagueTest\OAuth2\Client\Grant;
use \Mockery as m;
class AuthorizationCodeTest extends \PHPUnit_Framework_TestCase
{
protected $provider;
protected function setUp()
{
$this->provider = new \League\OAuth2\Client\Provider\Google(array(
'clientId' => 'mock_client_id',
'clientSecret' => 'mock_secret',
'redirectUri' => 'none',
));
}
protected function tearDown()
{
# m::close();
}
public function testGetAccessToken()
{
$grant = new \League\OAuth2\Client\Grant\AuthorizationCode();
$this->assertEquals('authorization_code', (string) $grant);
}
/**
* @expectedException BadMethodCallException
*/
public function testInvalidRefreshToken()
{
$response = m::mock('Guzzle\Http\Message\Response');
$response->shouldReceive('getBody')->times(2)->andReturn('{"access_token": "mock_access_token", "expires": 3600, "refresh_token": "mock_refresh_token", "uid": 1}');
$client = m::mock('Guzzle\Service\Client');
$client->shouldReceive('setBaseUrl')->times(1);
$client->shouldReceive('post->send')->times(1)->andReturn($response);
$this->provider->setHttpClient($client);
$token = $this->provider->getAccessToken('authorization_code', array('invalid_code' => 'mock_authorization_code'));
}
}

View File

@ -1,6 +1,6 @@
<?php
namespace LeagueTest\OAuth2\Client\Provider;
namespace LeagueTest\OAuth2\Client\Grant;
use \Mockery as m;
@ -36,7 +36,7 @@ class RefreshTokenTest extends \PHPUnit_Framework_TestCase
$grant = new \League\OAuth2\Client\Grant\RefreshToken();
$refreshToken = $this->provider->getAccessToken($grant, array('refresh_token' => $token->refreshToken));
$this->assertEquals('refresh_token', (string)$grant);
$this->assertEquals('refresh_token', (string) $grant);
}
/**

View File

@ -90,6 +90,7 @@ class EventbriteTest extends \PHPUnit_Framework_TestCase
$this->assertEquals(12345, $this->provider->getUserUid($token));
$this->assertEquals('mock_email', $this->provider->getUserEmail($token));
$this->assertEquals(12345, $this->provider->getUserScreenName($token));
$this->assertEquals('mock_email', $user->email);
}
}

View File

@ -0,0 +1,41 @@
<?php
namespace LeagueTest\OAuth2\Client\Provider;
use \Mockery as m;
class IdentityProviderTest extends \PHPUnit_Framework_TestCase
{
protected $provider;
protected function setUp()
{
$this->provider = new \League\OAuth2\Client\Provider\Google(array(
'clientId' => 'mock_client_id',
'clientSecret' => 'mock_secret',
'redirectUri' => 'none',
));
}
protected function tearDown()
{
# m::close();
}
/**
* @expectedException InvalidArgumentException
*/
public function testInvalidGrantString()
{
$test = $this->provider->getAccessToken('invalid_grant', array('invalid_parameter' => 'none'));
}
/**
* @expectedException InvalidArgumentException
*/
public function testInvalidGrantObject()
{
$grant = new \StdClass;
$test = $this->provider->getAccessToken($grant, array('invalid_parameter' => 'none'));
}
}

View File

@ -0,0 +1,14 @@
<?php
namespace LeagueTest\OAuth2\Client\Token;
class AccessTokenTest extends \PHPUnit_Framework_TestCase
{
/**
* @expectedException InvalidArgumentException
*/
public function testInvalidRefreshToken()
{
$test = new \League\OAuth2\Client\Token\AccessToken(array('invalid_access_token' => 'none'));
}
}