FoundationAuthenticationTest.php 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. <?php
  2. namespace Illuminate\Tests\Foundation;
  3. use Illuminate\Auth\AuthManager;
  4. use Illuminate\Contracts\Auth\Authenticatable;
  5. use Illuminate\Contracts\Auth\Guard;
  6. use Illuminate\Contracts\Auth\UserProvider;
  7. use Illuminate\Foundation\Application;
  8. use Illuminate\Foundation\Testing\Concerns\InteractsWithAuthentication;
  9. use Mockery as m;
  10. use PHPUnit\Framework\TestCase;
  11. class FoundationAuthenticationTest extends TestCase
  12. {
  13. use InteractsWithAuthentication;
  14. /**
  15. * @var \Mockery
  16. */
  17. protected $app;
  18. /**
  19. * @return array
  20. */
  21. protected $credentials = [
  22. 'email' => 'someone@laravel.com',
  23. 'password' => 'secret_password',
  24. ];
  25. /**
  26. * @return \Illuminate\Contracts\Auth\Guard|\Mockery\LegacyMockInterface|\Mockery\MockInterface
  27. */
  28. protected function mockGuard()
  29. {
  30. $guard = m::mock(Guard::class);
  31. $auth = m::mock(AuthManager::class);
  32. $auth->shouldReceive('guard')
  33. ->once()
  34. ->andReturn($guard);
  35. $this->app = m::mock(Application::class);
  36. $this->app->shouldReceive('make')
  37. ->once()
  38. ->withArgs(['auth'])
  39. ->andReturn($auth);
  40. return $guard;
  41. }
  42. protected function tearDown(): void
  43. {
  44. m::close();
  45. }
  46. public function testAssertAuthenticated()
  47. {
  48. $this->mockGuard()
  49. ->shouldReceive('check')
  50. ->once()
  51. ->andReturn(true);
  52. $this->assertAuthenticated();
  53. }
  54. public function testAssertGuest()
  55. {
  56. $this->mockGuard()
  57. ->shouldReceive('check')
  58. ->once()
  59. ->andReturn(false);
  60. $this->assertGuest();
  61. }
  62. public function testAssertAuthenticatedAs()
  63. {
  64. $expected = m::mock(Authenticatable::class);
  65. $expected->shouldReceive('getAuthIdentifier')
  66. ->andReturn('1');
  67. $this->mockGuard()
  68. ->shouldReceive('user')
  69. ->once()
  70. ->andReturn($expected);
  71. $user = m::mock(Authenticatable::class);
  72. $user->shouldReceive('getAuthIdentifier')
  73. ->andReturn('1');
  74. $this->assertAuthenticatedAs($user);
  75. }
  76. protected function setupProvider(array $credentials)
  77. {
  78. $user = m::mock(Authenticatable::class);
  79. $provider = m::mock(UserProvider::class);
  80. $provider->shouldReceive('retrieveByCredentials')
  81. ->with($credentials)
  82. ->andReturn($user);
  83. $provider->shouldReceive('validateCredentials')
  84. ->with($user, $credentials)
  85. ->andReturn($this->credentials === $credentials);
  86. $this->mockGuard()
  87. ->shouldReceive('getProvider')
  88. ->once()
  89. ->andReturn($provider);
  90. }
  91. public function testAssertCredentials()
  92. {
  93. $this->setupProvider($this->credentials);
  94. $this->assertCredentials($this->credentials);
  95. }
  96. public function testAssertCredentialsMissing()
  97. {
  98. $credentials = [
  99. 'email' => 'invalid',
  100. 'password' => 'credentials',
  101. ];
  102. $this->setupProvider($credentials);
  103. $this->assertInvalidCredentials($credentials);
  104. }
  105. }