test workload placement
This commit is contained in:
parent
80f8031ecc
commit
465db4a5b8
4 changed files with 345 additions and 0 deletions
|
|
@ -5,6 +5,7 @@ namespace Tests\Unit\Schedule\UseCases;
|
|||
use App\Element\CreateElementDto;
|
||||
use App\Exceptions\BadRequestException;
|
||||
use App\Exceptions\NotFoundException;
|
||||
use App\Schedule\EvenDistributionScheduler;
|
||||
use App\Schedule\UseCases\CreateSchedule\CreateSchedule;
|
||||
use App\Schedule\UseCases\CreateSchedule\CreateScheduleRequest;
|
||||
use App\Set\CreateSetDto;
|
||||
|
|
@ -108,12 +109,14 @@ class CreateScheduleTest extends TestCase
|
|||
$setLevelRepository,
|
||||
$elementRepository,
|
||||
$scheduleRepository,
|
||||
new EvenDistributionScheduler,
|
||||
))->execute(new CreateScheduleRequest(
|
||||
user: $user,
|
||||
setId: $set->getId(),
|
||||
levelId: $chapterLevel->getId(),
|
||||
startDate: '2026-08-10',
|
||||
targetDate: '2026-08-12',
|
||||
workloadPlacement: 'middle',
|
||||
));
|
||||
|
||||
$this->assertSame('chapter', $schedule->getElementKind());
|
||||
|
|
@ -182,12 +185,14 @@ class CreateScheduleTest extends TestCase
|
|||
$setLevelRepository,
|
||||
$elementRepository,
|
||||
new FakeScheduleRepository,
|
||||
new EvenDistributionScheduler,
|
||||
))->execute(new CreateScheduleRequest(
|
||||
user: $user,
|
||||
setId: $set->getId(),
|
||||
levelId: $lessonLevel->getId(),
|
||||
startDate: '2026-08-10',
|
||||
targetDate: '2026-08-16',
|
||||
workloadPlacement: 'middle',
|
||||
));
|
||||
|
||||
$this->assertSame(
|
||||
|
|
@ -224,12 +229,14 @@ class CreateScheduleTest extends TestCase
|
|||
$setLevelRepository,
|
||||
$elementRepository,
|
||||
new FakeScheduleRepository,
|
||||
new EvenDistributionScheduler,
|
||||
))->execute(new CreateScheduleRequest(
|
||||
user: $user,
|
||||
setId: $set->getId(),
|
||||
levelId: $milestoneLevel->getId(),
|
||||
startDate: '2020-01-01',
|
||||
targetDate: '2030-01-01',
|
||||
workloadPlacement: 'middle',
|
||||
));
|
||||
|
||||
$this->assertSame(
|
||||
|
|
@ -240,6 +247,102 @@ class CreateScheduleTest extends TestCase
|
|||
);
|
||||
}
|
||||
|
||||
public function test_it_defaults_heavier_days_to_the_middle(): void
|
||||
{
|
||||
$user = $this->user();
|
||||
$setRepository = new FakeSetRepository;
|
||||
$setLevelRepository = new FakeSetLevelRepository;
|
||||
$elementRepository = new FakeElementRepository;
|
||||
$set = $setRepository->create(new CreateSetDto(
|
||||
name: 'Course',
|
||||
creator: $user,
|
||||
));
|
||||
$lessonLevel = $this->createLevel(
|
||||
$setLevelRepository,
|
||||
$set,
|
||||
'lesson',
|
||||
);
|
||||
|
||||
foreach (range(1, 6) as $number) {
|
||||
$elementRepository->create(new CreateElementDto(
|
||||
name: "Lesson {$number}",
|
||||
level: $lessonLevel,
|
||||
parentElement: null,
|
||||
));
|
||||
}
|
||||
|
||||
$schedule = (new CreateSchedule(
|
||||
$setRepository,
|
||||
$setLevelRepository,
|
||||
$elementRepository,
|
||||
new FakeScheduleRepository,
|
||||
new EvenDistributionScheduler,
|
||||
))->execute(new CreateScheduleRequest(
|
||||
user: $user,
|
||||
setId: $set->getId(),
|
||||
levelId: $lessonLevel->getId(),
|
||||
startDate: '2026-08-10',
|
||||
targetDate: '2026-08-13',
|
||||
workloadPlacement: null,
|
||||
));
|
||||
|
||||
$this->assertSame(
|
||||
[
|
||||
'2026-08-10',
|
||||
'2026-08-11',
|
||||
'2026-08-11',
|
||||
'2026-08-12',
|
||||
'2026-08-12',
|
||||
'2026-08-13',
|
||||
],
|
||||
array_map(function ($assignment): string {
|
||||
return $assignment->getScheduledDate()->format('Y-m-d');
|
||||
}, $schedule->getAssignments()),
|
||||
);
|
||||
}
|
||||
|
||||
public function test_it_rejects_an_unknown_workload_placement(): void
|
||||
{
|
||||
$user = $this->user();
|
||||
$setRepository = new FakeSetRepository;
|
||||
$setLevelRepository = new FakeSetLevelRepository;
|
||||
$elementRepository = new FakeElementRepository;
|
||||
$set = $setRepository->create(new CreateSetDto(
|
||||
name: 'Course',
|
||||
creator: $user,
|
||||
));
|
||||
$lessonLevel = $this->createLevel(
|
||||
$setLevelRepository,
|
||||
$set,
|
||||
'lesson',
|
||||
);
|
||||
$elementRepository->create(new CreateElementDto(
|
||||
name: 'Lesson 1',
|
||||
level: $lessonLevel,
|
||||
parentElement: null,
|
||||
));
|
||||
|
||||
$this->expectException(BadRequestException::class);
|
||||
$this->expectExceptionMessage(
|
||||
'workloadPlacement must be start, middle, or end',
|
||||
);
|
||||
|
||||
(new CreateSchedule(
|
||||
$setRepository,
|
||||
$setLevelRepository,
|
||||
$elementRepository,
|
||||
new FakeScheduleRepository,
|
||||
new EvenDistributionScheduler,
|
||||
))->execute(new CreateScheduleRequest(
|
||||
user: $user,
|
||||
setId: $set->getId(),
|
||||
levelId: $lessonLevel->getId(),
|
||||
startDate: '2026-08-10',
|
||||
targetDate: '2026-08-13',
|
||||
workloadPlacement: 'sideways',
|
||||
));
|
||||
}
|
||||
|
||||
public function test_it_rejects_an_unknown_set(): void
|
||||
{
|
||||
$this->expectException(NotFoundException::class);
|
||||
|
|
@ -250,12 +353,14 @@ class CreateScheduleTest extends TestCase
|
|||
new FakeSetLevelRepository,
|
||||
new FakeElementRepository,
|
||||
new FakeScheduleRepository,
|
||||
new EvenDistributionScheduler,
|
||||
))->execute(new CreateScheduleRequest(
|
||||
user: $this->user(),
|
||||
setId: 999,
|
||||
levelId: 1,
|
||||
startDate: '2026-08-10',
|
||||
targetDate: '2026-08-12',
|
||||
workloadPlacement: 'middle',
|
||||
));
|
||||
}
|
||||
|
||||
|
|
@ -276,12 +381,14 @@ class CreateScheduleTest extends TestCase
|
|||
new FakeSetLevelRepository,
|
||||
new FakeElementRepository,
|
||||
new FakeScheduleRepository,
|
||||
new EvenDistributionScheduler,
|
||||
))->execute(new CreateScheduleRequest(
|
||||
user: $user,
|
||||
setId: $set->getId(),
|
||||
levelId: null,
|
||||
startDate: '2026-08-10',
|
||||
targetDate: '2026-08-12',
|
||||
workloadPlacement: 'middle',
|
||||
));
|
||||
}
|
||||
|
||||
|
|
@ -312,12 +419,14 @@ class CreateScheduleTest extends TestCase
|
|||
$setLevelRepository,
|
||||
new FakeElementRepository,
|
||||
new FakeScheduleRepository,
|
||||
new EvenDistributionScheduler,
|
||||
))->execute(new CreateScheduleRequest(
|
||||
user: $user,
|
||||
setId: $bible->getId(),
|
||||
levelId: $moduleLevel->getId(),
|
||||
startDate: '2026-08-10',
|
||||
targetDate: '2026-08-12',
|
||||
workloadPlacement: 'middle',
|
||||
));
|
||||
}
|
||||
|
||||
|
|
@ -344,12 +453,14 @@ class CreateScheduleTest extends TestCase
|
|||
$setLevelRepository,
|
||||
new FakeElementRepository,
|
||||
new FakeScheduleRepository,
|
||||
new EvenDistributionScheduler,
|
||||
))->execute(new CreateScheduleRequest(
|
||||
user: $user,
|
||||
setId: $set->getId(),
|
||||
levelId: $chapterLevel->getId(),
|
||||
startDate: '2026-08-10',
|
||||
targetDate: '2026-08-12',
|
||||
workloadPlacement: 'middle',
|
||||
));
|
||||
}
|
||||
|
||||
|
|
@ -376,12 +487,14 @@ class CreateScheduleTest extends TestCase
|
|||
$setLevelRepository,
|
||||
new FakeElementRepository,
|
||||
new FakeScheduleRepository,
|
||||
new EvenDistributionScheduler,
|
||||
))->execute(new CreateScheduleRequest(
|
||||
user: $user,
|
||||
setId: $set->getId(),
|
||||
levelId: $chapterLevel->getId(),
|
||||
startDate: '2026-02-30',
|
||||
targetDate: '2026-08-12',
|
||||
workloadPlacement: 'middle',
|
||||
));
|
||||
}
|
||||
|
||||
|
|
@ -410,12 +523,14 @@ class CreateScheduleTest extends TestCase
|
|||
$setLevelRepository,
|
||||
new FakeElementRepository,
|
||||
new FakeScheduleRepository,
|
||||
new EvenDistributionScheduler,
|
||||
))->execute(new CreateScheduleRequest(
|
||||
user: $user,
|
||||
setId: $set->getId(),
|
||||
levelId: $chapterLevel->getId(),
|
||||
startDate: '2026-08-12',
|
||||
targetDate: '2026-08-10',
|
||||
workloadPlacement: 'middle',
|
||||
));
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue