diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php
index a694e9f..7796359 100644
--- a/app/Http/Controllers/UserController.php
+++ b/app/Http/Controllers/UserController.php
@@ -2,7 +2,9 @@
namespace App\Http\Controllers;
+use App\Http\Requests\UpdateUserRequest;
use App\Models\User;
+use Illuminate\Http\RedirectResponse;
use Illuminate\View\View;
class UserController extends Controller
@@ -20,4 +22,32 @@ class UserController extends Controller
'users' => $users,
]);
}
+
+ /**
+ * Show the form for editing the specified user.
+ */
+ public function edit(User $user): View
+ {
+ return view('user.edit', [
+ 'user' => $user,
+ ]);
+ }
+
+ /**
+ * Update the specified user.
+ */
+ public function update(UpdateUserRequest $request, User $user): RedirectResponse
+ {
+ $user->fill($request->validated());
+
+ if ($user->isDirty('email')) {
+ $user->email_verified_at = null;
+ }
+
+ $user->save();
+
+ return redirect()
+ ->route('user.edit', $user)
+ ->with('status', 'user-updated');
+ }
}
diff --git a/app/Http/Requests/UpdateUserRequest.php b/app/Http/Requests/UpdateUserRequest.php
new file mode 100644
index 0000000..469ee8f
--- /dev/null
+++ b/app/Http/Requests/UpdateUserRequest.php
@@ -0,0 +1,37 @@
+|string>
+ */
+ public function rules(): array
+ {
+ return [
+ 'name' => ['required', 'string', 'max:255'],
+ 'email' => [
+ 'required',
+ 'string',
+ 'email',
+ 'max:255',
+ Rule::unique('users', 'email')->ignore($this->route('user')),
+ ],
+ ];
+ }
+}
diff --git a/resources/views/user/edit.blade.php b/resources/views/user/edit.blade.php
new file mode 100644
index 0000000..399a4f1
--- /dev/null
+++ b/resources/views/user/edit.blade.php
@@ -0,0 +1,46 @@
+
+
+
+ {{ __('Edit User') }}
+
+
+
+
+
+
+
+ @if (session('status') === 'user-updated')
+
+ {{ __('User updated successfully.') }}
+
+ @endif
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/resources/views/user/index.blade.php b/resources/views/user/index.blade.php
index 82c8dea..e1101c0 100644
--- a/resources/views/user/index.blade.php
+++ b/resources/views/user/index.blade.php
@@ -17,6 +17,7 @@
Name |
Email |
Created |
+ Actions |
@@ -26,10 +27,15 @@
{{ $user->name }} |
{{ $user->email }} |
{{ $user->created_at?->format('Y-m-d H:i') }} |
+
+
+ {{ __('Edit') }}
+
+ |
@empty
- |
+ |
No users found.
|
diff --git a/routes/web.php b/routes/web.php
index 1dfd459..9ad00ff 100644
--- a/routes/web.php
+++ b/routes/web.php
@@ -14,6 +14,8 @@ Route::get('/dashboard', function () {
Route::middleware('auth')->group(function () {
Route::get('/user', [UserController::class, 'index'])->name('user.index');
+ Route::get('/user/{user}/edit', [UserController::class, 'edit'])->name('user.edit');
+ Route::patch('/user/{user}', [UserController::class, 'update'])->name('user.update');
Route::get('/profile', [ProfileController::class, 'edit'])->name('profile.edit');
Route::patch('/profile', [ProfileController::class, 'update'])->name('profile.update');
Route::delete('/profile', [ProfileController::class, 'destroy'])->name('profile.destroy');
diff --git a/tests/Feature/UserTest.php b/tests/Feature/UserTest.php
new file mode 100644
index 0000000..7d4b744
--- /dev/null
+++ b/tests/Feature/UserTest.php
@@ -0,0 +1,44 @@
+create();
+
+ $this->get("/user/{$user->id}/edit")->assertRedirect('/login');
+});
+
+test('authenticated users can view the user edit page', function () {
+ $actingUser = User::factory()->create();
+ $user = User::factory()->create();
+
+ $response = $this
+ ->actingAs($actingUser)
+ ->get("/user/{$user->id}/edit");
+
+ $response
+ ->assertSuccessful()
+ ->assertSee('Edit User')
+ ->assertSee($user->name)
+ ->assertSee($user->email);
+});
+
+test('authenticated users can update a user', function () {
+ $actingUser = User::factory()->create();
+ $user = User::factory()->create();
+
+ $response = $this
+ ->actingAs($actingUser)
+ ->patch("/user/{$user->id}", [
+ 'name' => 'Updated User',
+ 'email' => 'updated@example.com',
+ ]);
+
+ $response
+ ->assertRedirect("/user/{$user->id}/edit");
+
+ $user->refresh();
+
+ $this->assertSame('Updated User', $user->name);
+ $this->assertSame('updated@example.com', $user->email);
+});