Guest User

Untitled

a guest
Dec 5th, 2018
150
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.97 KB | None | 0 0
  1. <?php
  2.  
  3. namespace Tests\Feature;
  4.  
  5. use App\User;
  6. use Tests\TestCase;
  7. use Illuminate\Foundation\Testing\WithFaker;
  8. use Illuminate\Foundation\Testing\RefreshDatabase;
  9. use Illuminate\Support\Facades\Auth;
  10. use Illuminate\Support\Facades\Hash;
  11.  
  12.  
  13. class LoginTest extends TestCase
  14. {
  15. use RefreshDatabase;
  16.  
  17. protected function successfulLoginRoute()
  18. {
  19. return route('home');
  20. }
  21. protected function loginGetRoute()
  22. {
  23. return route('login');
  24. }
  25. protected function loginPostRoute()
  26. {
  27. return route('login');
  28. }
  29. protected function logoutRoute()
  30. {
  31. return route('logout');
  32. }
  33. protected function successfulLogoutRoute()
  34. {
  35. return '/';
  36. }
  37. protected function guestMiddlewareRoute()
  38. {
  39. return route('home');
  40. }
  41. public function testUserCanViewALoginForm()
  42. {
  43. $response = $this->get($this->loginGetRoute());
  44. $response->assertSuccessful();
  45. $response->assertViewIs('auth.login');
  46. }
  47. public function testUserCannotViewALoginFormWhenAuthenticated()
  48. {
  49. $user = factory(User::class)->make();
  50. $response = $this->actingAs($user)->get($this->loginGetRoute());
  51. $response->assertRedirect($this->guestMiddlewareRoute());
  52. }
  53. public function testUserCanLoginWithCorrectCredentials()
  54. {
  55. $user = factory(User::class)->create([
  56. 'password' => Hash::make($password = 'i-love-laravel'),
  57. ]);
  58. $response = $this->post('/login', [
  59. 'email' => $user->email,
  60. 'password' => $password,
  61. ]);
  62. $response->assertRedirect($this->successfulLoginRoute());
  63. $this->assertAuthenticatedAs($user);
  64. }
  65. public function testRememberMeFunctionality()
  66. {
  67. $user = factory(User::class)->create([
  68. 'id' => random_int(1, 100),
  69. 'password' => Hash::make($password = 'i-love-laravel'),
  70. ]);
  71. $response = $this->post($this->loginPostRoute(), [
  72. 'email' => $user->email,
  73. 'password' => $password,
  74. 'remember' => 'on',
  75. ]);
  76. $response->assertRedirect($this->successfulLoginRoute());
  77. $response->assertCookie(Auth::guard()->getRecallerName(), vsprintf('%s|%s|%s', [
  78. $user->id,
  79. $user->getRememberToken(),
  80. $user->password,
  81. ]));
  82. $this->assertAuthenticatedAs($user);
  83. }
  84. public function testUserCannotLoginWithIncorrectPassword()
  85. {
  86. $user = factory(User::class)->create([
  87. 'password' => bcrypt('i-love-laravel'),
  88. ]);
  89. $response = $this->from($this->loginGetRoute())->post($this->loginPostRoute(), [
  90. 'email' => $user->email,
  91. 'password' => 'invalid-password',
  92. ]);
  93. $response->assertRedirect($this->loginGetRoute());
  94. $response->assertSessionHasErrors('email');
  95. $this->assertTrue(session()->hasOldInput('email'));
  96. $this->assertFalse(session()->hasOldInput('password'));
  97. $this->assertGuest();
  98. }
  99. public function testUserCannotLoginWithEmailThatDoesNotExist()
  100. {
  101. $response = $this->from($this->loginGetRoute())->post($this->loginPostRoute(), [
  102. 'email' => 'nobody@example.com',
  103. 'password' => 'invalid-password',
  104. ]);
  105. $response->assertRedirect($this->loginGetRoute());
  106. $response->assertSessionHasErrors('email');
  107. $this->assertTrue(session()->hasOldInput('email'));
  108. $this->assertFalse(session()->hasOldInput('password'));
  109. $this->assertGuest();
  110. }
  111. public function testUserCanLogout()
  112. {
  113. $this->be(factory(User::class)->create());
  114. $response = $this->post($this->logoutRoute());
  115. $response->assertRedirect($this->successfulLogoutRoute());
  116. $this->assertGuest();
  117. }
  118. public function testUserCannotLogoutWhenNotAuthenticated()
  119. {
  120. $response = $this->post($this->logoutRoute());
  121. $response->assertRedirect($this->successfulLogoutRoute());
  122. $this->assertGuest();
  123. }
  124. public function testUserCannotMakeMoreThanFiveAttemptsInOneMinute()
  125. {
  126. $user = factory(User::class)->create([
  127. 'password' => Hash::make($password = 'i-love-laravel'),
  128. ]);
  129. foreach (range(0, 5) as $_) {
  130. $response = $this->from($this->loginGetRoute())->post($this->loginPostRoute(), [
  131. 'email' => $user->email,
  132. 'password' => 'invalid-password',
  133. ]);
  134. }
  135. $response->assertRedirect($this->loginGetRoute());
  136. $response->assertSessionHasErrors('email');
  137. $this->assertContains(
  138. 'Too many login attempts.',
  139. collect($response
  140. ->baseResponse
  141. ->getSession()
  142. ->get('errors')
  143. ->getBag('default')
  144. ->get('email')
  145. )->first()
  146. );
  147. $this->assertTrue(session()->hasOldInput('email'));
  148. $this->assertFalse(session()->hasOldInput('password'));
  149. $this->assertGuest();
  150. }
  151. }
Add Comment
Please, Sign In to add comment