From 0574bccd90871a0e8aeaa2f5f558faccca699cbe Mon Sep 17 00:00:00 2001 From: Andrew Date: Thu, 26 Sep 2024 16:52:09 -0300 Subject: [PATCH] Update date in `dao_get_jobs_by_service_id` (#2300) * fix(dao_get_jobs_by_service_id): use util function to calculate query time frame * chore: add tests for `dao_get_jobs_by_service_id` * chore: formatting * fix: update tests * fix(tests): add some 00:00 and 23:59 timestamps to the test to ensure no rogue jobs are slipping in --------- Co-authored-by: Jumana B --- app/dao/jobs_dao.py | 5 +++-- tests/app/dao/test_jobs_dao.py | 19 ++++++++++++------- tests/app/job/test_rest.py | 4 +++- 3 files changed, 18 insertions(+), 10 deletions(-) diff --git a/app/dao/jobs_dao.py b/app/dao/jobs_dao.py index 28a8b1f15d..969aef8ef0 100644 --- a/app/dao/jobs_dao.py +++ b/app/dao/jobs_dao.py @@ -12,6 +12,7 @@ from app import db from app.dao.dao_utils import transactional +from app.dao.date_util import get_query_date_based_on_retention_period from app.dao.templates_dao import dao_get_template_by_id from app.models import ( JOB_STATUS_CANCELLED, @@ -28,7 +29,6 @@ ServiceDataRetention, Template, ) -from app.utils import midnight_n_days_ago @statsd(namespace="dao") @@ -58,7 +58,8 @@ def dao_get_jobs_by_service_id(service_id, limit_days=None, page=1, page_size=50 Job.original_file_name != current_app.config["ONE_OFF_MESSAGE_FILENAME"], ] if limit_days is not None: - query_filter.append(Job.created_at >= midnight_n_days_ago(limit_days)) + query_filter.append(Job.created_at > get_query_date_based_on_retention_period(limit_days)) + if statuses is not None and statuses != [""]: query_filter.append(Job.job_status.in_(statuses)) return ( diff --git a/tests/app/dao/test_jobs_dao.py b/tests/app/dao/test_jobs_dao.py index 58e3007739..d599360a9f 100644 --- a/tests/app/dao/test_jobs_dao.py +++ b/tests/app/dao/test_jobs_dao.py @@ -160,18 +160,23 @@ def test_get_jobs_for_service_with_limit_days_param(sample_template): assert old_job not in jobs_limit_days -@freeze_time("2017-06-10") -# This test assumes the local timezone is EST +@freeze_time("2024-09-25 12:25:00") def test_get_jobs_for_service_with_limit_days_edge_case(sample_template): one_job = create_job(sample_template) - just_after_midnight_job = create_job(sample_template, created_at=datetime(2017, 6, 3, 4, 0, 1)) - just_before_midnight_job = create_job(sample_template, created_at=datetime(2017, 6, 3, 3, 59, 0)) + # create 2 jobs for each day of the last 10 days + for i in range(1, 11): + create_job(sample_template, created_at=datetime(2024, 9, 25 - i, 0, 0, 0)) + create_job(sample_template, created_at=datetime(2024, 9, 25 - i, 23, 59, 59)) + + too_old_job = create_job(sample_template, created_at=datetime(2024, 9, 18, 0, 1, 0)) + just_right_job = create_job(sample_template, created_at=datetime(2024, 9, 19, 0, 0, 0)) jobs_limit_days = dao_get_jobs_by_service_id(one_job.service_id, limit_days=7).items - assert len(jobs_limit_days) == 2 + + assert len(jobs_limit_days) == 14 # 2 for one for each day: today (1) + 12 the last 6 days (12) + one for just_right_job (1) assert one_job in jobs_limit_days - assert just_after_midnight_job in jobs_limit_days - assert just_before_midnight_job not in jobs_limit_days + assert just_right_job in jobs_limit_days + assert too_old_job not in jobs_limit_days def test_get_jobs_for_service_in_processed_at_then_created_at_order(notify_db, notify_db_session, sample_template): diff --git a/tests/app/job/test_rest.py b/tests/app/job/test_rest.py index 338d3a5d84..6a49c8ce63 100644 --- a/tests/app/job/test_rest.py +++ b/tests/app/job/test_rest.py @@ -751,7 +751,9 @@ def test_get_jobs_with_limit_days(admin_request, sample_template): limit_days=7, ) - assert len(resp_json["data"]) == 2 + # get_jobs_by_service should return data from the current day (Monday 9th) and the previous 6 days (Tuesday 3rd) + # so only 1 job should be returned + assert len(resp_json["data"]) == 1 def test_get_jobs_should_return_statistics(admin_request, sample_template):