Adds methods that fetch a Github user's email addresses.

oauth1test
jeremykendall 2014-12-23 14:37:03 -06:00
parent 0d25e02de7
commit 8c0ae57065
2 changed files with 46 additions and 0 deletions

View File

@ -28,6 +28,11 @@ class Github extends AbstractProvider
return $this->domain.'/api/v3/user?access_token='.$token;
}
public function urlUserEmails(\League\OAuth2\Client\Token\AccessToken $token)
{
return 'https://api.github.com/user/emails?access_token='.$token;
}
public function userDetails($response, \League\OAuth2\Client\Token\AccessToken $token)
{
$user = new User();
@ -53,13 +58,32 @@ class Github extends AbstractProvider
return $response->id;
}
public function getUserEmails(\League\OAuth2\Client\Token\AccessToken $token)
{
$response = $this->fetchUserEmails($token);
return $this->userEmails(json_decode($response), $token);
}
public function userEmail($response, \League\OAuth2\Client\Token\AccessToken $token)
{
return isset($response->email) && $response->email ? $response->email : null;
}
public function userEmails($response, \League\OAuth2\Client\Token\AccessToken $token)
{
return $response;
}
public function userScreenName($response, \League\OAuth2\Client\Token\AccessToken $token)
{
return $response->name;
}
protected function fetchUserEmails(\League\OAuth2\Client\Token\AccessToken $token)
{
$url = $this->urlUserEmails($token);
return $this->fetchProviderData($url);
}
}

View File

@ -132,4 +132,26 @@ class GithubTest extends \PHPUnit_Framework_TestCase
$this->assertEquals($this->provider->domain.'/login/oauth/access_token', $this->provider->urlAccessToken());
$this->assertEquals($this->provider->domain.'/api/v3/user?access_token=mock_access_token', $this->provider->urlUserDetails($token));
}
public function testUserEmails()
{
$postResponse = m::mock('Guzzle\Http\Message\Response');
$postResponse->shouldReceive('getBody')->times(1)->andReturn('access_token=mock_access_token&expires=3600&refresh_token=mock_refresh_token&uid=1');
$getResponse = m::mock('Guzzle\Http\Message\Response');
$getResponse->shouldReceive('getBody')->times(1)->andReturn('[{"email":"mock_email_1","primary":false,"verified":true},{"email":"mock_email_2","primary":false,"verified":true},{"email":"mock_email_3","primary":true,"verified":true}]');
$client = m::mock('Guzzle\Service\Client');
$client->shouldReceive('setBaseUrl')->times(2);
$client->shouldReceive('post->send')->times(1)->andReturn($postResponse);
$client->shouldReceive('get->send')->times(1)->andReturn($getResponse);
$this->provider->setHttpClient($client);
$token = $this->provider->getAccessToken('authorization_code', ['code' => 'mock_authorization_code']);
$emails = $this->provider->getUserEmails($token);
$this->assertInternalType('array', $emails);
$this->assertCount(3, $emails);
$this->assertEquals('mock_email_3', $emails[2]->email);
$this->assertTrue($emails[2]->primary);
}
}