initDatabase(); /** @var Room $room */ $room = Room::factory()->create(); // Shifts /** @var Collection|Shift[] $shifts */ $shifts = Shift::factory(2) ->create(['room_id' => $room->id]); $shiftA = $shifts[0]; // "Empty" entry to be skipped NeededAngelType::factory(1)->create(['room_id' => null, 'shift_id' => $shiftA->id, 'count' => 0]); // Needed entry by shift /** @var NeededAngelType $byShift */ $byShift = NeededAngelType::factory(2) ->create(['room_id' => null, 'shift_id' => $shiftA->id, 'count' => 2]) ->first(); // Needed entry by room /** @var NeededAngelType $byRoom */ $byRoom = NeededAngelType::factory(1) ->create(['room_id' => $room->id, 'shift_id' => null, 'count' => 3]) ->first(); // Added by both NeededAngelType::factory(1) ->create([ 'room_id' => $room->id, 'shift_id' => null, 'angel_type_id' => $byShift->angel_type_id, 'count' => 3, ]) ->first(); // By shift ShiftEntry::factory(2)->create(['shift_id' => $shiftA->id, 'angel_type_id' => $byShift->angel_type_id]); // By room ShiftEntry::factory(1)->create(['shift_id' => $shiftA->id, 'angel_type_id' => $byRoom->angel_type_id]); // Additional (not required by shift nor room) ShiftEntry::factory(1)->create(['shift_id' => $shiftA->id]); foreach (User::all() as $user) { // Generate user data /** @var User $user */ PersonalData::factory()->create(['user_id' => $user->id]); Contact::factory()->create(['user_id' => $user->id]); } $request = new Request(); $request = $request->withAttribute('room_id', $room->id); $controller = new ShiftsController(new Response(), $this->url); $response = $controller->entriesByRoom($request); $this->validateApiResponse('/rooms/{id}/shifts', 'get', $response); $this->assertEquals(['application/json'], $response->getHeader('content-type')); $this->assertJson($response->getContent()); $data = json_decode($response->getContent(), true); $this->assertArrayHasKey('data', $data); $this->assertCount(2, $data['data']); } }