From 85d88a449eaf253b64a3803474cbe67e8c68b577 Mon Sep 17 00:00:00 2001 From: Brooke Bryan Date: Wed, 3 Dec 2014 18:10:25 +0000 Subject: [PATCH] Provide base methods for userUid, userEmail and userScreenName + Tests --- src/Provider/AbstractProvider.php | 30 ++++++++++-- test/src/Provider/AbstractProviderTest.php | 57 +++++++++++++++++++++- 2 files changed, 81 insertions(+), 6 deletions(-) diff --git a/src/Provider/AbstractProvider.php b/src/Provider/AbstractProvider.php index 602691a..327c6b8 100644 --- a/src/Provider/AbstractProvider.php +++ b/src/Provider/AbstractProvider.php @@ -33,6 +33,9 @@ abstract class AbstractProvider implements ProviderInterface public $headers = null; + /** + * @var GuzzleClient + */ protected $httpClient; protected $redirectHandler; @@ -93,7 +96,7 @@ abstract class AbstractProvider implements ProviderInterface * @param AccessToken $token * @return string */ - abstract public function urlUserDetails(\League\OAuth2\Client\Token\AccessToken $token); + abstract public function urlUserDetails(AccessToken $token); /** * Given an object response from the server, process the user details into a format expected by the user @@ -103,7 +106,7 @@ abstract class AbstractProvider implements ProviderInterface * @param AccessToken $token * @return mixed */ - abstract public function userDetails($response, \League\OAuth2\Client\Token\AccessToken $token); + abstract public function userDetails($response, AccessToken $token); public function getScopes() { @@ -131,7 +134,8 @@ abstract class AbstractProvider implements ProviderInterface return $this->urlAuthorize().'?'.$this->httpBuildQuery($params, '', '&'); } - public function authorize($options = []) + // @codeCoverageIgnoreStart + public function authorize($options = array()) { $url = $this->getAuthorizationUrl($options); if ($this->redirectHandler) { @@ -174,8 +178,8 @@ abstract class AbstractProvider implements ProviderInterface // @codeCoverageIgnoreStart // No providers included with this library use get but 3rd parties may $client = $this->getHttpClient(); - $client->setBaseUrl($this->urlAccessToken().'?'.$this->httpBuildQuery($requestParams, '', '&')); - $request = $client->send(); + $client->setBaseUrl($this->urlAccessToken() . '?' . $this->httpBuildQuery($requestParams, '', '&')); + $request = $client->get(null, null, $requestParams)->send(); $response = $request->getBody(); break; // @codeCoverageIgnoreEnd @@ -263,6 +267,21 @@ abstract class AbstractProvider implements ProviderInterface return $this->userScreenName(json_decode($response), $token); } + public function userUid($response, AccessToken $token) + { + return isset($response->id) && $response->id ? $response->id : null; + } + + public function userEmail($response, AccessToken $token) + { + return isset($response->email) && $response->email ? $response->email : null; + } + + public function userScreenName($response, AccessToken $token) + { + return isset($response->name) && $response->name ? $response->name : null; + } + /** * Build HTTP the HTTP query, handling PHP version control options * @@ -270,6 +289,7 @@ abstract class AbstractProvider implements ProviderInterface * @param integer $numeric_prefix * @param string $arg_separator * @param null|integer $enc_type + * * @return string * @codeCoverageIgnoreStart */ diff --git a/test/src/Provider/AbstractProviderTest.php b/test/src/Provider/AbstractProviderTest.php index 06bb031..c19f4c3 100644 --- a/test/src/Provider/AbstractProviderTest.php +++ b/test/src/Provider/AbstractProviderTest.php @@ -2,10 +2,15 @@ namespace League\OAuth2\Client\Test\Provider; -use Mockery as m; +use League\OAuth2\Client\Provider\AbstractProvider; +use League\OAuth2\Client\Token\AccessToken; +use \Mockery as m; class AbstractProviderTest extends \PHPUnit_Framework_TestCase { + /** + * @var AbstractProvider + */ protected $provider; protected function setUp() @@ -87,6 +92,56 @@ class AbstractProviderTest extends \PHPUnit_Framework_TestCase $this->assertNotFalse($this->testFunction); } + + /** + * @param $response + * + * @dataProvider userPropertyProvider + */ + public function testGetUserProperties($response, $name = null, $email = null, $id = null) + { + $token = new AccessToken(['access_token' => 'abc', 'expires_in' => 3600]); + + $provider = $this->getMockForAbstractClass( + '\League\OAuth2\Client\Provider\AbstractProvider', + [ + [ + 'clientId' => 'mock_client_id', + 'clientSecret' => 'mock_secret', + 'redirectUri' => 'none', + ] + ] + ); + + /** + * @var $provider AbstractProvider + */ + + $this->assertEquals($name, $provider->userScreenName($response, $token)); + $this->assertEquals($email, $provider->userEmail($response, $token)); + $this->assertEquals($id, $provider->userUid($response, $token)); + } + + public function userPropertyProvider() + { + $response = new \stdClass(); + $response->id = 1; + $response->email = 'test@example.com'; + $response->name = 'test'; + + $response2 = new \stdClass(); + $response2->id = null; + $response2->email = null; + $response2->name = null; + + $response3 = new \stdClass(); + + return [ + [$response, 'test', 'test@example.com', 1], + [$response2], + [$response3], + ]; + } } class MockProvider extends \League\OAuth2\Client\Provider\AbstractProvider