mirror of
https://github.com/GSA/notifications-api.git
synced 2026-09-11 18:38:14 -04:00
Merge pull request #1797 from GSA/2709-bug-sorting-error-on-activity-page
Updated the job listing query to sort by the most recent activity
This commit is contained in:
+3
-1
@@ -75,7 +75,9 @@ def dao_get_jobs_by_service_id(
|
|||||||
stmt = (
|
stmt = (
|
||||||
select(Job)
|
select(Job)
|
||||||
.where(*query_filter)
|
.where(*query_filter)
|
||||||
.order_by(Job.processing_started.desc(), Job.created_at.desc())
|
.order_by(
|
||||||
|
func.coalesce(Job.processing_started, Job.created_at).desc(), Job.id.desc()
|
||||||
|
)
|
||||||
.limit(page_size)
|
.limit(page_size)
|
||||||
.offset(offset)
|
.offset(offset)
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -209,12 +209,18 @@ def test_get_jobs_for_service_in_processed_at_then_created_at_order(
|
|||||||
),
|
),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
expected_order = sorted(
|
||||||
|
created_jobs,
|
||||||
|
key=lambda job: ((job.processing_started or job.created_at), str(job.id)),
|
||||||
|
reverse=True,
|
||||||
|
)
|
||||||
|
|
||||||
jobs = dao_get_jobs_by_service_id(sample_template.service.id).items
|
jobs = dao_get_jobs_by_service_id(sample_template.service.id).items
|
||||||
|
|
||||||
assert len(jobs) == len(created_jobs)
|
assert len(jobs) == len(expected_order)
|
||||||
|
|
||||||
for index in range(0, len(created_jobs)):
|
for index in range(len(expected_order)):
|
||||||
assert jobs[index].id == created_jobs[index].id
|
assert jobs[index].id == expected_order[index].id
|
||||||
|
|
||||||
|
|
||||||
def test_update_job(sample_job):
|
def test_update_job(sample_job):
|
||||||
@@ -552,3 +558,19 @@ def test_unique_key_on_job_id_and_job_row_number_no_error_if_row_number_for_diff
|
|||||||
job_2 = create_job(template=sample_email_template)
|
job_2 = create_job(template=sample_email_template)
|
||||||
create_notification(job=job_1, job_row_number=0)
|
create_notification(job=job_1, job_row_number=0)
|
||||||
create_notification(job=job_2, job_row_number=0)
|
create_notification(job=job_2, job_row_number=0)
|
||||||
|
|
||||||
|
|
||||||
|
def test_jobs_with_same_activity_time_are_sorted_by_id(sample_template):
|
||||||
|
from datetime import datetime
|
||||||
|
dt = datetime(2023, 1, 1, 12, 0, 0)
|
||||||
|
|
||||||
|
job1 = create_job(sample_template, created_at=dt, processing_started=None)
|
||||||
|
job2 = create_job(sample_template, created_at=dt, processing_started=None)
|
||||||
|
|
||||||
|
if str(job1.id) < str(job2.id):
|
||||||
|
job1, job2 = job2, job1
|
||||||
|
|
||||||
|
jobs = dao_get_jobs_by_service_id(sample_template.service.id).items
|
||||||
|
|
||||||
|
assert jobs[0].id == job1.id
|
||||||
|
assert jobs[1].id == job2.id
|
||||||
|
|||||||
+24
-10
@@ -1043,16 +1043,30 @@ def test_get_jobs_should_retrieve_from_ft_notification_status_for_old_jobs(
|
|||||||
service_id=sample_template.service_id,
|
service_id=sample_template.service_id,
|
||||||
)
|
)
|
||||||
|
|
||||||
assert resp_json["data"][0]["id"] == str(job_3.id)
|
returned_jobs = resp_json["data"]
|
||||||
assert resp_json["data"][0]["statistics"] == []
|
|
||||||
assert resp_json["data"][1]["id"] == str(job_2.id)
|
expected_jobs = [job_3, job_2, job_1]
|
||||||
assert resp_json["data"][1]["statistics"] == [
|
expected_order = sorted(
|
||||||
{"status": NotificationStatus.CREATED, "count": 1},
|
expected_jobs,
|
||||||
]
|
key=lambda job: ((job.processing_started or job.created_at), str(job.id)),
|
||||||
assert resp_json["data"][2]["id"] == str(job_1.id)
|
reverse=True,
|
||||||
assert resp_json["data"][2]["statistics"] == [
|
)
|
||||||
{"status": NotificationStatus.DELIVERED, "count": 6},
|
expected_ids = [str(job.id) for job in expected_order]
|
||||||
]
|
returned_ids = [job["id"] for job in returned_jobs if job["id"] in expected_ids]
|
||||||
|
assert returned_ids == expected_ids
|
||||||
|
|
||||||
|
for job in expected_jobs:
|
||||||
|
idx = returned_ids.index(str(job.id))
|
||||||
|
if job is job_3:
|
||||||
|
assert returned_jobs[idx]["statistics"] == []
|
||||||
|
elif job is job_2:
|
||||||
|
assert returned_jobs[idx]["statistics"] == [
|
||||||
|
{"status": NotificationStatus.CREATED, "count": 1},
|
||||||
|
]
|
||||||
|
elif job is job_1:
|
||||||
|
assert returned_jobs[idx]["statistics"] == [
|
||||||
|
{"status": NotificationStatus.DELIVERED, "count": 6},
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
@freeze_time("2017-07-17 07:17")
|
@freeze_time("2017-07-17 07:17")
|
||||||
|
|||||||
Reference in New Issue
Block a user