Files
notifications-api/tests/app/notifications/test_notifications_ses_callback.py

67 lines
2.8 KiB
Python
Raw Normal View History

import pytest
from flask import json
from sqlalchemy.exc import SQLAlchemyError
from app.dao.notifications_dao import get_notification_by_id
from app.models import Complaint
from app.notifications.notifications_ses_callback import handle_complaint
from tests.app.db import (
2021-03-10 13:55:06 +00:00
create_notification,
create_notification_history,
ses_complaint_callback,
2021-03-10 13:55:06 +00:00
ses_complaint_callback_malformed_message_id,
ses_complaint_callback_with_missing_complaint_type,
)
def test_ses_callback_should_not_set_status_once_status_is_delivered(sample_email_template):
notification = create_notification(sample_email_template, status='delivered', )
assert get_notification_by_id(notification.id).status == 'delivered'
def test_process_ses_results_in_complaint(sample_email_template):
notification = create_notification(template=sample_email_template, reference='ref1')
handle_complaint(json.loads(ses_complaint_callback()['Message']))
complaints = Complaint.query.all()
assert len(complaints) == 1
assert complaints[0].notification_id == notification.id
def test_handle_complaint_does_not_raise_exception_if_reference_is_missing(notify_api):
2018-06-05 17:23:24 +01:00
response = json.loads(ses_complaint_callback_malformed_message_id()['Message'])
handle_complaint(response)
assert len(Complaint.query.all()) == 0
def test_handle_complaint_does_raise_exception_if_notification_not_found(notify_api):
response = json.loads(ses_complaint_callback()['Message'])
with pytest.raises(expected_exception=SQLAlchemyError):
handle_complaint(response)
def test_process_ses_results_in_complaint_if_notification_history_does_not_exist(sample_email_template):
notification = create_notification(template=sample_email_template, reference='ref1')
handle_complaint(json.loads(ses_complaint_callback()['Message']))
complaints = Complaint.query.all()
assert len(complaints) == 1
assert complaints[0].notification_id == notification.id
def test_process_ses_results_in_complaint_if_notification_does_not_exist(sample_email_template):
notification = create_notification_history(template=sample_email_template, reference='ref1')
handle_complaint(json.loads(ses_complaint_callback()['Message']))
complaints = Complaint.query.all()
assert len(complaints) == 1
assert complaints[0].notification_id == notification.id
def test_process_ses_results_in_complaint_save_complaint_with_null_complaint_type(notify_api, sample_email_template):
notification = create_notification(template=sample_email_template, reference='ref1')
2018-06-05 17:23:24 +01:00
msg = json.loads(ses_complaint_callback_with_missing_complaint_type()['Message'])
handle_complaint(msg)
complaints = Complaint.query.all()
assert len(complaints) == 1
assert complaints[0].notification_id == notification.id
assert not complaints[0].complaint_type