diff --git a/app/Http/Controllers/PdfInvoiceController.php b/app/Http/Controllers/PdfInvoiceController.php index e5a1ffc..60b82d9 100644 --- a/app/Http/Controllers/PdfInvoiceController.php +++ b/app/Http/Controllers/PdfInvoiceController.php @@ -9,6 +9,10 @@ use Illuminate\Http\Request; use function auditionSetting; +/** + * @codeCoverageIgnore + * TODO: Figure out testing for printing + */ class PdfInvoiceController extends Controller { protected $pdf; diff --git a/app/Http/Controllers/RecapController.php b/app/Http/Controllers/RecapController.php index fb16a44..069029b 100644 --- a/app/Http/Controllers/RecapController.php +++ b/app/Http/Controllers/RecapController.php @@ -6,6 +6,8 @@ use App\Actions\Tabulation\RankAuditionEntries; use App\Models\Audition; use Illuminate\Support\Facades\App; +/** @codeCoverageIgnore */ +// TODO: Rewrite Recap class RecapController extends Controller { public function selectAudition() diff --git a/app/Http/Controllers/ResultsPage.php b/app/Http/Controllers/ResultsPage.php index 32fcbd3..a40a6ab 100644 --- a/app/Http/Controllers/ResultsPage.php +++ b/app/Http/Controllers/ResultsPage.php @@ -33,6 +33,7 @@ class ResultsPage extends Controller $cacheKey = 'publicResultsPage'; if (Cache::has($cacheKey)) { + /** @codeCoverageIgnore */ return response(Cache::get($cacheKey)); } @@ -93,9 +94,4 @@ class ResultsPage extends Controller return response($content); } - - private function generateResultsPage() - { - - } } diff --git a/resources/views/results/index.blade.php b/resources/views/results/index.blade.php index bbc0653..1b7f161 100644 --- a/resources/views/results/index.blade.php +++ b/resources/views/results/index.blade.php @@ -1,4 +1,4 @@ - +s

{{ auditionSetting('auditionAbbreviation') }} Seats

diff --git a/tests/Feature/app/Http/Controllers/ResultsPageTest.php b/tests/Feature/app/Http/Controllers/ResultsPageTest.php new file mode 100644 index 0000000..63dbd9c --- /dev/null +++ b/tests/Feature/app/Http/Controllers/ResultsPageTest.php @@ -0,0 +1,88 @@ +create(); + $ensemble = Ensemble::factory()->create(['event_id' => $entry->audition->event_id]); + Seat::create([ + 'ensemble_id' => $ensemble->id, + 'audition_id' => $entry->audition_id, + 'seat' => 5, + 'entry_id' => $entry->id, + ]); + $entry->audition->addFlag('seats_published'); + $response = $this->get(route('results')); + $response->assertSee($entry->student->full_name()); +}); + +it('does not show results that are not published', function () { + $entry = Entry::factory()->create(); + $ensemble = Ensemble::factory()->create(['event_id' => $entry->audition->event_id]); + Seat::create([ + 'ensemble_id' => $ensemble->id, + 'audition_id' => $entry->audition_id, + 'seat' => 5, + 'entry_id' => $entry->id, + ]); + $response = $this->get(route('results')); + $response->assertDontSee($entry->student->full_name()); +}); + +it('does not show an audition with no seats', function () { + $entry = Entry::factory()->create(); + $ensemble = Ensemble::factory()->create(['event_id' => $entry->audition->event_id]); + + $entry->audition->addFlag('seats_published'); + + $response = $this->get(route('results')); + $response->assertDontSee($ensemble->name); +}); + +it('shows advancement results that are published', function () { + $entry = Entry::factory()->create(); + $entry->addFlag('will_advance'); + $entry->audition->addFlag('advancement_published'); + + $response = $this->get(route('results')); + $response->assertSee($entry->student->full_name()); +}); + +describe('test caching', function () { + test('results are served from cache when available', function () { + Cache::forever('publicResultsPage', 'test'); + $response = $this->get(route('results')); + expect($response->getContent())->toBe('test'); + }); + + test('results are generated and cached when not in cache', function () { + expect(Cache::has('publicResultsPage'))->toBeFalse(); + $response = $this->get(route('results')); + $response->assertOk(); + expect(Cache::has('publicResultsPage'))->toBeTrue(); + }); + + test('cached and fresh results match', function () { + // Clear cache + Cache::forget('publicResultsPage'); + + // Get fresh content + $freshContent = $this->get(route('results'))->getContent(); + + // Get cached content + $cachedContent = $this->get(route('results'))->getContent(); + + expect($cachedContent)->toBe($freshContent); + }); + +});