diff --git a/app/Http/Middleware/CheckIfAdmin.php b/app/Http/Middleware/CheckIfAdmin.php index 69b2a37..50d63ab 100644 --- a/app/Http/Middleware/CheckIfAdmin.php +++ b/app/Http/Middleware/CheckIfAdmin.php @@ -20,7 +20,7 @@ class CheckIfAdmin return $next($request); } - return redirect(route('home'))->with('error', 'You do not have admin access.'); + return redirect(route('dashboard'))->with('error', 'You do not have admin access.'); } } diff --git a/routes/admin.php b/routes/admin.php index 4f7d721..95a7879 100644 --- a/routes/admin.php +++ b/routes/admin.php @@ -5,7 +5,7 @@ use App\Http\Middleware\CheckIfAdmin; use Illuminate\Support\Facades\Route; Route::middleware(['auth', 'verified', CheckIfAdmin::class])->prefix('admin/')->group(function () { - Route::view('/', 'admin.dashboard'); + Route::view('/', 'admin.dashboard')->name('admin.dashboard'); Route::post('/auditions/roomUpdate', [\App\Http\Controllers\Admin\AuditionController::class, 'roomUpdate']); // Endpoint for JS assigning auditions to rooms Route::post('/scoring/assign_guide_to_audition', [\App\Http\Controllers\Admin\AuditionController::class, 'scoringGuideUpdate']); // Endpoint for JS assigning scoring guides to auditions diff --git a/tests/Feature/NavbarTest.php b/tests/Feature/NavbarTest.php new file mode 100644 index 0000000..d267234 --- /dev/null +++ b/tests/Feature/NavbarTest.php @@ -0,0 +1,61 @@ +create(); + $noJudgeUser = User::factory()->create(); + $judgeUser = User::factory()->create(); + $adminNoJudgeUser = User::factory()->admin()->create(); + $room->judges()->attach($judgeUser); + + Settings::set('judging_enabled', false); + actingAs($noJudgeUser); + get(route('dashboard'))->assertDontSee('Judging'); + actingAs($judgeUser); + get(route('dashboard'))->assertDontSee('Judging'); + actingAs($adminNoJudgeUser); + get(route('dashboard'))->assertDontSee('Judging'); + + Settings::set('judging_enabled', true); + actingAs($noJudgeUser); + get(route('dashboard'))->assertDontSee('Judging'); + actingAs($judgeUser); + get(route('dashboard'))->assertSee('Judging'); + actingAs($adminNoJudgeUser); + get(route('dashboard'))->assertDontSee('Judging'); +}); + +it('only shows Administration and Setup menus when the user is an administrator', function () { + // Arrange + $adminUser = User::factory()->admin()->create(); + $nonAdminUser = User::factory()->create(); + + actingAs($adminUser); + get(route('dashboard'))->assertSee('Administration')->assertSee('Setup'); + actingAs($nonAdminUser); + get(route('dashboard'))->assertDontSee('Administration')->assertDontSee('Setup'); +}); + +it('only shows the Tabulation dropdown to tabulators and administrators', function () { + // Arrange + $adminUser = User::factory()->admin()->create(); + $tabUser = User::factory()->tab()->create(); + $normalUser = User::factory()->create(); + // Act & Assert + actingAs($adminUser); + get(route('dashboard'))->assertSee('Tabulation'); + actingAs($tabUser); + get(route('dashboard'))->assertSee('Tabulation'); + actingAs($normalUser); + get(route('dashboard'))->assertDontSee('Tabulation'); + +}); diff --git a/tests/Feature/Pages/Admin/DashboardTest.php b/tests/Feature/Pages/Admin/DashboardTest.php new file mode 100644 index 0000000..fa4d779 --- /dev/null +++ b/tests/Feature/Pages/Admin/DashboardTest.php @@ -0,0 +1,21 @@ +admin()->create(); + $nonAdminUser = User::factory()->create(); + + // Act & Assert + get(route('dashboard'))->assertRedirect(route('home')); + actingAs($adminUser); + get(route('admin.dashboard'))->assertOk(); + actingAs($nonAdminUser); + get(route('admin.dashboard'))->assertRedirect(route('dashboard')); +});