mirror of
https://github.com/GSA/notifications-api.git
synced 2026-08-18 05:28:49 -04:00
Merge branch 'master' into permanent-failure-firetext
This commit is contained in:
@@ -281,7 +281,7 @@ def sample_email_job(notify_db,
|
||||
service=service)
|
||||
job_id = uuid.uuid4()
|
||||
data = {
|
||||
'id': uuid.uuid4(),
|
||||
'id': job_id,
|
||||
'service_id': service.id,
|
||||
'service': service,
|
||||
'template_id': template.id,
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
from datetime import datetime
|
||||
from datetime import (datetime, timedelta)
|
||||
import uuid
|
||||
|
||||
from app.dao.jobs_dao import (
|
||||
@@ -31,6 +31,8 @@ def test_create_job(sample_template):
|
||||
assert Job.query.count() == 1
|
||||
job_from_db = Job.query.get(job_id)
|
||||
assert job == job_from_db
|
||||
assert job_from_db.notifications_delivered == 0
|
||||
assert job_from_db.notifications_failed == 0
|
||||
|
||||
|
||||
def test_get_job_by_id(sample_job):
|
||||
@@ -64,6 +66,46 @@ def test_get_jobs_for_service(notify_db, notify_db_session, sample_template):
|
||||
assert one_job_from_db != other_job_from_db
|
||||
|
||||
|
||||
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
|
||||
|
||||
one_job = create_job(notify_db, notify_db_session, sample_template.service, sample_template)
|
||||
old_job = create_job(notify_db, notify_db_session, sample_template.service, sample_template,
|
||||
created_at=datetime.now() - timedelta(days=8))
|
||||
|
||||
jobs = dao_get_jobs_by_service_id(one_job.service_id)
|
||||
|
||||
assert len(jobs) == 2
|
||||
assert one_job in jobs
|
||||
assert old_job in jobs
|
||||
|
||||
jobs_limit_days = dao_get_jobs_by_service_id(one_job.service_id, limit_days=7)
|
||||
assert len(jobs_limit_days) == 1
|
||||
assert one_job 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):
|
||||
from tests.app.conftest import sample_job as create_job
|
||||
|
||||
|
||||
@@ -33,8 +33,7 @@ from app.dao.notifications_dao import (
|
||||
|
||||
from notifications_utils.template import get_sms_fragment_count
|
||||
|
||||
from tests.app.conftest import sample_job
|
||||
from tests.app.conftest import sample_notification
|
||||
from tests.app.conftest import (sample_notification)
|
||||
|
||||
|
||||
def test_should_by_able_to_update_reference_by_id(sample_notification):
|
||||
@@ -57,38 +56,43 @@ def test_should_by_able_to_update_status_by_reference(sample_email_template, ses
|
||||
update_notification_reference_by_id(notification.id, 'reference')
|
||||
update_notification_status_by_reference('reference', 'delivered', 'delivered')
|
||||
assert Notification.query.get(notification.id).status == 'delivered'
|
||||
assert NotificationStatistics.query.filter_by(
|
||||
service_id=sample_email_template.service.id
|
||||
).one().emails_delivered == 1
|
||||
assert NotificationStatistics.query.filter_by(
|
||||
service_id=sample_email_template.service.id
|
||||
).one().emails_requested == 1
|
||||
assert NotificationStatistics.query.filter_by(
|
||||
service_id=sample_email_template.service.id
|
||||
).one().emails_failed == 0
|
||||
stats = NotificationStatistics.query.filter_by(service_id=sample_email_template.service.id).one()
|
||||
assert stats.emails_delivered == 1
|
||||
assert stats.emails_requested == 1
|
||||
assert stats.emails_failed == 0
|
||||
|
||||
|
||||
def test_should_by_able_to_update_status_by_id(sample_notification):
|
||||
assert Notification.query.get(sample_notification.id).status == 'sending'
|
||||
count = update_notification_status_by_id(sample_notification.id, 'delivered', 'delivered')
|
||||
def test_should_by_able_to_update_status_by_id(sample_template, sample_job, mmg_provider):
|
||||
data = _notification_json(sample_template, job_id=sample_job.id)
|
||||
notification = Notification(**data)
|
||||
dao_create_notification(notification, sample_template.template_type, 'mmg')
|
||||
assert Notification.query.get(notification.id).status == 'sending'
|
||||
count = update_notification_status_by_id(notification.id, 'delivered', 'delivered')
|
||||
assert count == 1
|
||||
assert Notification.query.get(sample_notification.id).status == 'delivered'
|
||||
stats = NotificationStatistics.query.filter_by(service_id=sample_notification.service.id).one()
|
||||
assert Notification.query.get(notification.id).status == 'delivered'
|
||||
stats = NotificationStatistics.query.filter_by(service_id=notification.service.id).one()
|
||||
assert stats.sms_delivered == 1
|
||||
assert stats.sms_requested == 1
|
||||
assert stats.sms_failed == 0
|
||||
job = Job.query.get(sample_job.id)
|
||||
assert job.notification_count == 1
|
||||
assert job.notifications_sent == 1
|
||||
assert job.notifications_delivered == 1
|
||||
assert job.notifications_failed == 0
|
||||
|
||||
|
||||
def test_should_not_update_status_by_id_if_not_sending(notify_db, notify_db_session):
|
||||
def test_should_not_update_status_by_id_if_not_sending_and_does_not_update_job(notify_db, notify_db_session):
|
||||
notification = sample_notification(notify_db, notify_db_session, status='delivered')
|
||||
job = Job.query.get(notification.job_id)
|
||||
assert Notification.query.get(notification.id).status == 'delivered'
|
||||
count = update_notification_status_by_id(notification.id, 'failed', 'failure')
|
||||
assert count == 0
|
||||
assert Notification.query.get(notification.id).status == 'delivered'
|
||||
assert job == Job.query.get(notification.job_id)
|
||||
|
||||
|
||||
def test_should_not_update_status_one_notification_status_is_delivered(sample_email_template, ses_provider):
|
||||
data = _notification_json(sample_email_template)
|
||||
def test_should_not_update_status_one_notification_status_is_delivered(sample_email_template, sample_job, ses_provider):
|
||||
data = _notification_json(sample_email_template, job_id=sample_job.id)
|
||||
|
||||
notification = Notification(**data)
|
||||
dao_create_notification(
|
||||
@@ -101,28 +105,37 @@ def test_should_not_update_status_one_notification_status_is_delivered(sample_em
|
||||
update_notification_status_by_reference('reference', 'delivered', 'delivered')
|
||||
assert Notification.query.get(notification.id).status == 'delivered'
|
||||
|
||||
update_notification_status_by_reference('reference', 'delivered', 'temporary-failure')
|
||||
update_notification_status_by_reference('reference', 'failed', 'temporary-failure')
|
||||
assert Notification.query.get(notification.id).status == 'delivered'
|
||||
stats = NotificationStatistics.query.filter_by(service_id=sample_email_template.service.id).one()
|
||||
assert stats.emails_delivered == 1
|
||||
assert stats.emails_requested == 1
|
||||
assert stats.emails_failed == 0
|
||||
job = Job.query.get(notification.job_id)
|
||||
assert job.notification_count == 1
|
||||
assert job.notifications_delivered == 1
|
||||
assert job.notifications_failed == 0
|
||||
assert job.notifications_sent == 1
|
||||
|
||||
|
||||
def test_should_be_able_to_record_statistics_failure_for_sms(sample_notification):
|
||||
assert Notification.query.get(sample_notification.id).status == 'sending'
|
||||
count = update_notification_status_by_id(sample_notification.id, 'delivered', 'failure')
|
||||
count = update_notification_status_by_id(sample_notification.id, 'permanent-failure', 'failure')
|
||||
assert count == 1
|
||||
assert Notification.query.get(sample_notification.id).status == 'delivered'
|
||||
assert Notification.query.get(sample_notification.id).status == 'permanent-failure'
|
||||
stats = NotificationStatistics.query.filter_by(service_id=sample_notification.service.id).one()
|
||||
assert stats.sms_delivered == 0
|
||||
assert stats.sms_requested == 1
|
||||
assert stats.sms_failed == 1
|
||||
job_stats = Job.query.filter_by(id=sample_notification.job_id).first()
|
||||
assert job_stats.notification_count == 1
|
||||
assert job_stats.notifications_sent == 1
|
||||
assert job_stats.notifications_failed == 1
|
||||
assert job_stats.notifications_delivered == 0
|
||||
|
||||
|
||||
def test_should_be_able_to_record_statistics_failure_for_email(sample_email_template, ses_provider):
|
||||
data = _notification_json(sample_email_template)
|
||||
|
||||
def test_should_be_able_to_record_statistics_failure_for_email(sample_email_template, sample_job, ses_provider):
|
||||
data = _notification_json(sample_email_template, job_id=sample_job.id)
|
||||
notification = Notification(**data)
|
||||
dao_create_notification(notification, sample_email_template.template_type, ses_provider.identifier)
|
||||
|
||||
@@ -134,6 +147,11 @@ def test_should_be_able_to_record_statistics_failure_for_email(sample_email_temp
|
||||
assert stats.emails_delivered == 0
|
||||
assert stats.emails_requested == 1
|
||||
assert stats.emails_failed == 1
|
||||
job_stats = Job.query.filter_by(id=notification.job_id).first()
|
||||
assert job_stats.notification_count == 1
|
||||
assert job_stats.notifications_sent == 1
|
||||
assert job_stats.notifications_failed == 1
|
||||
assert job_stats.notifications_delivered == 0
|
||||
|
||||
|
||||
def test_should_return_zero_count_if_no_notification_with_id():
|
||||
@@ -301,7 +319,11 @@ def test_save_notification_creates_sms_and_template_stats(sample_template, sampl
|
||||
assert data['template_version'] == notification_from_db.template_version
|
||||
assert data['created_at'] == notification_from_db.created_at
|
||||
assert 'sending' == notification_from_db.status
|
||||
assert Job.query.get(sample_job.id).notifications_sent == 1
|
||||
job = Job.query.get(sample_job.id)
|
||||
assert job.notifications_sent == 1
|
||||
assert job.notification_count == 1
|
||||
assert job.notifications_failed == 0
|
||||
assert job.notifications_delivered == 0
|
||||
|
||||
stats = NotificationStatistics.query.filter(
|
||||
NotificationStatistics.service_id == sample_template.service.id
|
||||
@@ -339,7 +361,11 @@ def test_save_notification_and_create_email_and_template_stats(sample_email_temp
|
||||
assert data['template_version'] == notification_from_db.template_version
|
||||
assert data['created_at'] == notification_from_db.created_at
|
||||
assert 'sending' == notification_from_db.status
|
||||
assert Job.query.get(sample_job.id).notifications_sent == 1
|
||||
job = Job.query.get(sample_job.id)
|
||||
assert job.notifications_sent == 1
|
||||
assert job.notification_count == 1
|
||||
assert job.notifications_delivered == 0
|
||||
assert job.notifications_failed == 0
|
||||
|
||||
stats = NotificationStatistics.query.filter(
|
||||
NotificationStatistics.service_id == sample_email_template.service.id
|
||||
@@ -511,6 +537,7 @@ def test_should_not_increment_job_if_notification_fails_to_persist(sample_templa
|
||||
|
||||
|
||||
def test_save_notification_and_increment_correct_job(notify_db, notify_db_session, sample_template, mmg_provider):
|
||||
from tests.app.conftest import sample_job
|
||||
job_1 = sample_job(notify_db, notify_db_session, sample_template.service)
|
||||
job_2 = sample_job(notify_db, notify_db_session, sample_template.service)
|
||||
|
||||
@@ -585,7 +612,6 @@ def test_get_notification_for_job(sample_notification):
|
||||
|
||||
|
||||
def test_get_all_notifications_for_job(notify_db, notify_db_session, sample_job):
|
||||
from tests.app.conftest import sample_notification
|
||||
for i in range(0, 5):
|
||||
try:
|
||||
sample_notification(notify_db,
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
import json
|
||||
import uuid
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
import app.celery.tasks
|
||||
|
||||
from tests import create_authorization_header
|
||||
@@ -22,6 +24,32 @@ def test_get_jobs(notify_api, notify_db, notify_db_session, sample_template):
|
||||
assert len(resp_json['data']) == 5
|
||||
|
||||
|
||||
def test_get_jobs_with_limit_days(notify_api, notify_db, notify_db_session, sample_template):
|
||||
create_job(
|
||||
notify_db,
|
||||
notify_db_session,
|
||||
service=sample_template.service,
|
||||
template=sample_template,
|
||||
)
|
||||
create_job(
|
||||
notify_db,
|
||||
notify_db_session,
|
||||
service=sample_template.service,
|
||||
template=sample_template,
|
||||
created_at=datetime.now() - timedelta(days=7))
|
||||
|
||||
service_id = sample_template.service.id
|
||||
|
||||
with notify_api.test_request_context():
|
||||
with notify_api.test_client() as client:
|
||||
path = '/service/{}/job'.format(service_id)
|
||||
auth_header = create_authorization_header(service_id=service_id)
|
||||
response = client.get(path, headers=[auth_header], query_string={'limit_days': 5})
|
||||
assert response.status_code == 200
|
||||
resp_json = json.loads(response.get_data(as_text=True))
|
||||
assert len(resp_json['data']) == 1
|
||||
|
||||
|
||||
def test_get_job_with_invalid_service_id_returns404(notify_api, sample_api_key, sample_service):
|
||||
with notify_api.test_request_context():
|
||||
with notify_api.test_client() as client:
|
||||
|
||||
Reference in New Issue
Block a user