test set scheduling flow
This commit is contained in:
parent
0049248231
commit
bdb266746d
3 changed files with 724 additions and 0 deletions
97
backend/tests/Fakes/FakeScheduleRepository.php
Normal file
97
backend/tests/Fakes/FakeScheduleRepository.php
Normal file
|
|
@ -0,0 +1,97 @@
|
|||
<?php
|
||||
|
||||
namespace Tests\Fakes;
|
||||
|
||||
use App\Schedule\CreateScheduleDto;
|
||||
use App\Schedule\Schedule;
|
||||
use App\Schedule\ScheduleAssignment;
|
||||
use App\Schedule\ScheduleRepository;
|
||||
use App\User\User;
|
||||
|
||||
class FakeScheduleRepository implements ScheduleRepository
|
||||
{
|
||||
/**
|
||||
* @var array<int, Schedule>
|
||||
*/
|
||||
private array $schedules = [];
|
||||
|
||||
public function create(CreateScheduleDto $dto): Schedule
|
||||
{
|
||||
$id = count($this->schedules) + 1;
|
||||
$assignments = [];
|
||||
|
||||
foreach ($dto->assignments as $assignmentDto) {
|
||||
$assignments[] = new ScheduleAssignment(
|
||||
id: count($assignments) + 1,
|
||||
element: $assignmentDto->element,
|
||||
scheduledDate: $assignmentDto->scheduledDate,
|
||||
position: $assignmentDto->position,
|
||||
);
|
||||
}
|
||||
|
||||
$schedule = new Schedule(
|
||||
id: $id,
|
||||
user: $dto->user,
|
||||
set: $dto->set,
|
||||
elementKind: $dto->elementKind,
|
||||
startDate: $dto->startDate,
|
||||
targetDate: $dto->targetDate,
|
||||
assignments: $assignments,
|
||||
);
|
||||
$this->schedules[$id] = $schedule;
|
||||
|
||||
return $this->copy($schedule);
|
||||
}
|
||||
|
||||
public function findForUser(int $id, User $user): ?Schedule
|
||||
{
|
||||
$schedule = $this->schedules[$id] ?? null;
|
||||
if ($schedule === null || $schedule->getUser()->getId()
|
||||
!== $user->getId()
|
||||
) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return $this->copy($schedule);
|
||||
}
|
||||
|
||||
public function findAllForUser(User $user): array
|
||||
{
|
||||
$schedules = array_filter(
|
||||
$this->schedules,
|
||||
function (Schedule $schedule) use ($user): bool {
|
||||
return $schedule->getUser()->getId() === $user->getId();
|
||||
},
|
||||
);
|
||||
krsort($schedules);
|
||||
|
||||
return array_map(function (Schedule $schedule): Schedule {
|
||||
return $this->copy($schedule);
|
||||
}, array_values($schedules));
|
||||
}
|
||||
|
||||
private function copy(Schedule $schedule): Schedule
|
||||
{
|
||||
$assignments = array_map(
|
||||
function (ScheduleAssignment $assignment): ScheduleAssignment {
|
||||
return new ScheduleAssignment(
|
||||
id: $assignment->getId(),
|
||||
element: $assignment->getElement(),
|
||||
scheduledDate: $assignment->getScheduledDate(),
|
||||
position: $assignment->getPosition(),
|
||||
);
|
||||
},
|
||||
$schedule->getAssignments(),
|
||||
);
|
||||
|
||||
return new Schedule(
|
||||
id: $schedule->getId(),
|
||||
user: $schedule->getUser(),
|
||||
set: $schedule->getSet(),
|
||||
elementKind: $schedule->getElementKind(),
|
||||
startDate: $schedule->getStartDate(),
|
||||
targetDate: $schedule->getTargetDate(),
|
||||
assignments: $assignments,
|
||||
);
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue