From a461f0bb426d743c58b9ccc850f87c96fb4bb80c Mon Sep 17 00:00:00 2001 From: Saufi Date: Mon, 11 May 2026 12:17:32 +0800 Subject: [PATCH] user list --- .claude/settings.local.json | 8 ++++ app/Http/Controllers/UserController.php | 15 +++++++ resources/views/layouts/navigation.blade.php | 6 +++ resources/views/users/index.blade.php | 44 ++++++++++++++++++++ routes/web.php | 2 + tests/Feature/UserIndexTest.php | 25 +++++++++++ 6 files changed, 100 insertions(+) create mode 100644 .claude/settings.local.json create mode 100644 app/Http/Controllers/UserController.php create mode 100644 resources/views/users/index.blade.php create mode 100644 tests/Feature/UserIndexTest.php diff --git a/.claude/settings.local.json b/.claude/settings.local.json new file mode 100644 index 0000000..37e7337 --- /dev/null +++ b/.claude/settings.local.json @@ -0,0 +1,8 @@ +{ + "permissions": { + "allow": [ + "Bash(php artisan *)", + "Bash(vendor/bin/pint --dirty --format agent)" + ] + } +} diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php new file mode 100644 index 0000000..e0ef0c5 --- /dev/null +++ b/app/Http/Controllers/UserController.php @@ -0,0 +1,15 @@ +get(); + + return view('users.index', compact('users')); + } +} diff --git a/resources/views/layouts/navigation.blade.php b/resources/views/layouts/navigation.blade.php index c64bf64..af4fd24 100644 --- a/resources/views/layouts/navigation.blade.php +++ b/resources/views/layouts/navigation.blade.php @@ -15,6 +15,9 @@ {{ __('Dashboard') }} + + {{ __('Users') }} + @@ -70,6 +73,9 @@ {{ __('Dashboard') }} + + {{ __('Users') }} + diff --git a/resources/views/users/index.blade.php b/resources/views/users/index.blade.php new file mode 100644 index 0000000..0676ab5 --- /dev/null +++ b/resources/views/users/index.blade.php @@ -0,0 +1,44 @@ + + +

+ {{ __('Users') }} +

+
+ +
+
+
+
+ + + + + + + + + + + @foreach ($users as $index => $user) + + + + + + + @endforeach + + @if ($users->isEmpty()) + + + + @endif + +
#{{ __('Name') }}{{ __('Email') }}{{ __('Joined') }}
{{ $index + 1 }}{{ $user->name }}{{ $user->email }}{{ $user->created_at->format('d M Y') }}
+ {{ __('No users found.') }} +
+
+
+
+
+
diff --git a/routes/web.php b/routes/web.php index 74bb7ca..ce44b28 100644 --- a/routes/web.php +++ b/routes/web.php @@ -1,6 +1,7 @@ middleware(['auth', 'verified'])->name('dashboard'); Route::middleware('auth')->group(function () { + Route::get('/users', [UserController::class, 'index'])->name('users.index'); 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/UserIndexTest.php b/tests/Feature/UserIndexTest.php new file mode 100644 index 0000000..ab41f9a --- /dev/null +++ b/tests/Feature/UserIndexTest.php @@ -0,0 +1,25 @@ +get('/users')->assertRedirect('/login'); +}); + +test('authenticated users can view the users page', function () { + $user = User::factory()->create(); + + $this->actingAs($user) + ->get('/users') + ->assertOk() + ->assertViewIs('users.index'); +}); + +test('users page lists all users', function () { + $users = User::factory()->count(3)->create(); + + $this->actingAs($users->first()) + ->get('/users') + ->assertOk() + ->assertViewHas('users', fn ($viewUsers) => $viewUsers->count() === User::count()); +});