Tests for Audition controller

This commit is contained in:
Matt Young 2025-07-10 02:52:02 -05:00
parent eb66da14cf
commit 5014e80fb1
3 changed files with 59 additions and 25 deletions

View File

@ -14,9 +14,11 @@ class EnterBonusScore
{ {
public function __invoke(User $judge, Entry $entry, int $score): void public function __invoke(User $judge, Entry $entry, int $score): void
{ {
$getRelatedEntries = App::make(GetBonusScoreRelatedEntries::class); $getRelatedEntries = App::make(GetBonusScoreRelatedEntries::class);
$this->basicValidations($judge, $entry); // Verify there is a need for a bonus score
if ($entry->audition->bonusScore->count() === 0) {
throw new AuditionAdminException('The entries audition does not accept bonus scores');
}
$this->validateJudgeValidity($judge, $entry, $score); $this->validateJudgeValidity($judge, $entry, $score);
$entries = $getRelatedEntries($entry); $entries = $getRelatedEntries($entry);
@ -33,20 +35,6 @@ class EnterBonusScore
} }
protected function basicValidations(User $judge, Entry $entry): void
{
if (! $judge->exists) {
throw new AuditionAdminException('Invalid judge provided');
}
if (! $entry->exists) {
throw new AuditionAdminException('Invalid entry provided');
}
if ($entry->audition->bonusScore->count() === 0) {
throw new AuditionAdminException('Entry does not have a bonus score');
}
}
protected function validateJudgeValidity(User $judge, Entry $entry, $score): void protected function validateJudgeValidity(User $judge, Entry $entry, $score): void
{ {
if (BonusScore::where('entry_id', $entry->id)->where('user_id', $judge->id)->exists()) { if (BonusScore::where('entry_id', $entry->id)->where('user_id', $judge->id)->exists()) {

View File

@ -89,19 +89,13 @@ it('enters a bonus score for an student in multiple auditions and copies bonus t
expect($bariBS->score)->toEqual(7) expect($bariBS->score)->toEqual(7)
->and($bariBS->originally_scored_entry)->toEqual($this->s3a2->id); ->and($bariBS->originally_scored_entry)->toEqual($this->s3a2->id);
}); });
it('will not enter a score for a non existent judge', function () {
$fakeJudge = User::factory()->make();
($this->scribe)($fakeJudge, $this->s3a2, 7);
})->throws(AuditionAdminException::class, 'Invalid judge provided');
it('will not enter a score for a non existent entry', function () {
$fakeEntry = Entry::factory()->make();
($this->scribe)($this->judge1, $fakeEntry, 7);
})->throws(AuditionAdminException::class, 'Invalid entry provided');
it('will not enter a score for an audition with no bonus score', function () { it('will not enter a score for an audition with no bonus score', function () {
$newAudition = Audition::factory()->create(); $newAudition = Audition::factory()->create();
$newEntry = Entry::factory()->create(['audition_id' => $newAudition->id]); $newEntry = Entry::factory()->create(['audition_id' => $newAudition->id]);
($this->scribe)($this->judge1, $newEntry, 7); ($this->scribe)($this->judge1, $newEntry, 7);
})->throws(AuditionAdminException::class, 'Entry does not have a bonus score'); })->throws(AuditionAdminException::class, 'The entries audition does not accept bonus scores');
it('will not enter a bonus score for a judge that has already given one', function () { it('will not enter a bonus score for a judge that has already given one', function () {
($this->scribe)($this->judge1, $this->s2a1, 7); ($this->scribe)($this->judge1, $this->s2a1, 7);
($this->scribe)($this->judge1, $this->s2a2, 7); ($this->scribe)($this->judge1, $this->s2a2, 7);

View File

@ -0,0 +1,52 @@
<?php
use App\Models\User;
use Illuminate\Foundation\Testing\RefreshDatabase;
uses(RefreshDatabase::class);
describe('AssignMonitorController::index', function () {
it('denies access to a non-admin user', function () {
$this->get(route('admin.assign_monitors.index'))->assertRedirect(route('home'));
actAsNormal();
$this->get(route('admin.assign_monitors.index'))->assertRedirect(route('dashboard'));
actAsTab();
$this->get(route('admin.assign_monitors.index'))->assertRedirect(route('dashboard'));
});
it('shows the assign monitors page', function () {
$users = User::factory()->count(5)->create();
actAsAdmin();
$response = $this->get(route('admin.assign_monitors.index'))->assertOk();
foreach (User::all() as $user) {
$response->assertSee($user->full_name(true));
}
});
});
describe('AssignMonitorController::store', function () {
it('denies access to a non-admin user', function () {
$this->post(route('admin.assign_monitors.store'))->assertRedirect(route('home'));
actAsNormal();
$this->post(route('admin.assign_monitors.store'))->assertRedirect(route('dashboard'));
actAsTab();
$this->post(route('admin.assign_monitors.store'))->assertRedirect(route('dashboard'));
});
it('assigns monitor privileges to a user', function () {
$toBeMonitor = User::factory()->create();
$notToBeMonitor = User::factory()->create();
$alsoAmonitor = User::factory()->create();
actAsAdmin();
$this->post(route('admin.assign_monitors.store'), [
'user' => [
$toBeMonitor->id => 'on',
$alsoAmonitor->id => 'on',
],
])->assertRedirect(route('admin.assign_monitors.index'))->assertSessionHas('success', 'Monitors assigned');
$toBeMonitor->refresh();
$notToBeMonitor->refresh();
$alsoAmonitor->refresh();
expect($toBeMonitor->hasFlag('monitor'))->toBeTrue();
expect($notToBeMonitor->hasFlag('monitor'))->toBeFalse();
expect($alsoAmonitor->hasFlag('monitor'))->toBeTrue();
});
});