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()); +});