feat(allocation): implement resource allocation feature
- Add AllocationController with CRUD + bulk endpoints - Add AllocationValidationService for capacity/estimate validation - Add AllocationMatrixService for optimized matrix queries - Add AllocationPolicy for authorization - Add AllocationResource for API responses - Add frontend allocationService and matrix UI - Add E2E tests for allocation matrix (20 tests) - Add unit tests for validation service and policies - Fix month format conversion (YYYY-MM to YYYY-MM-01)
This commit is contained in:
@@ -539,3 +539,39 @@ test('4.1.39 Holiday created after initial calculation needs cache invalidation'
|
||||
|
||||
expect($result2['person_days'])->toBe(19.0);
|
||||
});
|
||||
|
||||
test('1.5 batchUpsertAvailability upserts all entries and flushes cache once', function () {
|
||||
$role = Role::factory()->create();
|
||||
$member1 = TeamMember::factory()->create(['role_id' => $role->id]);
|
||||
$member2 = TeamMember::factory()->create(['role_id' => $role->id]);
|
||||
|
||||
$service = app(CapacityService::class);
|
||||
|
||||
$updates = [
|
||||
['team_member_id' => $member1->id, 'date' => '2026-02-03', 'availability' => 0.5],
|
||||
['team_member_id' => $member1->id, 'date' => '2026-02-04', 'availability' => 0],
|
||||
['team_member_id' => $member2->id, 'date' => '2026-02-05', 'availability' => 1],
|
||||
];
|
||||
|
||||
$count = $service->batchUpsertAvailability($updates, '2026-02');
|
||||
|
||||
expect($count)->toBe(3);
|
||||
|
||||
$this->assertDatabaseHas('team_member_daily_availabilities', [
|
||||
'team_member_id' => $member1->id,
|
||||
'date' => '2026-02-03 00:00:00',
|
||||
'availability' => 0.5,
|
||||
]);
|
||||
|
||||
$this->assertDatabaseHas('team_member_daily_availabilities', [
|
||||
'team_member_id' => $member1->id,
|
||||
'date' => '2026-02-04 00:00:00',
|
||||
'availability' => 0,
|
||||
]);
|
||||
|
||||
$this->assertDatabaseHas('team_member_daily_availabilities', [
|
||||
'team_member_id' => $member2->id,
|
||||
'date' => '2026-02-05 00:00:00',
|
||||
'availability' => 1,
|
||||
]);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user