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') }} + + + + + + + + + + + # + {{ __('Name') }} + {{ __('Email') }} + {{ __('Joined') }} + + + + @foreach ($users as $index => $user) + + {{ $index + 1 }} + {{ $user->name }} + {{ $user->email }} + {{ $user->created_at->format('d M Y') }} + + @endforeach + + @if ($users->isEmpty()) + + + {{ __('No users found.') }} + + + @endif + + + + + + + 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()); +});