89 lines
3.5 KiB
PHP
89 lines
3.5 KiB
PHP
<?php
|
|
|
|
/** @noinspection PhpUnhandledExceptionInspection */
|
|
|
|
use App\Actions\Entries\CreateEntry;
|
|
use App\Models\Audition;
|
|
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');
|
|
|
|
});
|
|
});
|