OAuthOneTest.php 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. <?php
  2. namespace Laravel\Socialite\Tests;
  3. use Illuminate\Contracts\Session\Session;
  4. use Illuminate\Http\RedirectResponse;
  5. use Illuminate\Http\Request;
  6. use Laravel\Socialite\One\MissingTemporaryCredentialsException;
  7. use Laravel\Socialite\One\MissingVerifierException;
  8. use Laravel\Socialite\One\User as SocialiteUser;
  9. use Laravel\Socialite\Tests\Fixtures\OAuthOneTestProviderStub;
  10. use League\OAuth1\Client\Credentials\TemporaryCredentials;
  11. use League\OAuth1\Client\Credentials\TokenCredentials;
  12. use League\OAuth1\Client\Server\Twitter;
  13. use League\OAuth1\Client\Server\User;
  14. use Mockery as m;
  15. use PHPUnit\Framework\TestCase;
  16. use Symfony\Component\HttpFoundation\RedirectResponse as SymfonyRedirectResponse;
  17. class OAuthOneTest extends TestCase
  18. {
  19. protected function tearDown(): void
  20. {
  21. parent::tearDown();
  22. m::close();
  23. }
  24. public function testRedirectGeneratesTheProperIlluminateRedirectResponse()
  25. {
  26. $server = m::mock(Twitter::class);
  27. $temp = m::mock(TemporaryCredentials::class);
  28. $server->expects('getTemporaryCredentials')->andReturns($temp);
  29. $server->expects('getAuthorizationUrl')->with($temp)->andReturns('http://auth.url');
  30. $request = Request::create('foo');
  31. $request->setLaravelSession($session = m::mock(Session::class));
  32. $session->expects('put')->with('oauth.temp', $temp);
  33. $provider = new OAuthOneTestProviderStub($request, $server);
  34. $response = $provider->redirect();
  35. $this->assertInstanceOf(SymfonyRedirectResponse::class, $response);
  36. $this->assertInstanceOf(RedirectResponse::class, $response);
  37. }
  38. public function testUserReturnsAUserInstanceForTheAuthenticatedRequest()
  39. {
  40. $server = m::mock(Twitter::class);
  41. $temp = m::mock(TemporaryCredentials::class);
  42. $server->expects('getTokenCredentials')->with($temp, 'oauth_token', 'oauth_verifier')->andReturns(
  43. $token = m::mock(TokenCredentials::class)
  44. );
  45. $server->expects('getUserDetails')->with($token, false)->andReturns($user = m::mock(User::class));
  46. $token->expects('getIdentifier')->twice()->andReturns('identifier');
  47. $token->expects('getSecret')->twice()->andReturns('secret');
  48. $user->uid = 'uid';
  49. $user->email = 'foo@bar.com';
  50. $user->extra = ['extra' => 'extra'];
  51. $request = Request::create('foo', 'GET', ['oauth_token' => 'oauth_token', 'oauth_verifier' => 'oauth_verifier']);
  52. $request->setLaravelSession($session = m::mock(Session::class));
  53. $session->expects('get')->with('oauth.temp')->andReturns($temp);
  54. $provider = new OAuthOneTestProviderStub($request, $server);
  55. $user = $provider->user();
  56. $this->assertInstanceOf(SocialiteUser::class, $user);
  57. $this->assertSame('uid', $user->id);
  58. $this->assertSame('foo@bar.com', $user->email);
  59. $this->assertSame(['extra' => 'extra'], $user->user);
  60. }
  61. public function testExceptionIsThrownWhenVerifierIsMissing()
  62. {
  63. $this->expectException(MissingVerifierException::class);
  64. $server = m::mock(Twitter::class);
  65. $request = Request::create('foo');
  66. $request->setLaravelSession(m::mock(Session::class));
  67. $provider = new OAuthOneTestProviderStub($request, $server);
  68. $provider->user();
  69. }
  70. public function testExceptionIsThrownWhenTemporaryCredentialsAreMissing()
  71. {
  72. $this->expectException(MissingTemporaryCredentialsException::class);
  73. $server = m::mock(Twitter::class);
  74. $request = Request::create('foo', 'GET', ['oauth_token' => 'oauth_token', 'oauth_verifier' => 'oauth_verifier']);
  75. $request->setLaravelSession($session = m::mock(Session::class));
  76. $session->expects('get')->with('oauth.temp')->andReturns(null);
  77. $provider = new OAuthOneTestProviderStub($request, $server);
  78. $provider->user();
  79. }
  80. }