mirror of
https://github.com/GSA/notifications-api.git
synced 2026-08-17 21:18:49 -04:00
Return count of notifications in the database for a job
When we cancel a job, we need to check if all notifications are already in the database. So far, we were querying for all notification objects in the database and counting them in admin app, which runs into pagination problems for large jobs, and could time out for very large jobs.
This commit is contained in:
@@ -15,6 +15,7 @@ from app.dao.notifications_dao import (
|
||||
dao_get_last_notification_added_for_job_id,
|
||||
dao_get_last_template_usage,
|
||||
dao_get_notifications_by_to_field,
|
||||
dao_get_notification_count_for_job_id,
|
||||
dao_get_scheduled_notifications,
|
||||
dao_timeout_notifications,
|
||||
dao_update_notification,
|
||||
@@ -554,6 +555,27 @@ def test_get_all_notifications_for_job_by_status(sample_job):
|
||||
assert len(notifications(filter_dict={'status': NOTIFICATION_STATUS_TYPES[:3]}).items) == 3
|
||||
|
||||
|
||||
def test_dao_get_notification_count_for_job_id(notify_db_session, notify_db):
|
||||
service = create_service()
|
||||
template = create_template(service)
|
||||
job = create_job(template, notification_count=3)
|
||||
for i in range(3):
|
||||
create_notification(job=job)
|
||||
|
||||
create_notification(template)
|
||||
|
||||
assert dao_get_notification_count_for_job_id(job.id) == 3
|
||||
|
||||
|
||||
def test_dao_get_notification_count_for_job_id_only_finds_notification_already_in_db(notify_db_session, notify_db):
|
||||
service = create_service()
|
||||
template = create_template(service)
|
||||
job = create_job(template, notification_count=3)
|
||||
create_notification(template)
|
||||
|
||||
assert dao_get_notification_count_for_job_id(job.id) == 0
|
||||
|
||||
|
||||
def test_update_notification_sets_status(sample_notification):
|
||||
assert sample_notification.status == 'created'
|
||||
sample_notification.status = 'failed'
|
||||
|
||||
@@ -563,6 +563,14 @@ def test_get_all_notifications_for_job_returns_correct_format(
|
||||
assert resp['notifications'][0]['status'] == sample_notification_with_job.status
|
||||
|
||||
|
||||
def test_get_notification_count_for_job_id(admin_request, mocker):
|
||||
mock_dao = mocker.patch('app.job.rest.dao_get_notification_count_for_job_id', return_value=3)
|
||||
job_id = uuid.uuid4()
|
||||
response = admin_request.get('job.get_notification_count_for_job_id', service_id=uuid.uuid4(), job_id=job_id)
|
||||
mock_dao.assert_called_once_with(str(job_id))
|
||||
assert response["count"] == 3
|
||||
|
||||
|
||||
def test_get_job_by_id(admin_request, sample_job):
|
||||
job_id = str(sample_job.id)
|
||||
service_id = sample_job.service.id
|
||||
|
||||
Reference in New Issue
Block a user