events()) ->filter(fn (Event $event): bool => ! str_contains((string) $event->command, 'inspire')) ->values() ->all(); } function scheduledName(Event $event): string { return preg_replace('/^.*artisan[\'"]?\s+/', '', (string) $event->command) ?: (string) $event->description; } test('every scheduled task releases its overlap lock well before a day', function () { $events = scheduledEvents(); expect($events)->not->toBeEmpty(); foreach ($events as $event) { expect($event->withoutOverlapping)->toBeTrue(scheduledName($event).' ohne withoutOverlapping') ->and($event->expiresAt)->toBeLessThan(1440, scheduledName($event).' hält die Sperre 24 h'); } }); test('the frequent tasks unlock within their interval window', function () { $expires = collect(scheduledEvents())->mapWithKeys(fn (Event $event): array => [scheduledName($event) => $event->expiresAt]); expect($expires->first(fn ($minutes, string $name): bool => str_starts_with($name, 'press-releases:publish-scheduled')))->toBe(10) ->and($expires->first(fn ($minutes, string $name): bool => str_starts_with($name, 'press-releases:aggregate-views')))->toBe(15); }); test('no two daily tasks start in the same minute', function () { $daily = collect(scheduledEvents()) ->filter(fn (Event $event): bool => preg_match('/^\d+ \d+ \* \* \*$/', $event->expression) === 1) ->groupBy(fn (Event $event): string => $event->expression) ->filter(fn ($group): bool => $group->count() > 1) ->map(fn ($group) => $group->map(fn (Event $event): string => scheduledName($event))->all()); expect($daily->all())->toBe([]); });