PasswordControllerTest.php 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. <?php
  2. namespace Tests\Feature\Http\Auth;
  3. use App\Http\Controllers\Auth\PasswordController;
  4. use App\Models\User;
  5. use Illuminate\Support\Facades\Config;
  6. use PHPUnit\Framework\Attributes\CoversClass;
  7. use PHPUnit\Framework\Attributes\Test;
  8. use Tests\FeatureTestCase;
  9. /**
  10. * PasswordControllerTest test class
  11. */
  12. #[CoversClass(PasswordController::class)]
  13. class PasswordControllerTest extends FeatureTestCase
  14. {
  15. /**
  16. * @var \App\Models\User|\Illuminate\Contracts\Auth\Authenticatable
  17. */
  18. protected $user;
  19. private const PASSWORD = 'password';
  20. private const NEW_PASSWORD = 'newPassword';
  21. private const USER_NAME = 'John';
  22. private const USER_EMAIL = 'john@example.com';
  23. private const REVERSE_PROXY_GUARD = 'reverse-proxy-guard';
  24. public function setUp() : void
  25. {
  26. parent::setUp();
  27. $this->user = User::factory()->create();
  28. }
  29. #[Test]
  30. public function test_update_return_success()
  31. {
  32. $response = $this->actingAs($this->user, 'web-guard')
  33. ->json('PATCH', '/user/password', [
  34. 'currentPassword' => self::PASSWORD,
  35. 'password' => self::NEW_PASSWORD,
  36. 'password_confirmation' => self::NEW_PASSWORD,
  37. ])
  38. ->assertOk()
  39. ->assertJsonStructure([
  40. 'message',
  41. ]);
  42. }
  43. #[Test]
  44. public function test_update_passing_bad_current_pwd_return_bad_request()
  45. {
  46. $response = $this->actingAs($this->user, 'web-guard')
  47. ->json('PATCH', '/user/password', [
  48. 'currentPassword' => self::NEW_PASSWORD,
  49. 'password' => self::NEW_PASSWORD,
  50. 'password_confirmation' => self::NEW_PASSWORD,
  51. ])
  52. ->assertStatus(400)
  53. ->assertJsonStructure([
  54. 'message',
  55. ]);
  56. }
  57. #[Test]
  58. public function test_update_passing_invalid_data_return_validation_error()
  59. {
  60. $response = $this->actingAs($this->user, 'web-guard')
  61. ->json('PATCH', '/user/password', [
  62. 'currentPassword' => self::PASSWORD,
  63. 'password' => null,
  64. 'password_confirmation' => self::NEW_PASSWORD,
  65. ])
  66. ->assertStatus(422);
  67. }
  68. #[Test]
  69. public function test_update_pwd_of_reverse_proxy_user_return_bad_request()
  70. {
  71. Config::set('auth.auth_proxy_headers.user', 'HTTP_REMOTE_USER');
  72. $user = User::factory()->create([
  73. 'name' => self::USER_NAME,
  74. 'email' => self::USER_EMAIL,
  75. ]);
  76. $this->app['auth']->shouldUse(self::REVERSE_PROXY_GUARD);
  77. $response = $this->json('PATCH', '/user/password', [
  78. 'currentPassword' => self::NEW_PASSWORD,
  79. 'password' => self::NEW_PASSWORD,
  80. 'password_confirmation' => self::NEW_PASSWORD,
  81. ], [
  82. 'HTTP_REMOTE_USER' => self::USER_NAME,
  83. ])
  84. ->assertStatus(405)
  85. ->assertJsonStructure([
  86. 'message',
  87. ]);
  88. }
  89. #[Test]
  90. public function test_update_pwd_of_oauth_user_return_bad_request()
  91. {
  92. $this->user = User::factory()->create([
  93. 'name' => self::USER_NAME,
  94. 'email' => self::USER_EMAIL,
  95. 'password' => 'password',
  96. 'is_admin' => 1,
  97. 'oauth_id' => '12345',
  98. 'oauth_provider' => 'github',
  99. ]);
  100. $this->actingAs($this->user, 'web-guard')
  101. ->json('PATCH', '/user/password', [
  102. 'currentPassword' => self::NEW_PASSWORD,
  103. 'password' => self::NEW_PASSWORD,
  104. 'password_confirmation' => self::NEW_PASSWORD,
  105. ])
  106. ->assertStatus(400)
  107. ->assertJsonStructure([
  108. 'message',
  109. ]);
  110. }
  111. }