107 : array
108 {
109 return [
110 'Manual Run is Always Due' => [
112 true,
113 JobScheduleType::DAILY,
114 null,
115 JobScheduleType::DAILY,
116 null
117 ),
118 true,
119 null,
120 JobScheduleType::DAILY,
121 null,
123 ],
124 'Job Without Any Run is Always Due' => [
126 true,
127 JobScheduleType::DAILY,
128 null,
129 JobScheduleType::DAILY,
130 null
131 ),
132 false,
133 null,
134 JobScheduleType::DAILY,
135 null,
137 ],
138 'Daily Schedule / Did not run Today' => [
140 true,
141 JobScheduleType::DAILY,
142 null,
143 JobScheduleType::DAILY,
144 null
145 ),
146 false,
147 function (): DateTimeImmutable {
148 self::$now = new DateTimeImmutable('@' . time());
149
150 return self::$now->modify('-1 day');
151 },
152 JobScheduleType::DAILY,
153 null,
155 ],
156 'Daily Schedule / Did run Today' => [
158 true,
159 JobScheduleType::DAILY,
160 null,
161 JobScheduleType::DAILY,
162 null
163 ),
164 false,
165 function (): DateTimeImmutable {
166 self::$now = new DateTimeImmutable('@' . time());
167
169 },
170 JobScheduleType::DAILY,
171 null,
172 false
173 ],
174 'Weekly Schedule / Did not run this Week' => [
176 true,
177 JobScheduleType::WEEKLY,
178 null,
179 JobScheduleType::WEEKLY,
180 null
181 ),
182 false,
183 function (): DateTimeImmutable {
184 self::$now = new DateTimeImmutable('@' . time());
185
186 return self::$now->modify('-1 week');
187 },
188 JobScheduleType::WEEKLY,
189 null,
191 ],
192 'Weekly Schedule / Did run this Week' => [
194 true,
195 JobScheduleType::WEEKLY,
196 null,
197 JobScheduleType::WEEKLY,
198 null
199 ),
200 false,
201 function (): DateTimeImmutable {
202 self::$now = new DateTimeImmutable('@' . time());
203
204 return self::$now->modify('monday this week');
205 },
206 JobScheduleType::WEEKLY,
207 null,
208 false
209 ],
210 'Monthly Schedule / Did not run this Month' => [
212 true,
213 JobScheduleType::MONTHLY,
214 null,
215 JobScheduleType::MONTHLY,
216 null
217 ),
218 false,
219 function (): DateTimeImmutable {
220 self::$now = new DateTimeImmutable('@' . time());
221
222 return self::$now->modify('last day of last month');
223 },
224 JobScheduleType::MONTHLY,
225 null,
227 ],
228 'Monthly Schedule / Did run this Month' => [
230 true,
231 JobScheduleType::MONTHLY,
232 null,
233 JobScheduleType::MONTHLY,
234 null
235 ),
236 false,
237 function (): DateTimeImmutable {
238 self::$now = new DateTimeImmutable('@' . time());
239
240 return self::$now->modify('first day of this month');
241 },
242 JobScheduleType::MONTHLY,
243 null,
244 false
245 ],
246 'Yearly Schedule / Did not run this Year' => [
248 true,
250 null,
252 null
253 ),
254 false,
255 function (): DateTimeImmutable {
256 self::$now = new DateTimeImmutable('@' . time());
257
258 return self::$now->modify('-1 year');
259 },
261 null,
263 ],
264 'Yearly Schedule / Did run this Year' => [
266 true,
268 null,
270 null
271 ),
272 false,
273 function (): DateTimeImmutable {
274 self::$now = new DateTimeImmutable('@' . time());
275
276 return self::$now->modify('first day of January this year');
277 },
279 null,
280 false
281 ],
282 'Quarterly Schedule / Did not run this Quarter' => [
284 true,
285 JobScheduleType::QUARTERLY,
286 null,
287 JobScheduleType::QUARTERLY,
288 null
289 ),
290 false,
291 function (): DateTimeImmutable {
292 self::$now = new DateTimeImmutable('@' . time());
293
294 $offset = (((
int) self::$now->format(
'n')) - 1) % 3;
295 self::$this_quarter_start = self::$now->modify("first day of -$offset month midnight");
296
297 return self::$this_quarter_start->modify('-1 seconds');
298 },
299 JobScheduleType::QUARTERLY,
300 null,
302 ],
303 'Quarterly Schedule / Did run this Quarter' => [
305 true,
306 JobScheduleType::QUARTERLY,
307 null,
308 JobScheduleType::QUARTERLY,
309 null
310 ),
311 false,
312 function (): DateTimeImmutable {
313 self::$now = new DateTimeImmutable('@' . time());
314
315 $offset = (((
int) self::$now->format(
'n')) - 1) % 3;
316 self::$this_quarter_start = self::$now->modify("first day of -$offset month midnight");
317
318 return self::$this_quarter_start->modify('+30 seconds');
319 },
320 JobScheduleType::QUARTERLY,
321 null,
322 false
323 ],
324 'Minutely Schedule / Did not run this Minute' => [
326 true,
327 JobScheduleType::IN_MINUTES,
328 1,
329 JobScheduleType::IN_MINUTES,
330 1
331 ),
332 false,
333 function (): DateTimeImmutable {
334 self::$now = new DateTimeImmutable('@' . time());
335
336 return self::$now->modify('-1 minute');
337 },
338 JobScheduleType::IN_MINUTES,
339 1,
341 ],
342 'Minutely Schedule / Did run this Minute' => [
344 true,
345 JobScheduleType::IN_MINUTES,
346 1,
347 JobScheduleType::IN_MINUTES,
348 1
349 ),
350 false,
351 function (): DateTimeImmutable {
352 self::$now = new DateTimeImmutable('@' . time());
353
354 return self::$now->modify('-30 seconds');
355 },
356 JobScheduleType::IN_MINUTES,
357 1,
358 false
359 ],
360 'Hourly Schedule / Did not run this Hour' => [
362 true,
363 JobScheduleType::IN_HOURS,
364 7,
365 JobScheduleType::IN_HOURS,
366 7
367 ),
368 false,
369 function (): DateTimeImmutable {
370 self::$now = new DateTimeImmutable('@' . time());
371
372 return self::$now->modify('-7 hours');
373 },
374 JobScheduleType::IN_HOURS,
375 7,
377 ],
378 'Hourly Schedule / Did run this Hour' => [
380 true,
381 JobScheduleType::IN_HOURS,
382 7,
383 JobScheduleType::IN_HOURS,
384 7
385 ),
386 false,
387 function (): DateTimeImmutable {
388 self::$now = new DateTimeImmutable('@' . time());
389
390 return self::$now->modify('-7 hours +30 seconds');
391 },
392 JobScheduleType::IN_HOURS,
393 7,
394 false
395 ],
396 'Every 5 Days Schedule / Did not run for 5 Days' => [
398 true,
399 JobScheduleType::IN_DAYS,
400 5,
401 JobScheduleType::IN_DAYS,
402 5
403 ),
404 false,
405 function (): DateTimeImmutable {
406 self::$now = new DateTimeImmutable('@' . time());
407
408 return self::$now->modify('-5 days');
409 },
410 JobScheduleType::IN_DAYS,
411 5,
413 ],
414 'Every 5 Days Schedule / Did run withing the last 5 Days' => [
416 true,
417 JobScheduleType::IN_DAYS,
418 5,
419 JobScheduleType::IN_DAYS,
420 5
421 ),
422 false,
423 function (): DateTimeImmutable {
424 self::$now = new DateTimeImmutable('@' . time());
425
426 return self::$now->modify('-4 days');
427 },
428 JobScheduleType::IN_DAYS,
429 5,
430 false
431 ]
432 ];
433 }
static getJob(bool $has_flexible_schedule, JobScheduleType $default_schedule_type, ?int $default_schedule_value, JobScheduleType $schedule_type, ?int $schedule_value)
static DateTimeImmutable $now