auditionadmin/tests/Feature/NavbarTest.php

62 lines
2.1 KiB
PHP

<?php
use App\Models\Room;
use App\Models\User;
use App\Settings;
use Illuminate\Foundation\Testing\RefreshDatabase;
use function Pest\Laravel\actingAs;
use function Pest\Laravel\get;
uses(RefreshDatabase::class);
it('only shows the judging option when a user is assigned to judge and judging is enabled', function () {
// Arrange
$room = Room::factory()->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');
});