RegistersUsersTest.php 2.9 KB

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