auditionadmin/tests/Feature/Actions/SetHeadDirectorTest.php

52 lines
1.7 KiB
PHP

<?php
use App\Actions\Schools\SetHeadDirector;
use App\Exceptions\AuditionAdminException;
use App\Models\School;
use App\Models\User;
use Illuminate\Foundation\Testing\RefreshDatabase;
uses(RefreshDatabase::class);
beforeEach(function () {
$this->setter = app(SetHeadDirector::class);
});
it('sets a head director flag for a user with a school', function () {
// Arrange
$school = School::factory()->create();
$user = User::factory()->create(['school_id' => $school->id]);
$this->setter->setHeadDirector($user);
$this->assertDatabaseHas('user_flags', [
'user_id' => $user->id,
'flag_name' => 'head_director',
]);
});
it('throws an error if the user has no school', function () {
// Arrange
$user = User::factory()->create();
// Act & Assert
$this->setter->setHeadDirector($user);
})->throws(AuditionAdminException::class, 'User is not associated with a school');
it('removes the head director flag from any other users as the school', function () {
// Arrange
$school = School::factory()->create();
$oldHead = User::factory()->create(['school_id' => $school->id]);
$newHead = User::factory()->create(['school_id' => $school->id]);
$oldHead->addFlag('head_director');
$this->assertDatabaseHas('user_flags', [
'user_id' => $oldHead->id,
'flag_name' => 'head_director',
]);
// Act
$this->setter->setHeadDirector($newHead);
$this->assertDatabaseHas('user_flags', [
'user_id' => $newHead->id,
'flag_name' => 'head_director',
]);
$this->assertDatabaseMissing('user_flags', [
'user_id' => $oldHead->id,
'flag_name' => 'head_director',
]);
});