| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174 | <?phpnamespace Laravel\Ui\Tests\AuthBackend;use Illuminate\Auth\Events\Attempting;use Illuminate\Foundation\Auth\AuthenticatesUsers;use Illuminate\Http\Request;use Illuminate\Routing\Pipeline;use Illuminate\Support\Facades\Auth;use Illuminate\Support\Facades\Event;use Illuminate\Testing\TestResponse;use Illuminate\Validation\ValidationException;use Orchestra\Testbench\Factories\UserFactory;use Orchestra\Testbench\TestCase;class AuthenticatesUsersTest extends TestCase{    use AuthenticatesUsers;    protected function tearDown(): void    {        Auth::logout();        parent::tearDown();    }    /**     * Define database migrations.     *     * @return void     */    protected function defineDatabaseMigrations()    {        $this->loadLaravelMigrations();    }    /** @test */    public function it_can_authenticate_a_user()    {        Event::fake();        $user = UserFactory::new()->create();        $request = Request::create('/login', 'POST', [            'email' => $user->email,            'password' => 'password',        ], [], [], [            'HTTP_ACCEPT' => 'application/json',        ]);        $response = $this->handleRequestUsing($request, function ($request) {            return $this->login($request);        })->assertStatus(204);        Event::assertDispatched(function (Attempting $event) {            return $event->remember === false;        });    }    /** @test */    public function it_can_authenticate_a_user_with_remember_as_false()    {        Event::fake();        $user = UserFactory::new()->create();        $request = Request::create('/login', 'POST', [            'email' => $user->email,            'password' => 'password',            'remember' => false,        ], [], [], [            'HTTP_ACCEPT' => 'application/json',        ]);        $response = $this->handleRequestUsing($request, function ($request) {            return $this->login($request);        })->assertStatus(204);        Event::assertDispatched(function (Attempting $event) {            return $event->remember === false;        });    }    /** @test */    public function it_can_authenticate_a_user_with_remember_as_true()    {        Event::fake();        $user = UserFactory::new()->create();        $request = Request::create('/login', 'POST', [            'email' => $user->email,            'password' => 'password',            'remember' => true,        ], [], [], [            'HTTP_ACCEPT' => 'application/json',        ]);        $response = $this->handleRequestUsing($request, function ($request) {            return $this->login($request);        })->assertStatus(204);        Event::assertDispatched(function (Attempting $event) {            return $event->remember === true;        });    }    /** @test */    public function it_cant_authenticate_a_user_with_invalid_password()    {        $user = UserFactory::new()->create();        $request = Request::create('/login', 'POST', [            'email' => $user->email,            'password' => 'invalid-password',        ], [], [], [            'HTTP_ACCEPT' => 'application/json',        ]);        $response = $this->handleRequestUsing($request, function ($request) {            return $this->login($request);        })->assertUnprocessable();        $this->assertInstanceOf(ValidationException::class, $response->exception);        $this->assertSame([            'email' => [                'These credentials do not match our records.',            ],        ], $response->exception->errors());    }     /** @test */    public function it_cant_authenticate_unknown_credential()    {        $request = Request::create('/login', 'POST', [            'email' => 'taylor@laravel.com',            'password' => 'password',        ], [], [], [            'HTTP_ACCEPT' => 'application/json',        ]);        $response = $this->handleRequestUsing($request, function ($request) {            return $this->login($request);        })->assertUnprocessable();        $this->assertInstanceOf(ValidationException::class, $response->exception);        $this->assertSame([            'email' => [                'These credentials do not match our records.',            ],        ], $response->exception->errors());    }    /**     * Handle Request using the following pipeline.     *     * @param  \Illuminate\Http\Request  $request     * @param  callable  $callback     * @return \Illuminate\Testing\TestResponse     */    protected function handleRequestUsing(Request $request, callable $callback)    {        return new TestResponse(            (new Pipeline($this->app))                ->send($request)                ->through([                    \Illuminate\Session\Middleware\StartSession::class,                ])                ->then($callback)        );    }}
 |