Added alert when job.notification_count doesn't match total notification for job

- Added log for when a job starts so that we will know when the processing of a job starts with the number of notifications
- Added dao method to get total notifications for a job id
- Added a test to check whether the number of notifications in the table matches the job notification_count
This commit is contained in:
Ken Tsang
2017-10-10 15:04:55 +01:00
parent 04914d711a
commit dcf0d22d7b
4 changed files with 67 additions and 8 deletions

View File

@@ -360,6 +360,29 @@ def test_should_process_all_sms_job(sample_job_with_placeholdered_template,
assert job.job_status == 'finished'
def test_should_error_log_missing_notifications(
sample_job_with_placeholdered_template, mocker):
multiple_sms = load_example_csv('multiple_sms').strip()
num_phone_numbers_after_header = len(multiple_sms.split('\n')[1:])
sample_job_with_placeholdered_template.notification_count = num_phone_numbers_after_header
mocker.patch('app.celery.tasks.s3.get_job_from_s3', return_value=multiple_sms)
mocker.patch('app.celery.tasks.send_sms.apply_async')
mocker.patch('app.encryption.encrypt', return_value="something_encrypted")
mocker.patch('app.celery.tasks.create_uuid', return_value="uuid")
# deliberately return wrong total notifications to trigger error log
mocker.patch(
'app.celery.tasks.dao_get_total_notifications_for_job_id',
return_value=num_phone_numbers_after_header - 1
)
error_log = mocker.patch('app.celery.tasks.current_app.logger.error')
process_job(sample_job_with_placeholdered_template.id)
job = jobs_dao.dao_get_job_by_id(sample_job_with_placeholdered_template.id)
assert job.job_status == 'error'
assert error_log.called
# -------------- process_row tests -------------- #

View File

@@ -35,6 +35,7 @@ from app.dao.notifications_dao import (
dao_get_potential_notification_statistics_for_day,
dao_get_scheduled_notifications,
dao_get_template_usage,
dao_get_total_notifications_for_job_id,
dao_timeout_notifications,
dao_update_notification,
dao_update_notifications_for_job_to_sent_to_dvla,
@@ -52,7 +53,12 @@ from app.dao.notifications_dao import (
)
from app.dao.services_dao import dao_update_service
from tests.app.db import create_notification, create_api_key, create_reply_to_email
from tests.app.db import (
create_api_key,
create_job,
create_notification,
create_reply_to_email
)
from tests.app.conftest import (
sample_notification,
sample_template,
@@ -1995,3 +2001,13 @@ def test_dao_get_notification_ememail_reply_toail_reply_for_notification(sample_
def test_dao_get_notification_email_reply_for_notification_where_no_mapping(notify_db_session, fake_uuid):
assert dao_get_notification_email_reply_for_notification(fake_uuid) is None
def test_dao_get_total_notifications_for_job_id(sample_job):
job = create_job(sample_job.template)
create_notification(sample_job.template, job=sample_job)
create_notification(sample_job.template, job=sample_job)
create_notification(sample_job.template, job=sample_job)
create_notification(sample_job.template, job=job)
assert dao_get_total_notifications_for_job_id(sample_job.id) == 3