test sparse schedule placement
This commit is contained in:
parent
6c8250b3a4
commit
add0684610
3 changed files with 130 additions and 14 deletions
|
|
@ -196,6 +196,40 @@ class ScheduleEndpointTest extends TestCase
|
|||
$this->assertDatabaseCount('schedules', 1);
|
||||
}
|
||||
|
||||
public function test_it_packs_sparse_assignments_at_the_requested_end(): void
|
||||
{
|
||||
$user = $this->createUser('reader@example.com');
|
||||
$set = $this->createSet($user, 'Course');
|
||||
$lessonLevel = $this->createLevel($set, 'lesson');
|
||||
$repository = app(ElementRepository::class);
|
||||
|
||||
foreach (range(1, 4) as $number) {
|
||||
$repository->create(new CreateElementDto(
|
||||
name: "Lesson {$number}",
|
||||
level: $lessonLevel,
|
||||
parentElement: null,
|
||||
));
|
||||
}
|
||||
$this->createSession($user, 'valid-token');
|
||||
|
||||
$response = $this->credentialedPost('/api/schedules', [
|
||||
'setId' => $set->getId(),
|
||||
'levelId' => $lessonLevel->getId(),
|
||||
'startDate' => '2026-08-10',
|
||||
'targetDate' => '2026-08-15',
|
||||
'workloadPlacement' => 'end',
|
||||
])->assertCreated();
|
||||
|
||||
$days = $response->json('schedule.days');
|
||||
$this->assertIsArray($days);
|
||||
$this->assertSame(
|
||||
[0, 0, 1, 1, 1, 1],
|
||||
array_map(function (array $day): int {
|
||||
return count($day['assignments']);
|
||||
}, $days),
|
||||
);
|
||||
}
|
||||
|
||||
public function test_it_rejects_an_unknown_workload_placement(): void
|
||||
{
|
||||
$user = $this->createUser('reader@example.com');
|
||||
|
|
@ -215,7 +249,34 @@ class ScheduleEndpointTest extends TestCase
|
|||
'targetDate' => '2026-08-14',
|
||||
'workloadPlacement' => 'sideways',
|
||||
])->assertBadRequest()->assertExactJson([
|
||||
'error' => 'workloadPlacement must be start, middle, or end',
|
||||
'error' => 'workloadPlacement must be spread, start, middle, or end',
|
||||
]);
|
||||
}
|
||||
|
||||
public function test_it_rejects_spread_placement_for_a_dense_schedule(): void
|
||||
{
|
||||
$user = $this->createUser('reader@example.com');
|
||||
$set = $this->createSet($user, 'Course');
|
||||
$lessonLevel = $this->createLevel($set, 'lesson');
|
||||
$repository = app(ElementRepository::class);
|
||||
|
||||
foreach (range(1, 5) as $number) {
|
||||
$repository->create(new CreateElementDto(
|
||||
name: "Lesson {$number}",
|
||||
level: $lessonLevel,
|
||||
parentElement: null,
|
||||
));
|
||||
}
|
||||
$this->createSession($user, 'valid-token');
|
||||
|
||||
$this->credentialedPost('/api/schedules', [
|
||||
'setId' => $set->getId(),
|
||||
'levelId' => $lessonLevel->getId(),
|
||||
'startDate' => '2026-08-10',
|
||||
'targetDate' => '2026-08-13',
|
||||
'workloadPlacement' => 'spread',
|
||||
])->assertBadRequest()->assertExactJson([
|
||||
'error' => 'spread placement requires fewer assignments than days',
|
||||
]);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue