Laravel Unit test логин неактивного пользователя

Я хотел бы протестировать случай, когда пользователь отмечен как неактивный в db, вот метод в LoginController

<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Http\Request;

class LoginController extends Controller
{
    /*
    |--------------------------------------------------------------------------
    | Login Controller
    |--------------------------------------------------------------------------
    |
    | This controller handles authenticating users for the application and
    | redirecting them to your home screen. The controller uses a trait
    | to conveniently provide its functionality to your applications.
    |
    */

    use AuthenticatesUsers;

    /**
     * Where to redirect users after login.
     *
     * @var string
     */
    protected $redirectTo = '/';

    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware(['guest'])->except('logout'); //, 'checkup'
    }

    /**
     * The user has been authenticated.
     *
     * @param  \Illuminate\Http\Request $request
     * @param  mixed $user
     * @return mixed
     */
    protected function authenticated(Request $request, $user)
    {
        if ($user->roles->count() === 0 ) {
            $this->guard()->logout();
            flash('There is no role specified please contact the system Administrator!')->error();
            return back()->withErrors(['There is no role specified']);
        }
    }

    /**
     * @param Request $request
     * @return array
     */
    protected function credentials(Request $request)
    {
        $credentials = $request->only($this->username(), 'password');
        $credentials['status'] = "A";

        return $credentials;
    }
}

поэтому я создаю фальшивого пользователя и использую следующий тест, чтобы охватить случай

 $this->faker = Faker::create();
    $password = $this->faker->password;
    $user = factory(User::class)->create([
        'username' => $this->faker->username,
        'firstname' => $this->faker->firstName,
        'lastname' => $this->faker->lastName,
        'status'=> 'I',
        'password' => bcrypt($password),
        'email' => $this->faker->email
    ]);

    $response = $this->call('POST', '/login', [
       'email' => $user->email,
       'password' =>$password,
        '_token' => csrf_token()
    ]);

    $response->assertRedirect('/login');

но пользователь каждый раз входит в систему.

тестирование того же случая с Laravel Dusk пройдет нормально

public function testNotActiveUserLogin()
    {
        $faker = Faker\Factory::create();
        $password = $faker->password;
        $user = factory(User::class)->create([
            'username' => $faker->username,
            'firstname' => $faker->firstName,
            'lastname' => $faker->lastName,
            'status' => 'I',
            'password' => bcrypt($password),
            'email' => $faker->email
        ]);

        $this->browse(function (Browser $browser) use ($user, $password) {
            $browser->visit('/')
                ->type('email', $user->email)
                ->type('password', $password)
                ->press('Sign In')
                ->assertPathIs('/login');
        });
    }

Что мне не хватает в этом случае?

не могли бы вы также указать класс контроллера в своем вопросе?

Sven Hakvoort 10.10.2018 16:04

Первый блок кода находится в моем LoginController

fefe 10.10.2018 16:24

Да, я читал это :) Однако мне любопытно, что находится в остальной части вашего контроллера, поскольку это также может быть причиной того, что ваш тест не работает, если мой обновленный ответ не исправляет ваш ответ :)

Sven Hakvoort 10.10.2018 16:28

Я добавил контроллер отверстий

fefe 10.10.2018 16:30
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
4
167
1

Ответы 1

Пользователь всегда будет рассматриваться как активный, потому что вы перезаписываете статус после получения пользователя из базы данных с помощью: $credentials['status'] = "A";. Если вы удалите это утверждение, учетные данные должны быть правильными.

Возможно, я неправильно сформулировал принятие моего теста: тест должен быть доказательством того, что ни один неактивный пользователь не может получить доступ к пользовательскому интерфейсу, поэтому его следует перенаправить на страницу входа.

fefe 10.10.2018 16:03

@fefe, я также обновляю свой ответ о том, как я думаю, вы можете решить свою проблему на основе информации, которая у меня есть прямо сейчас

Sven Hakvoort 10.10.2018 16:07

Другие вопросы по теме