@@ -175,4 +175,50 @@ describe("changing CronJobs", () => {
175175
176176 expect (LuxonDateTime .toMillis (nextTick ))-> toEqual (LuxonDateTime .toMillis (nextAssumedTick ))
177177 })
178+
179+ test ("nextDate returns the next single date" , () => {
180+ let onTick = _ => ()
181+
182+ RescriptJestDateMock .advanceTo (Date .fromString ("2010-01-01T12:00:00.000Z" ))
183+
184+ let job = RescriptCron .CronJob .make (#JsDate (Date .fromString (futureDate )), onTick , ())
185+ let time = RescriptCron .CronTime .make (#CronString ("0 0 12 20 jan *" ), ())
186+
187+ let nextAssumedTick =
188+ LuxonDateTime .fromISO ("2010-01-01T12:00:00.000Z" )-> LuxonDateTime .set ({day : 20 , hour : 12 })
189+
190+ RescriptCron .setTime (job , time )
191+
192+ let nextTick = RescriptCron .nextDate (job )
193+
194+ expect (LuxonDateTime .toMillis (nextTick ))-> toEqual (LuxonDateTime .toMillis (nextAssumedTick ))
195+ })
196+
197+ test ("isActive reflects job start and stop state" , () => {
198+ let onTick = _ => ()
199+
200+ RescriptJestDateMock .advanceTo (Date .fromString (pastDate ))
201+
202+ let job = RescriptCron .CronJob .make (#JsDate (Date .fromString (futureDate )), onTick , ())
203+
204+ expect (RescriptCron .isActive (job ))-> toEqual (false )-> ignore
205+
206+ RescriptCron .start (job )
207+ expect (RescriptCron .isActive (job ))-> toEqual (true )-> ignore
208+
209+ RescriptCron .stop (job )
210+ expect (RescriptCron .isActive (job ))-> toEqual (false )
211+ })
212+ })
213+
214+ describe ("validateCronExpression" , () => {
215+ test ("returns valid for a correct cron expression" , () => {
216+ let result = RescriptCron .validateCronExpression ("0 0 * * *" )
217+ expect (result .valid )-> toEqual (true )
218+ })
219+
220+ test ("returns invalid for a malformed cron expression" , () => {
221+ let result = RescriptCron .validateCronExpression ("not-a-cron" )
222+ expect (result .valid )-> toEqual (false )
223+ })
178224})
0 commit comments