def test_service_jobs(db): queue_email("sender_name", "sender_email", "recipient", "subject", "plain", "html") # we create this HitSleep exception here, and mock out the normal sleep(1) in the infinite loop to instead raise # this. that allows us to conveniently get out of the infinite loop and know we had no more jobs left class HitSleep(Exception): pass # the mock `sleep` function that instead raises the aforementioned exception def raising_sleep(seconds): raise HitSleep() with pytest.raises(HitSleep): with patch("couchers.jobs.worker.sleep", raising_sleep): service_jobs() with session_scope() as session: assert (session.execute( select(func.count()).select_from(BackgroundJob).where( BackgroundJob.state == BackgroundJobState.completed)).scalar_one() == 1) assert (session.execute( select(func.count()).select_from(BackgroundJob).where( BackgroundJob.state != BackgroundJobState.completed)). scalar_one() == 0)
def test_email_job(db): queue_email("sender_name", "sender_email", "recipient", "subject", "plain", "html") def mock_print_dev_email(sender_name, sender_email, recipient, subject, plain, html): assert sender_name == "sender_name" assert sender_email == "sender_email" assert recipient == "recipient" assert subject == "subject" assert plain == "plain" assert html == "html" return print_dev_email(sender_name, sender_email, recipient, subject, plain, html) with patch("couchers.jobs.handlers.print_dev_email", mock_print_dev_email): process_job() with session_scope() as session: assert (session.execute( select(func.count()).select_from(BackgroundJob).where( BackgroundJob.state == BackgroundJobState.completed)).scalar_one() == 1) assert (session.execute( select(func.count()).select_from(BackgroundJob).where( BackgroundJob.state != BackgroundJobState.completed)). scalar_one() == 0)
def test_email_job(db): queue_email("sender_name", "sender_email", "recipient", "subject", "plain", "html") def mock_print_dev_email(sender_name, sender_email, recipient, subject, plain, html): assert sender_name == "sender_name" assert sender_email == "sender_email" assert recipient == "recipient" assert subject == "subject" assert plain == "plain" assert html == "html" return print_dev_email(sender_name, sender_email, recipient, subject, plain, html) with patch("couchers.jobs.handlers.print_dev_email", mock_print_dev_email): process_job() with session_scope() as session: assert session.query(BackgroundJob).filter( BackgroundJob.state == BackgroundJobState.completed).count() == 1 assert session.query(BackgroundJob).filter( BackgroundJob.state != BackgroundJobState.completed).count() == 0