Мой тест создает Account
с двумя User
с, один из которых является 'admin' Role
, который может предоставлять привилегии другим User
с учетной записи, а другой - обычным User
без назначенных Role
с.
// AccountUsersTest.php
public function superusers_can_promote_users()
{
$account = AccountFactory::withUsers(1)->create();
$superuser = $account->superUser;
$user = $account->regUsers->first();
$this->actingAs($superuser)
->post($user->path(), ['role' => 'manager']);
$this->assertTrue($user->hasRole('manager')); // <-- passes assertion
$this->actingAs($superuser)
->post($user->path(), ['role' => 'user']);
$this->assertTrue($user->hasRole('user')); // <-- fails assertion
}
// routes/web.php
Route::post('/account/users/{user}', 'AccountUsersController@update')->name('account.users.update');
// AccountUsersController.php
public function update(Request $request, User $user)
{
$this->authorize('manageAccountUsers', $user->account);
if ($role = request('role'))
{
$user->updateRole($role);
}
return redirect($user->path());
}
// User.php
public function updateRole($role)
{
$this->syncRoles($role);
var_dump($this->hasRole('user')); // <-- during the test, returns FALSE then TRUE (as expected)
}
Role
с правильно добавляются в базу данных перед каждым тестом.
AccountFactory
в тесте моделируется по модели класса
Фабрика используется в серии "Birdboard" Laracasts TDD, которая используется
так много других тестов, которые я не думаю, является проблемой.
$user->path()
возвращает строку, содержащую URL-адрес конечной точки.
- Авторизация проходит каждый раз, когда контроллер
update
метод
называется.
Почему второе утверждение не выполняется?