61 lines
4.0 KiB
PHP
61 lines
4.0 KiB
PHP
<?php
|
|
|
|
it('registers an opening-time self-serve cleaner relay activation cron', function (): void {
|
|
$tasks = require app_path('modules/selfserve/cron/tasks.php');
|
|
|
|
expect($tasks)->toHaveCount(1);
|
|
expect($tasks[0]['id'])->toBe('selfserve.activate_opening_cleaner_relays');
|
|
expect($tasks[0]['legacy_name'])->toBe('SelfserveOpeningRelayActivationCron');
|
|
expect($tasks[0]['handler'])->toBe('SelfserveOpeningRelayActivationCron');
|
|
expect($tasks[0]['name'])->toContain('disable department self-serve');
|
|
expect($tasks[0]['description'])->toContain('every configured lane relay');
|
|
expect($tasks[0]['schedule'])->toBe(['type' => 'interval', 'seconds' => 60]);
|
|
});
|
|
|
|
it('disables department self-serve and restores staffed relay defaults after department opening time', function (): void {
|
|
$cronContent = file_get_contents(app_path('cron/Cron.php'));
|
|
|
|
expect($cronContent)->not->toBeFalse();
|
|
expect($cronContent)->toContain('function SelfserveOpeningRelayActivationCron(): array');
|
|
expect($cronContent)->toContain("new DateTimeZone('Europe/Copenhagen')");
|
|
expect($cronContent)->toContain('department_time_bookings_opening_hours');
|
|
expect($cronContent)->toContain("dv.variable = 'selfserve_enabled'");
|
|
expect($cronContent)->toContain("->set('selfserve_enabled', 'false')");
|
|
expect($cronContent)->toContain('use objects\department_variables_o;');
|
|
expect($cronContent)->toContain('selfserveActivateStaffedDefaultRelaysForDepartment');
|
|
expect($cronContent)->toContain('$nowSeconds >= $opensAtSeconds && $nowSeconds < $closesAtSeconds');
|
|
expect($cronContent)->toContain('selfserveOpeningCleanerRelayOvernightCarryoverActive');
|
|
expect($cronContent)->toContain('$previousDate = $now->modify(\'-1 day\')');
|
|
expect($cronContent)->not->toContain('if (selfserveOpeningCleanerRelayActivationAlreadyHandled($cacheKey))');
|
|
expect($cronContent)->not->toContain('if (!$departmentLane->isSelfServeEnabled())');
|
|
expect($cronContent)->toContain('throw $throwable;');
|
|
expect($cronContent)->toContain('department_variables_o::withSelfServeTransitionLock');
|
|
expect(strpos($cronContent, 'selfserveActivateStaffedDefaultRelaysForDepartment($departmentId)'))
|
|
->toBeLessThan(strpos($cronContent, 'selfserveDisableDepartmentSelfServeForOpening($departmentId)'));
|
|
expect($cronContent)->toContain('setMachineProgramPickerRelayStatusForDepartmentOperation(true)');
|
|
expect($cronContent)->toContain('setMachineCleanerRelayStatusForDepartmentOperation(true)');
|
|
expect($cronContent)->toContain('setMachineRelayStatusForDepartmentOperation(true)');
|
|
expect($cronContent)->toContain('selfserve:opening-cleaner-relays:');
|
|
});
|
|
|
|
it('exposes next self-serve auto deactivation metadata from the department endpoint', function (): void {
|
|
$routeContent = file_get_contents(app_path('routes/departmentsRoute.php'));
|
|
$openingHoursContent = file_get_contents(app_path('objects/department_time_bookings_opening_hours_o.php'));
|
|
|
|
expect($routeContent)->not->toBeFalse();
|
|
expect($openingHoursContent)->not->toBeFalse();
|
|
expect($routeContent)->toContain('buildDepartmentSelfServeEnabledPayload');
|
|
expect($routeContent)->toContain('selectExistingByDepartment($departmentId)');
|
|
expect($routeContent)->toContain("'auto_deactivation'");
|
|
expect($routeContent)->toContain("'label' => \$nextDeactivationAt === null");
|
|
expect($routeContent)->toContain("'NEVER'");
|
|
expect($openingHoursContent)->toContain('function getNextOpeningStart(DateTimeImmutable $now): ?DateTimeImmutable');
|
|
expect($openingHoursContent)->toContain('$openingStart === null');
|
|
expect($openingHoursContent)->toContain('$openingEnd === null');
|
|
expect($openingHoursContent)->toContain('$openingStart === $openingEnd');
|
|
expect($openingHoursContent)->toContain('$dayOffset <= 7');
|
|
expect($openingHoursContent)->toContain('$previousWeekdayName');
|
|
expect($openingHoursContent)->toContain('return $now;');
|
|
expect(file_get_contents(app_path('openapi.yaml')))->toContain('auto_deactivation:');
|
|
});
|