test workload placement

This commit is contained in:
Yisroel Baum 2026-08-19 08:58:17 +03:00
parent 80f8031ecc
commit 465db4a5b8
Signed by: yisroelbaum
GPG key ID: 0FA60884F75520A9
4 changed files with 345 additions and 0 deletions

View file

@ -160,6 +160,65 @@ class ScheduleEndpointTest extends TestCase
->assertExactJson($response->json());
}
public function test_it_places_heavier_days_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, 11) 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-14',
'workloadPlacement' => 'end',
])->assertCreated();
$days = $response->json('schedule.days');
$this->assertIsArray($days);
$this->assertSame(
[2, 2, 2, 2, 3],
array_map(function (array $day): int {
return count($day['assignments']);
}, $days),
);
$this->assertDatabaseCount('schedule_assignments', 11);
$this->assertDatabaseCount('schedules', 1);
}
public function test_it_rejects_an_unknown_workload_placement(): void
{
$user = $this->createUser('reader@example.com');
$set = $this->createSet($user, 'Course');
$lessonLevel = $this->createLevel($set, 'lesson');
app(ElementRepository::class)->create(new CreateElementDto(
name: 'Lesson 1',
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-14',
'workloadPlacement' => 'sideways',
])->assertBadRequest()->assertExactJson([
'error' => 'workloadPlacement must be start, middle, or end',
]);
}
public function test_it_lists_only_the_users_schedules_newest_first(): void
{
$user = $this->createUser('reader@example.com');