auditionadmin/tests/Feature/app/Http/Controllers/DoublerRequestControllerTes...

93 lines
3.6 KiB
PHP

<?php
/** @noinspection PhpUnhandledExceptionInspection */
use App\Actions\Entries\CreateEntry;
use App\Models\Audition;
use App\Models\AuditLogEntry;
use App\Models\DoublerRequest;
use App\Models\Event;
use App\Models\School;
use App\Models\Student;
use App\Models\User;
use Illuminate\Foundation\Testing\RefreshDatabase;
use function Pest\Laravel\actingAs;
uses(RefreshDatabase::class);
describe('index', function () {
it('returns a form to enter doubler requests', function () {
$school = School::factory()->create();
$user = User::factory()->forSchool($school)->create();
actingAs($user);
$event = Event::factory()->create(['name' => 'Concert']);
$event2 = Event::factory()->create(['name' => 'Jazz']);
$audition11 = Audition::factory()->create([
'minimum_grade' => 1, 'maximum_grade' => 15, 'event_id' => $event->id,
]);
$audition12 = Audition::factory()->create([
'minimum_grade' => 1, 'maximum_grade' => 15, 'event_id' => $event->id,
]);
$audition21 = Audition::factory()->create([
'minimum_grade' => 1, 'maximum_grade' => 15, 'event_id' => $event2->id,
]);
$audition22 = Audition::factory()->create([
'minimum_grade' => 1, 'maximum_grade' => 15, 'event_id' => $event2->id,
]);
$student = Student::factory()->forSchool($school)->create();
$entryDesk = app(CreateEntry::class);
$entryDesk($student, $audition11);
$entryDesk($student, $audition12);
$entryDesk($student, $audition21);
$entryDesk($student, $audition22);
DoublerRequest::create([
'event_id' => $event2->id,
'student_id' => $student->id,
'request' => 'request body',
]);
$response = $this->get(route('doubler_request.index'));
$response->assertOk();
$viewEvents = $response->viewData('events');
$viewDoublers = $response->viewData('doublers');
$viewExistingRequests = $response->viewData('existingRequests');
expect($viewEvents)->toHaveCount(2)
->and($viewDoublers)->toHaveCount(2)
->and($viewDoublers[$event->id]->count())->toBe(1)
->and($viewExistingRequests[$event2->id][$student->id]->request)->toBe('request body');
});
});
describe('makeRequest', function () {
it('submits a request', function () {
$school = School::factory()->create();
$user = User::factory()->forSchool($school)->create();
$event1 = Event::factory()->create();
$event2 = Event::factory()->create();
$student = Student::factory()->forSchool($school)->create();
$student2 = Student::factory()->forSchool($school)->create();
actingAs($user);
$response = $this->post(route('doubler_request.make_request'), [
'doubler_requests' => [
$event1->id => [
$student->id => 'student 1 request in event 1',
$student2->id => 'student 2 request in event 1',
],
$event2->id => [
$student->id => 'student 1 request in event 2',
$student2->id => 'student 2 request in event 2',
],
],
]);
$response->assertRedirect(route('doubler_request.index'));
expect(DoublerRequest::count())->toBe(4)
->and(DoublerRequest::where('event_id', $event2->id)->where('student_id',
$student->id)->first()->request)->toBe('student 1 request in event 2');
foreach (AuditLogEntry::all() as $logEntry) {
dump($logEntry->message);
}
});
});