auditionadmin/tests/Feature/app/Observers/EntryFlagObserverTest.php

120 lines
5.5 KiB
PHP

<?php
use App\Exceptions\AuditionAdminException;
use App\Models\Entry;
use App\Models\EntryFlag;
use Illuminate\Foundation\Testing\RefreshDatabase;
uses(RefreshDatabase::class);
beforeEach(function () {
$this->entry = Entry::factory()->create();
});
afterEach(function () {
Cache::flush();
});
it('it throws an exception if we try to add a declined flag while seats are published', function () {
$this->entry->audition->addFlag('seats_published');
$this->entry->refresh();
$this->entry->addFlag('declined');
})->throws(AuditionAdminException::class, 'Cannot change flag for published auditions');
it('it throws an exception if we try to add a no_show flag while seats are published', function () {
$this->entry->audition->addFlag('seats_published');
$this->entry->refresh();
$this->entry->addFlag('no_show');
})->throws(AuditionAdminException::class, 'Cannot change flag for published auditions');
it('it throws an exception if we try to add a failed_prelim flag while seats are published', function () {
$this->entry->audition->addFlag('seats_published');
$this->entry->refresh();
$this->entry->addFlag('failed_prelim');
})->throws(AuditionAdminException::class, 'Cannot change flag for published auditions');
it('it throws an exception if we try to add a declined flag while advancement is published', function () {
$this->entry->audition->addFlag('advancement_published');
$this->entry->refresh();
$this->entry->addFlag('declined');
})->throws(AuditionAdminException::class, 'Cannot change flag for published auditions');
it('it throws an exception if we try to add a no_show flag while advancement is published', function () {
$this->entry->audition->addFlag('advancement_published');
$this->entry->refresh();
$this->entry->addFlag('no_show');
})->throws(AuditionAdminException::class, 'Cannot change flag for published auditions');
it('it throws an exception if we try to add a failed_prelim flag while advancement is published', function () {
$this->entry->audition->addFlag('advancement_published');
$this->entry->refresh();
$this->entry->addFlag('failed_prelim');
})->throws(AuditionAdminException::class, 'Cannot change flag for published auditions');
it('clears caches when adding a flag', function () {
Cache::put('rank_advancement_'.$this->entry->audition_id, 'test', 60);
Cache::put('rank_seating_'.$this->entry->audition_id, 'test', 60);
expect(Cache::has('rank_advancement_'.$this->entry->audition_id))->toBeTrue()
->and(Cache::has('rank_seating_'.$this->entry->audition_id))->toBeTrue();
$this->entry->addFlag('declined');
expect(Cache::has('rank_advancement_'.$this->entry->audition_id))->toBeFalse()
->and(Cache::has('rank_seating_'.$this->entry->audition_id))->toBeFalse();
});
it('it throws an exception if we try to delete a declined flag while seats are published', function () {
$this->entry->addFlag('declined');
$this->entry->audition->addFlag('seats_published');
$this->entry->refresh();
$this->entry->removeFlag('declined');
})->throws(AuditionAdminException::class, 'Cannot change flag for published auditions');
it('it throws an exception if we try to delete a no_show flag while seats are published', function () {
$this->entry->addFlag('no_show');
$this->entry->audition->addFlag('seats_published');
$this->entry->refresh();
$this->entry->removeFlag('no_show');
})->throws(AuditionAdminException::class, 'Cannot change flag for published auditions');
it('it throws an exception if we try to delete a failed_prelim flag while seats are published', function () {
$this->entry->addFlag('failed_prelim');
$this->entry->audition->addFlag('seats_published');
$this->entry->refresh();
$this->entry->removeFlag('failed_prelim');
})->throws(AuditionAdminException::class, 'Cannot change flag for published auditions');
it('it throws an exception if we try to delete a declined flag while advancement is published', function () {
$this->entry->addFlag('declined');
$this->entry->audition->addFlag('advancement_published');
$this->entry->refresh();
$this->entry->removeFlag('declined');
})->throws(AuditionAdminException::class, 'Cannot change flag for published auditions');
it('it throws an exception if we try to delete a no_show flag while advancement is published', function () {
$this->entry->addFlag('no_show');
$this->entry->audition->addFlag('advancement_published');
$this->entry->refresh();
$this->entry->removeFlag('no_show');
})->throws(AuditionAdminException::class, 'Cannot change flag for published auditions');
it('it throws an exception if we try to delete a failed_prelim flag while advancement is published', function () {
$this->entry->addFlag('failed_prelim');
$this->entry->audition->addFlag('advancement_published');
$this->entry->refresh();
$this->entry->removeFlag('failed_prelim');
})->throws(AuditionAdminException::class, 'Cannot change flag for published auditions');
it('clears caches when deleting a flag', function () {
$this->entry->addFlag('no_show');
Cache::put('rank_advancement_'.$this->entry->audition_id, 'test', 60);
Cache::put('rank_seating_'.$this->entry->audition_id, 'test', 60);
expect(Cache::has('rank_advancement_'.$this->entry->audition_id))->toBeTrue()
->and(Cache::has('rank_seating_'.$this->entry->audition_id))->toBeTrue();
EntryFlag::first()->delete();
expect(Cache::has('rank_advancement_'.$this->entry->audition_id))->toBeFalse()
->and(Cache::has('rank_seating_'.$this->entry->audition_id))->toBeFalse();
});