mirror of
https://github.com/GSA/notifications-api.git
synced 2026-09-07 01:08:27 -04:00
Removed updates to the provider stats table
- again these new come from the notifications history table - We update this when we sent a notification, so removed from celery tasks - tests removed also
This commit is contained in:
@@ -13,7 +13,6 @@ from app import notify_celery, statsd_client, clients, create_uuid
|
|||||||
from app.clients.email import EmailClientException
|
from app.clients.email import EmailClientException
|
||||||
from app.clients.sms import SmsClientException
|
from app.clients.sms import SmsClientException
|
||||||
from app.dao.notifications_dao import (
|
from app.dao.notifications_dao import (
|
||||||
update_provider_stats,
|
|
||||||
get_notification_by_id,
|
get_notification_by_id,
|
||||||
dao_update_notification,
|
dao_update_notification,
|
||||||
update_notification_status_by_id
|
update_notification_status_by_id
|
||||||
@@ -78,13 +77,6 @@ def send_sms_to_provider(self, service_id, notification_id):
|
|||||||
)
|
)
|
||||||
notification.billable_units = get_sms_fragment_count(template.replaced_content_count)
|
notification.billable_units = get_sms_fragment_count(template.replaced_content_count)
|
||||||
|
|
||||||
update_provider_stats(
|
|
||||||
notification_id,
|
|
||||||
SMS_TYPE,
|
|
||||||
provider.get_name(),
|
|
||||||
billable_units=notification.billable_units
|
|
||||||
)
|
|
||||||
|
|
||||||
notification.sent_at = datetime.utcnow()
|
notification.sent_at = datetime.utcnow()
|
||||||
notification.sent_by = provider.get_name()
|
notification.sent_by = provider.get_name()
|
||||||
notification.status = 'sending'
|
notification.status = 'sending'
|
||||||
@@ -163,12 +155,6 @@ def send_email_to_provider(self, service_id, notification_id):
|
|||||||
reply_to_address=service.reply_to_email_address,
|
reply_to_address=service.reply_to_email_address,
|
||||||
)
|
)
|
||||||
|
|
||||||
update_provider_stats(
|
|
||||||
notification_id,
|
|
||||||
EMAIL_TYPE,
|
|
||||||
provider.get_name(),
|
|
||||||
billable_units=1
|
|
||||||
)
|
|
||||||
notification.reference = reference
|
notification.reference = reference
|
||||||
notification.sent_at = datetime.utcnow()
|
notification.sent_at = datetime.utcnow()
|
||||||
notification.sent_by = provider.get_name(),
|
notification.sent_by = provider.get_name(),
|
||||||
|
|||||||
@@ -17,12 +17,9 @@ from app.models import (
|
|||||||
Notification,
|
Notification,
|
||||||
NotificationHistory,
|
NotificationHistory,
|
||||||
NotificationStatistics,
|
NotificationStatistics,
|
||||||
TemplateStatistics,
|
|
||||||
SMS_TYPE,
|
SMS_TYPE,
|
||||||
EMAIL_TYPE,
|
EMAIL_TYPE,
|
||||||
Template,
|
Template)
|
||||||
ProviderStatistics,
|
|
||||||
ProviderDetails)
|
|
||||||
from app.clients import (
|
from app.clients import (
|
||||||
STATISTICS_FAILURE,
|
STATISTICS_FAILURE,
|
||||||
STATISTICS_DELIVERED,
|
STATISTICS_DELIVERED,
|
||||||
@@ -242,33 +239,6 @@ def dao_update_notification(notification):
|
|||||||
db.session.commit()
|
db.session.commit()
|
||||||
|
|
||||||
|
|
||||||
@statsd(namespace="dao")
|
|
||||||
@transactional
|
|
||||||
def update_provider_stats(
|
|
||||||
id_,
|
|
||||||
notification_type,
|
|
||||||
provider_name,
|
|
||||||
billable_units=1):
|
|
||||||
notification = Notification.query.filter(Notification.id == id_).one()
|
|
||||||
provider = ProviderDetails.query.filter_by(identifier=provider_name).one()
|
|
||||||
|
|
||||||
update_count = db.session.query(ProviderStatistics).filter_by(
|
|
||||||
day=date.today(),
|
|
||||||
service_id=notification.service_id,
|
|
||||||
provider_id=provider.id
|
|
||||||
).update({'unit_count': ProviderStatistics.unit_count + billable_units})
|
|
||||||
|
|
||||||
if update_count == 0:
|
|
||||||
provider_stats = ProviderStatistics(
|
|
||||||
day=notification.created_at.date(),
|
|
||||||
service_id=notification.service_id,
|
|
||||||
provider_id=provider.id,
|
|
||||||
unit_count=billable_units
|
|
||||||
)
|
|
||||||
|
|
||||||
db.session.add(provider_stats)
|
|
||||||
|
|
||||||
|
|
||||||
@statsd(namespace="dao")
|
@statsd(namespace="dao")
|
||||||
def get_notification_for_job(service_id, job_id, notification_id):
|
def get_notification_for_job(service_id, job_id, notification_id):
|
||||||
return Notification.query.filter_by(service_id=service_id, job_id=job_id, id=notification_id).one()
|
return Notification.query.filter_by(service_id=service_id, job_id=job_id, id=notification_id).one()
|
||||||
|
|||||||
@@ -241,23 +241,6 @@ def test_should_call_send_sms_response_task_if_research_mode(notify_db, sample_s
|
|||||||
assert not persisted_notification.personalisation
|
assert not persisted_notification.personalisation
|
||||||
|
|
||||||
|
|
||||||
def test_should_update_provider_stats_on_success(notify_db, sample_service, sample_notification, mocker):
|
|
||||||
provider_stats = provider_statistics_dao.get_provider_statistics(sample_service).all()
|
|
||||||
assert len(provider_stats) == 0
|
|
||||||
|
|
||||||
mocker.patch('app.mmg_client.send_sms')
|
|
||||||
mocker.patch('app.mmg_client.get_name', return_value="mmg")
|
|
||||||
|
|
||||||
send_sms_to_provider(
|
|
||||||
sample_notification.service_id,
|
|
||||||
sample_notification.id
|
|
||||||
)
|
|
||||||
|
|
||||||
updated_provider_stats = provider_statistics_dao.get_provider_statistics(sample_service).all()
|
|
||||||
assert updated_provider_stats[0].provider.identifier == 'mmg'
|
|
||||||
assert updated_provider_stats[0].unit_count == 1
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize('research_mode,key_type', [
|
@pytest.mark.parametrize('research_mode,key_type', [
|
||||||
(True, KEY_TYPE_NORMAL),
|
(True, KEY_TYPE_NORMAL),
|
||||||
(False, KEY_TYPE_TEST)
|
(False, KEY_TYPE_TEST)
|
||||||
|
|||||||
@@ -33,8 +33,7 @@ from app.dao.notifications_dao import (
|
|||||||
get_notifications_for_job,
|
get_notifications_for_job,
|
||||||
get_notifications_for_service,
|
get_notifications_for_service,
|
||||||
update_notification_status_by_id,
|
update_notification_status_by_id,
|
||||||
update_notification_status_by_reference,
|
update_notification_status_by_reference
|
||||||
update_provider_stats,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
from notifications_utils.template import get_sms_fragment_count
|
from notifications_utils.template import get_sms_fragment_count
|
||||||
@@ -49,7 +48,6 @@ def test_should_have_decorated_notifications_dao_functions():
|
|||||||
assert dao_create_notification.__wrapped__.__name__ == 'dao_create_notification' # noqa
|
assert dao_create_notification.__wrapped__.__name__ == 'dao_create_notification' # noqa
|
||||||
assert update_notification_status_by_id.__wrapped__.__name__ == 'update_notification_status_by_id' # noqa
|
assert update_notification_status_by_id.__wrapped__.__name__ == 'update_notification_status_by_id' # noqa
|
||||||
assert dao_update_notification.__wrapped__.__name__ == 'dao_update_notification' # noqa
|
assert dao_update_notification.__wrapped__.__name__ == 'dao_update_notification' # noqa
|
||||||
assert update_provider_stats.__wrapped__.__name__ == 'update_provider_stats' # noqa
|
|
||||||
assert update_notification_status_by_reference.__wrapped__.__name__ == 'update_notification_status_by_reference' # noqa
|
assert update_notification_status_by_reference.__wrapped__.__name__ == 'update_notification_status_by_reference' # noqa
|
||||||
assert get_notification_for_job.__wrapped__.__name__ == 'get_notification_for_job' # noqa
|
assert get_notification_for_job.__wrapped__.__name__ == 'get_notification_for_job' # noqa
|
||||||
assert get_notifications_for_job.__wrapped__.__name__ == 'get_notifications_for_job' # noqa
|
assert get_notifications_for_job.__wrapped__.__name__ == 'get_notifications_for_job' # noqa
|
||||||
@@ -330,10 +328,6 @@ def test_should_not_update_status_one_notification_status_is_delivered(notify_db
|
|||||||
status='sending')
|
status='sending')
|
||||||
assert Notification.query.get(notification.id).status == "sending"
|
assert Notification.query.get(notification.id).status == "sending"
|
||||||
|
|
||||||
update_provider_stats(
|
|
||||||
notification.id,
|
|
||||||
'email',
|
|
||||||
ses_provider.identifier)
|
|
||||||
notification.reference = 'reference'
|
notification.reference = 'reference'
|
||||||
dao_update_notification(notification)
|
dao_update_notification(notification)
|
||||||
update_notification_status_by_reference('reference', 'delivered', 'delivered')
|
update_notification_status_by_reference('reference', 'delivered', 'delivered')
|
||||||
@@ -344,32 +338,6 @@ def test_should_not_update_status_one_notification_status_is_delivered(notify_db
|
|||||||
_assert_notification_stats(notification.service_id, emails_requested=1, emails_delivered=1, emails_failed=0)
|
_assert_notification_stats(notification.service_id, emails_requested=1, emails_delivered=1, emails_failed=0)
|
||||||
|
|
||||||
|
|
||||||
def test_should_be_able_to_record_statistics_failure_for_sms(notify_db, notify_db_session, ):
|
|
||||||
notification = sample_notification(notify_db=notify_db, notify_db_session=notify_db_session, status='sending')
|
|
||||||
assert Notification.query.get(notification.id).status == 'sending'
|
|
||||||
|
|
||||||
assert update_notification_status_by_id(notification.id, 'permanent-failure', 'failure')
|
|
||||||
assert Notification.query.get(notification.id).status == 'permanent-failure'
|
|
||||||
_assert_notification_stats(notification.service_id, sms_requested=1, sms_delivered=0, sms_failed=1)
|
|
||||||
|
|
||||||
|
|
||||||
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, status='sending')
|
|
||||||
notification = Notification(**data)
|
|
||||||
dao_create_notification(notification, sample_email_template.template_type)
|
|
||||||
|
|
||||||
update_provider_stats(
|
|
||||||
notification.id,
|
|
||||||
'email',
|
|
||||||
ses_provider.identifier)
|
|
||||||
notification.reference = 'reference'
|
|
||||||
dao_update_notification(notification)
|
|
||||||
count = update_notification_status_by_reference('reference', 'failed', 'failure')
|
|
||||||
assert count == 1
|
|
||||||
assert Notification.query.get(notification.id).status == 'failed'
|
|
||||||
_assert_notification_stats(notification.service_id, emails_requested=1, emails_delivered=0, emails_failed=1)
|
|
||||||
|
|
||||||
|
|
||||||
def test_should_return_zero_count_if_no_notification_with_id():
|
def test_should_return_zero_count_if_no_notification_with_id():
|
||||||
assert not update_notification_status_by_id(str(uuid.uuid4()), 'delivered', 'delivered')
|
assert not update_notification_status_by_id(str(uuid.uuid4()), 'delivered', 'delivered')
|
||||||
|
|
||||||
|
|||||||
@@ -4,92 +4,7 @@ import uuid
|
|||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from app.models import NotificationHistory, KEY_TYPE_NORMAL, KEY_TYPE_TEAM, KEY_TYPE_TEST, NOTIFICATION_STATUS_TYPES
|
from app.models import NotificationHistory, KEY_TYPE_NORMAL, KEY_TYPE_TEAM, KEY_TYPE_TEST, NOTIFICATION_STATUS_TYPES
|
||||||
from app.dao.notifications_dao import update_provider_stats
|
from app.dao.provider_statistics_dao import get_fragment_count
|
||||||
from app.dao.provider_statistics_dao import get_provider_statistics, get_fragment_count
|
|
||||||
from tests.app.conftest import sample_notification as create_sample_notification
|
|
||||||
|
|
||||||
|
|
||||||
def test_should_update_provider_statistics_sms(notify_db,
|
|
||||||
notify_db_session,
|
|
||||||
sample_template,
|
|
||||||
mmg_provider):
|
|
||||||
n1 = create_sample_notification(
|
|
||||||
notify_db,
|
|
||||||
notify_db_session,
|
|
||||||
template=sample_template)
|
|
||||||
update_provider_stats(n1.id, 'sms', mmg_provider.identifier)
|
|
||||||
provider_stats = get_provider_statistics(
|
|
||||||
sample_template.service,
|
|
||||||
providers=[mmg_provider.identifier]).one()
|
|
||||||
assert provider_stats.unit_count == 1
|
|
||||||
|
|
||||||
|
|
||||||
def test_should_update_provider_statistics_email(notify_db,
|
|
||||||
notify_db_session,
|
|
||||||
sample_email_template,
|
|
||||||
ses_provider):
|
|
||||||
n1 = create_sample_notification(
|
|
||||||
notify_db,
|
|
||||||
notify_db_session,
|
|
||||||
template=sample_email_template)
|
|
||||||
update_provider_stats(n1.id, 'email', ses_provider.identifier)
|
|
||||||
provider_stats = get_provider_statistics(
|
|
||||||
sample_email_template.service,
|
|
||||||
providers=[ses_provider.identifier]).one()
|
|
||||||
assert provider_stats.unit_count == 1
|
|
||||||
|
|
||||||
|
|
||||||
def test_should_update_provider_statistics_sms_multi(notify_db,
|
|
||||||
notify_db_session,
|
|
||||||
sample_template,
|
|
||||||
mmg_provider):
|
|
||||||
n1 = create_sample_notification(
|
|
||||||
notify_db,
|
|
||||||
notify_db_session,
|
|
||||||
template=sample_template,
|
|
||||||
billable_units=1)
|
|
||||||
update_provider_stats(n1.id, 'sms', mmg_provider.identifier, n1.billable_units)
|
|
||||||
n2 = create_sample_notification(
|
|
||||||
notify_db,
|
|
||||||
notify_db_session,
|
|
||||||
template=sample_template,
|
|
||||||
billable_units=2)
|
|
||||||
update_provider_stats(n2.id, 'sms', mmg_provider.identifier, n2.billable_units)
|
|
||||||
n3 = create_sample_notification(
|
|
||||||
notify_db,
|
|
||||||
notify_db_session,
|
|
||||||
template=sample_template,
|
|
||||||
billable_units=4)
|
|
||||||
update_provider_stats(n3.id, 'sms', mmg_provider.identifier, n3.billable_units)
|
|
||||||
provider_stats = get_provider_statistics(
|
|
||||||
sample_template.service,
|
|
||||||
providers=[mmg_provider.identifier]).one()
|
|
||||||
assert provider_stats.unit_count == 7
|
|
||||||
|
|
||||||
|
|
||||||
def test_should_update_provider_statistics_email_multi(notify_db,
|
|
||||||
notify_db_session,
|
|
||||||
sample_email_template,
|
|
||||||
ses_provider):
|
|
||||||
n1 = create_sample_notification(
|
|
||||||
notify_db,
|
|
||||||
notify_db_session,
|
|
||||||
template=sample_email_template)
|
|
||||||
update_provider_stats(n1.id, 'email', ses_provider.identifier)
|
|
||||||
n2 = create_sample_notification(
|
|
||||||
notify_db,
|
|
||||||
notify_db_session,
|
|
||||||
template=sample_email_template)
|
|
||||||
update_provider_stats(n2.id, 'email', ses_provider.identifier)
|
|
||||||
n3 = create_sample_notification(
|
|
||||||
notify_db,
|
|
||||||
notify_db_session,
|
|
||||||
template=sample_email_template)
|
|
||||||
update_provider_stats(n3.id, 'email', ses_provider.identifier)
|
|
||||||
provider_stats = get_provider_statistics(
|
|
||||||
sample_email_template.service,
|
|
||||||
providers=[ses_provider.identifier]).one()
|
|
||||||
assert provider_stats.unit_count == 3
|
|
||||||
|
|
||||||
|
|
||||||
def test_get_fragment_count_with_no_data(sample_template):
|
def test_get_fragment_count_with_no_data(sample_template):
|
||||||
|
|||||||
Reference in New Issue
Block a user