@@ -161,3 +161,64 @@ async def try_sleep(ctx):
161161 assert worker .jobs_complete == 1
162162 assert worker .jobs_retried == 1
163163 assert worker .jobs_failed == 0
164+
165+
166+ async def barfoo (ctx ):
167+ """In order to test cron job singleton, we must have two different functions when bursting"""
168+ return 24
169+
170+
171+ async def test_job_custom_id (worker ):
172+ """
173+ Test that two different functions with the same job_id, will only be executed once.
174+ """
175+ worker : Worker = worker (
176+ cron_jobs = [
177+ cron (barfoo , minute = 10 , run_at_startup = True , job_id = 'singleton_job' ),
178+ cron (foobar , minute = 20 , run_at_startup = True , job_id = 'singleton_job' ),
179+ ],
180+ poll_delay = 0.01 ,
181+ )
182+ await worker .main ()
183+
184+ assert worker .jobs_complete == 1
185+ assert worker .jobs_failed == 0
186+ assert worker .jobs_retried == 0
187+
188+
189+ async def test_job_same_function_different_id (worker ):
190+ """
191+ Set a different ID on the same function job, which runs at startup and ensure both functions are run.
192+ See next test for behaviour without setting job_id.
193+ """
194+ worker : Worker = worker (
195+ cron_jobs = [
196+ cron (foobar , minute = 10 , run_at_startup = True , job_id = 'custom_id' ),
197+ cron (foobar , minute = 20 , run_at_startup = True , job_id = 'custom_id2' ),
198+ ],
199+ poll_delay = 0.01 ,
200+ )
201+ await worker .main ()
202+
203+ assert worker .jobs_complete == 2
204+ assert worker .jobs_failed == 0
205+ assert worker .jobs_retried == 0
206+
207+
208+ async def test_run_at_startup_no_id_only_runs_once (worker ):
209+ """
210+ Without a custom job ID, and `run_at_startup=True` on two jobs, it will only execute once, since the job_id
211+ will be equal, and should only run once.
212+ """
213+ worker : Worker = worker (
214+ cron_jobs = [
215+ cron (foobar , minute = 10 , run_at_startup = True ),
216+ cron (foobar , minute = 20 , run_at_startup = True ),
217+ ],
218+ poll_delay = 0.01 ,
219+ )
220+ await worker .main ()
221+
222+ assert worker .jobs_complete == 1
223+ assert worker .jobs_failed == 0
224+ assert worker .jobs_retried == 0
0 commit comments