RegistersUsersTest.php 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. <?php
  2. namespace Laravel\Ui\Tests\AuthBackend;
  3. use Illuminate\Foundation\Auth\RegistersUsers;
  4. use Illuminate\Foundation\Auth\User;
  5. use Illuminate\Foundation\Testing\RefreshDatabase;
  6. use Illuminate\Http\Request;
  7. use Illuminate\Routing\Pipeline;
  8. use Illuminate\Support\Facades\Auth;
  9. use Illuminate\Support\Facades\Hash;
  10. use Illuminate\Support\Facades\Validator;
  11. use Illuminate\Testing\TestResponse;
  12. use Illuminate\Validation\ValidationException;
  13. use Orchestra\Testbench\Attributes\WithMigration;
  14. use Orchestra\Testbench\Factories\UserFactory;
  15. use Orchestra\Testbench\TestCase;
  16. use PHPUnit\Framework\Attributes\Test;
  17. #[WithMigration]
  18. class RegistersUsersTest extends TestCase
  19. {
  20. use RegistersUsers, RefreshDatabase;
  21. #[Test]
  22. public function it_can_register_a_user()
  23. {
  24. $request = Request::create('/register', 'POST', [
  25. 'name' => 'Taylor Otwell',
  26. 'email' => 'taylor@laravel.com',
  27. 'password' => 'secret-password',
  28. 'password_confirmation' => 'secret-password',
  29. ], [], [], [
  30. 'HTTP_ACCEPT' => 'application/json',
  31. ]);
  32. $response = $this->handleRequestUsing($request, function ($request) {
  33. return $this->register($request);
  34. })->assertCreated();
  35. $this->assertDatabaseHas('users', [
  36. 'name' => 'Taylor Otwell',
  37. 'email' => 'taylor@laravel.com',
  38. ]);
  39. }
  40. /**
  41. * Get a validator for an incoming registration request.
  42. *
  43. * @param array $data
  44. * @return \Illuminate\Contracts\Validation\Validator
  45. */
  46. protected function validator(array $data)
  47. {
  48. return Validator::make($data, [
  49. 'name' => ['required', 'string', 'max:255'],
  50. 'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
  51. 'password' => ['required', 'string', 'min:8', 'confirmed'],
  52. ]);
  53. }
  54. /**
  55. * Create a new user instance after a valid registration.
  56. *
  57. * @param array $data
  58. * @return \App\Models\User
  59. */
  60. protected function create(array $data)
  61. {
  62. $user = (new User())->forceFill([
  63. 'name' => $data['name'],
  64. 'email' => $data['email'],
  65. 'password' => Hash::make($data['password']),
  66. ]);
  67. $user->save();
  68. return $user;
  69. }
  70. /**
  71. * Handle Request using the following pipeline.
  72. *
  73. * @param \Illuminate\Http\Request $request
  74. * @param callable $callback
  75. * @return \Illuminate\Testing\TestResponse
  76. */
  77. protected function handleRequestUsing(Request $request, callable $callback)
  78. {
  79. return new TestResponse(
  80. (new Pipeline($this->app))
  81. ->send($request)
  82. ->through([
  83. \Illuminate\Session\Middleware\StartSession::class,
  84. ])
  85. ->then($callback)
  86. );
  87. }
  88. }