50 lines
1.4 KiB
Python
50 lines
1.4 KiB
Python
import datetime as dt
|
|
from cron_next import parse
|
|
|
|
def test_every_minute():
|
|
c = parse("* * * * *")
|
|
t = dt.datetime(2026,1,1,0,0)
|
|
assert c.next(t) == dt.datetime(2026,1,1,0,1)
|
|
|
|
def test_specific():
|
|
c = parse("30 14 * * *")
|
|
t = dt.datetime(2026,1,1,10,0)
|
|
assert c.next(t) == dt.datetime(2026,1,1,14,30)
|
|
|
|
def test_dow_restricted():
|
|
# Mondays at 09:00
|
|
c = parse("0 9 * * 1")
|
|
# 2026-01-05 is Monday
|
|
t = dt.datetime(2026,1,4,10,0)
|
|
assert c.next(t) == dt.datetime(2026,1,5,9,0)
|
|
|
|
def test_dom_and_dow_or():
|
|
# dom=1 OR dow=monday
|
|
c = parse("0 0 1 * 1")
|
|
# 2026-02-01 is Sunday; next monday is Feb 2; but dom=1 matches Feb1 midnight already? after Jan 2 00:00
|
|
t = dt.datetime(2026,1,2,0,1)
|
|
# next match: Feb1 00:00 (dom) since before Monday Feb2
|
|
assert c.next(t) == dt.datetime(2026,1,5,0,0)
|
|
|
|
def test_step_and_range():
|
|
c = parse("*/15 9-17 * * *")
|
|
t = dt.datetime(2026,1,1,8,50)
|
|
assert c.next(t) == dt.datetime(2026,1,1,9,0)
|
|
|
|
def test_names():
|
|
c = parse("0 0 1 jan *")
|
|
t = dt.datetime(2025,6,1,0,0)
|
|
assert c.next(t) == dt.datetime(2026,1,1,0,0)
|
|
|
|
def test_invalid_fields():
|
|
try:
|
|
parse("* * * *")
|
|
assert False
|
|
except ValueError:
|
|
pass
|
|
|
|
def test_dow_sunday_7():
|
|
c = parse("0 0 * * 7")
|
|
# sunday
|
|
t = dt.datetime(2026,1,3,0,1) # sat
|
|
assert c.next(t) == dt.datetime(2026,1,4,0,0) |