Bonjour tous le monde,
Je voudrais faire un test de mise à jour d'un utilisateur voici ma route :
Route::resource('users', 'UserController');
Voici la méthode du controller que je veux tester :
public function update(StoreUser $request, $id)
{
dd('toto');
/** @var User $user */
$user = User::findOrFail($id);
$request->validated();
$datas = $request->except(['_token', '_method', 'password_confirmation']);
if ($request->has('password') && $request->input('password') !== null) {
$datas['password'] = Hash::make($datas['password']);
} else {
unset($datas['password']);
}
$user->fill($datas);
$user->update();
$request->session()->flash('success', 'Mise à jour effectuée.');
return redirect()->route('users.edit', ['user' => $user->id])->with('success', 'L\'utlisateur a été modifié.');
}
le dump and die est volontaire, c'est pour voir si il passe bien dans la méthode.... et voici mon test unitaire :
/**
* @test
*/
public function updateUser()
{
$user = factory(User::class)->create();
$request = $this->actingAs($this->user)->put(route('users.update', ['user' => $user]), [
'name' => 'test',
]);
$this->assertDatabaseHas('users', [
'email' => 'toto@test.com'
]);
$request->assertRedirect(route('users.edit', ['user' => $user]));
}
Et apparemment il a pas l'air de passer dans la méthode du controller. J'ai fais un essaie avec le users.store qui est en méthode POST et ça fonctionne.
Donc je pense que je dois mal faire quelque chose.