mirror of
https://github.com/GSA/notifications-api.git
synced 2026-08-16 20:48:37 -04:00
Updated date query so that the created_at date is truncated so that we get all jobs created number of days requested.
This commit is contained in:
@@ -28,3 +28,8 @@ class DAOClass(object):
|
|||||||
db.session.delete(inst)
|
db.session.delete(inst)
|
||||||
if _commit:
|
if _commit:
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
|
|
||||||
|
|
||||||
|
def days_ago(number_of_days):
|
||||||
|
from datetime import date, timedelta
|
||||||
|
return date.today() - timedelta(days=number_of_days)
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
from datetime import date, timedelta
|
from datetime import date, timedelta
|
||||||
|
|
||||||
from sqlalchemy import desc
|
from sqlalchemy import desc, cast, Date as sql_date
|
||||||
from app import db
|
from app import db
|
||||||
|
from app.dao import days_ago
|
||||||
from app.models import Job
|
from app.models import Job
|
||||||
|
|
||||||
|
|
||||||
@@ -12,7 +13,7 @@ def dao_get_job_by_service_id_and_job_id(service_id, job_id):
|
|||||||
def dao_get_jobs_by_service_id(service_id, limit_days=None):
|
def dao_get_jobs_by_service_id(service_id, limit_days=None):
|
||||||
query_filter = [Job.service_id == service_id]
|
query_filter = [Job.service_id == service_id]
|
||||||
if limit_days is not None:
|
if limit_days is not None:
|
||||||
query_filter.append(Job.created_at >= _days_ago(limit_days))
|
query_filter.append(cast(Job.created_at, sql_date) >= days_ago(limit_days))
|
||||||
return Job.query.filter(*query_filter).order_by(desc(Job.created_at)).all()
|
return Job.query.filter(*query_filter).order_by(desc(Job.created_at)).all()
|
||||||
|
|
||||||
|
|
||||||
@@ -28,7 +29,3 @@ def dao_create_job(job):
|
|||||||
def dao_update_job(job):
|
def dao_update_job(job):
|
||||||
db.session.add(job)
|
db.session.add(job)
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
|
|
||||||
|
|
||||||
def _days_ago(number_of_days):
|
|
||||||
return date.today() - timedelta(days=number_of_days)
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
from sqlalchemy import (desc, func, Integer, and_, or_, asc)
|
from sqlalchemy import (desc, func, Integer, or_, asc)
|
||||||
from sqlalchemy.sql.expression import cast
|
from sqlalchemy.sql.expression import cast
|
||||||
|
|
||||||
from datetime import (
|
from datetime import (
|
||||||
@@ -11,6 +11,7 @@ from flask import current_app
|
|||||||
from werkzeug.datastructures import MultiDict
|
from werkzeug.datastructures import MultiDict
|
||||||
|
|
||||||
from app import db
|
from app import db
|
||||||
|
from app.dao import days_ago
|
||||||
from app.models import (
|
from app.models import (
|
||||||
Service,
|
Service,
|
||||||
Notification,
|
Notification,
|
||||||
@@ -337,7 +338,3 @@ def delete_notifications_created_more_than_a_week_ago(status):
|
|||||||
).delete(synchronize_session='fetch')
|
).delete(synchronize_session='fetch')
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
return deleted
|
return deleted
|
||||||
|
|
||||||
|
|
||||||
def days_ago(number_of_days):
|
|
||||||
return date.today() - timedelta(days=number_of_days)
|
|
||||||
|
|||||||
@@ -64,7 +64,7 @@ def test_get_jobs_for_service(notify_db, notify_db_session, sample_template):
|
|||||||
assert one_job_from_db != other_job_from_db
|
assert one_job_from_db != other_job_from_db
|
||||||
|
|
||||||
|
|
||||||
def test_get_jobs_for_service(notify_db, notify_db_session, sample_template):
|
def test_get_jobs_for_service_with_limit_days_param(notify_db, notify_db_session, sample_template):
|
||||||
from tests.app.conftest import sample_job as create_job
|
from tests.app.conftest import sample_job as create_job
|
||||||
|
|
||||||
one_job = create_job(notify_db, notify_db_session, sample_template.service, sample_template)
|
one_job = create_job(notify_db, notify_db_session, sample_template.service, sample_template)
|
||||||
@@ -83,6 +83,27 @@ def test_get_jobs_for_service(notify_db, notify_db_session, sample_template):
|
|||||||
assert old_job not in jobs_limit_days
|
assert old_job not in jobs_limit_days
|
||||||
|
|
||||||
|
|
||||||
|
def test_get_jobs_for_service_with_limit_days_edge_case(notify_db, notify_db_session, sample_template):
|
||||||
|
from tests.app.conftest import sample_job as create_job
|
||||||
|
|
||||||
|
one_job = create_job(notify_db, notify_db_session, sample_template.service, sample_template)
|
||||||
|
job_two = create_job(notify_db, notify_db_session, sample_template.service, sample_template,
|
||||||
|
created_at=(datetime.now() - timedelta(days=7)).date())
|
||||||
|
one_second_after_midnight = datetime.combine((datetime.now() - timedelta(days=7)).date(),
|
||||||
|
datetime.strptime("000001", "%H%M%S").time())
|
||||||
|
just_after_midnight_job = create_job(notify_db, notify_db_session, sample_template.service, sample_template,
|
||||||
|
created_at=one_second_after_midnight)
|
||||||
|
job_eight_days_old = create_job(notify_db, notify_db_session, sample_template.service, sample_template,
|
||||||
|
created_at=datetime.now() - timedelta(days=8))
|
||||||
|
|
||||||
|
jobs_limit_days = dao_get_jobs_by_service_id(one_job.service_id, limit_days=7)
|
||||||
|
assert len(jobs_limit_days) == 3
|
||||||
|
assert one_job in jobs_limit_days
|
||||||
|
assert job_two in jobs_limit_days
|
||||||
|
assert just_after_midnight_job in jobs_limit_days
|
||||||
|
assert job_eight_days_old not in jobs_limit_days
|
||||||
|
|
||||||
|
|
||||||
def test_get_jobs_for_service_in_created_at_order(notify_db, notify_db_session, sample_template):
|
def test_get_jobs_for_service_in_created_at_order(notify_db, notify_db_session, sample_template):
|
||||||
from tests.app.conftest import sample_job as create_job
|
from tests.app.conftest import sample_job as create_job
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user