test sparse schedule placement

This commit is contained in:
Yisroel Baum 2026-08-19 22:38:34 +03:00
parent 6c8250b3a4
commit add0684610
Signed by: yisroelbaum
GPG key ID: 0FA60884F75520A9
3 changed files with 130 additions and 14 deletions

View file

@ -58,19 +58,74 @@ class EvenDistributionSchedulerTest extends TestCase
}
}
public function test_it_preserves_sparse_distribution_across_the_full_range(): void
public function test_it_places_sparse_assignments_at_the_requested_position(): void
{
$dates = (new EvenDistributionScheduler)->scheduledDates(
assignmentCount: 3,
startDate: $this->utc('2026-08-10'),
targetDate: $this->utc('2026-08-16'),
workloadPlacement: WorkloadPlacement::Middle,
);
$scheduler = new EvenDistributionScheduler;
$expectedDates = [
WorkloadPlacement::Spread->value => [
'2026-08-10',
'2026-08-12',
'2026-08-13',
'2026-08-15',
],
WorkloadPlacement::Start->value => [
'2026-08-10',
'2026-08-11',
'2026-08-12',
'2026-08-13',
],
WorkloadPlacement::Middle->value => [
'2026-08-11',
'2026-08-12',
'2026-08-13',
'2026-08-14',
],
WorkloadPlacement::End->value => [
'2026-08-12',
'2026-08-13',
'2026-08-14',
'2026-08-15',
],
];
$this->assertSame(
['2026-08-10', '2026-08-13', '2026-08-16'],
$this->formattedDates($dates),
);
foreach (WorkloadPlacement::cases() as $placement) {
$dates = $scheduler->scheduledDates(
assignmentCount: 4,
startDate: $this->utc('2026-08-10'),
targetDate: $this->utc('2026-08-15'),
workloadPlacement: $placement,
);
$this->assertSame(
$expectedDates[$placement->value],
$this->formattedDates($dates),
);
}
}
public function test_it_places_one_assignment_at_the_requested_position(): void
{
$scheduler = new EvenDistributionScheduler;
$expectedDates = [
WorkloadPlacement::Spread->value => '2026-08-10',
WorkloadPlacement::Start->value => '2026-08-10',
WorkloadPlacement::Middle->value => '2026-08-12',
WorkloadPlacement::End->value => '2026-08-15',
];
foreach (WorkloadPlacement::cases() as $placement) {
$dates = $scheduler->scheduledDates(
assignmentCount: 1,
startDate: $this->utc('2026-08-10'),
targetDate: $this->utc('2026-08-15'),
workloadPlacement: $placement,
);
$this->assertSame(
[$expectedDates[$placement->value]],
$this->formattedDates($dates),
);
}
}
public function test_it_distributes_even_and_single_day_schedules(): void

View file

@ -156,7 +156,7 @@ class CreateScheduleTest extends TestCase
);
}
public function test_it_spreads_sparse_work_across_the_full_range(): void
public function test_it_defaults_sparse_work_to_spread_across_the_full_range(): void
{
$user = $this->user();
$setRepository = new FakeSetRepository;
@ -192,7 +192,7 @@ class CreateScheduleTest extends TestCase
levelId: $lessonLevel->getId(),
startDate: '2026-08-10',
targetDate: '2026-08-16',
workloadPlacement: 'middle',
workloadPlacement: null,
));
$this->assertSame(