auditionadmin/tests-old/Feature/Pages/Setup/AuditionsIndexTest.php

50 lines
1.7 KiB
PHP

<?php
use App\Models\Audition;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Sinnbeck\DomAssertions\Asserts\AssertElement;
use function Pest\Laravel\get;
uses(RefreshDatabase::class);
it('allows only an admin to manage auditions', function () {
get((route('admin.auditions.index')))
->assertRedirect(route('home'));
actAsNormal();
get((route('admin.auditions.index')))
->assertRedirect('/dashboard')
->assertSessionHas('error', 'You are not authorized to perform this action');
actasAdmin();
get((route('admin.auditions.index')))
->assertOk();
});
it('has a link to add a new audition', function () {
// Arrange
actAsAdmin();
// Act & Assert
get((route('admin.auditions.index')))
->assertOk()
->assertSee('New Audition')
->assertSee(route('admin.auditions.create'));
});
it('shows audition data', function () {
// Arrange
$auditions = Audition::factory()->count(10)->create();
actAsAdmin();
// Act & Assert
$response = get((route('admin.auditions.index')));
$response->assertOk();
foreach ($auditions as $audition) {
$response->assertElementExists('#auditionRow-'.$audition->id,
function (AssertElement $element) use ($audition) {
$element->containsText($audition->event->name)
->containsText($audition->name)
->containsText($audition->entry_deadline)
->containsText($audition->display_fee())
->containsText($audition->minimum_grade.' - '.$audition->maximum_grade)
->containsText($audition->entries->count());
});
}
});