From 3140aa9764716e22a9522b73a360be3407321023 Mon Sep 17 00:00:00 2001 From: Matt McMahand Date: Mon, 20 Oct 2025 13:28:30 -0400 Subject: [PATCH 1/4] add job to scheduler instead of running immediately --- backend/app/core/scheduler.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/backend/app/core/scheduler.py b/backend/app/core/scheduler.py index b9871f0..be47d2f 100644 --- a/backend/app/core/scheduler.py +++ b/backend/app/core/scheduler.py @@ -1,3 +1,5 @@ +from datetime import datetime, timedelta + from apscheduler.schedulers.background import BackgroundScheduler from app.core.database import SessionLocal @@ -42,8 +44,13 @@ def start_scheduler_with_interval(): replace_existing=True, ) if not scheduler.running: - # Run the job immediately once - job() + scheduler.add_job( + job, + "date", + run_date=datetime.now() + timedelta(seconds=5), + id="initial_email_check", + replace_existing=True, + ) scheduler.start() logger.info("Scheduler started.") else: From 67167090824cf2e4ca0d8703ac173c82566d9c19 Mon Sep 17 00:00:00 2001 From: Matt McMahand Date: Mon, 20 Oct 2025 15:45:38 -0400 Subject: [PATCH 2/4] fix test --- backend/app/tests/test_core.py | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/backend/app/tests/test_core.py b/backend/app/tests/test_core.py index 97e9a1d..b370d20 100644 --- a/backend/app/tests/test_core.py +++ b/backend/app/tests/test_core.py @@ -1,3 +1,4 @@ +from datetime import datetime, timedelta from unittest.mock import ANY, MagicMock, patch from sqlalchemy.orm import Session @@ -101,10 +102,14 @@ def test_process_emails(mock_imap, db_session: Session): @patch("app.core.scheduler.job") @patch("app.core.scheduler.SessionLocal") @patch("app.core.scheduler.scheduler") +@patch("app.core.scheduler.datetime") def test_start_scheduler_with_interval( - mock_scheduler, mock_session_local, mock_job, db_session: Session + mock_datetime, mock_scheduler, mock_session_local, mock_job, db_session: Session ): """Test starting the scheduler with an interval.""" + fixed_now = datetime(2025, 10, 20, 12, 0, 0) + mock_datetime.now.return_value = fixed_now + mock_session_local.return_value = db_session mock_scheduler.running = False settings_data = SettingsCreate( @@ -119,11 +124,16 @@ def test_start_scheduler_with_interval( start_scheduler_with_interval() + expected_run_date = fixed_now + timedelta(seconds=5) + mock_scheduler.add_job.assert_called_with( - ANY, "interval", minutes=30, id="email_check_job", replace_existing=True + ANY, + "date", + run_date=expected_run_date, + id="initial_email_check", + replace_existing=True, ) mock_scheduler.start.assert_called_once() - mock_job.assert_called_once() @patch("app.core.scheduler.SessionLocal") From a55e5caa2a34c6fc335c681d0ac6b5809dd14786 Mon Sep 17 00:00:00 2001 From: Matt Date: Mon, 20 Oct 2025 16:45:12 -0400 Subject: [PATCH 3/4] Apply suggestions from code review --- backend/app/core/scheduler.py | 2 +- backend/app/tests/test_core.py | 4 +--- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/backend/app/core/scheduler.py b/backend/app/core/scheduler.py index be47d2f..3be7aca 100644 --- a/backend/app/core/scheduler.py +++ b/backend/app/core/scheduler.py @@ -47,7 +47,7 @@ def start_scheduler_with_interval(): scheduler.add_job( job, "date", - run_date=datetime.now() + timedelta(seconds=5), + run_date=datetime.now(), id="initial_email_check", replace_existing=True, ) diff --git a/backend/app/tests/test_core.py b/backend/app/tests/test_core.py index b370d20..5e3e77f 100644 --- a/backend/app/tests/test_core.py +++ b/backend/app/tests/test_core.py @@ -124,12 +124,10 @@ def test_start_scheduler_with_interval( start_scheduler_with_interval() - expected_run_date = fixed_now + timedelta(seconds=5) - mock_scheduler.add_job.assert_called_with( ANY, "date", - run_date=expected_run_date, + run_date=fixed_now, id="initial_email_check", replace_existing=True, ) From 590e3375ff5301193a16361340685424cdce0f98 Mon Sep 17 00:00:00 2001 From: Matt McMahand Date: Tue, 21 Oct 2025 15:58:11 -0400 Subject: [PATCH 4/4] linting --- backend/app/core/scheduler.py | 2 +- backend/app/tests/test_core.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/app/core/scheduler.py b/backend/app/core/scheduler.py index 3be7aca..0ca6bae 100644 --- a/backend/app/core/scheduler.py +++ b/backend/app/core/scheduler.py @@ -1,4 +1,4 @@ -from datetime import datetime, timedelta +from datetime import datetime from apscheduler.schedulers.background import BackgroundScheduler diff --git a/backend/app/tests/test_core.py b/backend/app/tests/test_core.py index 5e3e77f..1249502 100644 --- a/backend/app/tests/test_core.py +++ b/backend/app/tests/test_core.py @@ -1,4 +1,4 @@ -from datetime import datetime, timedelta +from datetime import datetime from unittest.mock import ANY, MagicMock, patch from sqlalchemy.orm import Session