Merge pull request #682 from alphagov/remove-provider_statistics

Remove provider_statistics_dao.get_provider_statistics
This commit is contained in:
Rebecca Law
2016-09-22 15:23:14 +01:00
committed by GitHub
3 changed files with 25 additions and 64 deletions

View File

@@ -1,6 +1,4 @@
from datetime import datetime from datetime import datetime
from monotonic import monotonic
from urllib.parse import urljoin
from flask import current_app from flask import current_app
from notifications_utils.recipients import ( from notifications_utils.recipients import (
@@ -143,6 +141,7 @@ def send_email_to_provider(self, service_id, notification_id):
send_email_response.apply_async( send_email_response.apply_async(
(provider.get_name(), reference, notification.to), queue='research-mode' (provider.get_name(), reference, notification.to), queue='research-mode'
) )
notification.billable_units = 0
else: else:
from_address = '"{}" <{}@{}>'.format(service.name, service.email_from, from_address = '"{}" <{}@{}>'.format(service.name, service.email_from,
current_app.config['NOTIFY_EMAIL_DOMAIN']) current_app.config['NOTIFY_EMAIL_DOMAIN'])

View File

@@ -1,9 +1,7 @@
from sqlalchemy import func, cast, Float, case from sqlalchemy import func
from app import db from app import db
from app.models import ( from app.models import (
ProviderStatistics,
ProviderDetails,
NotificationHistory, NotificationHistory,
SMS_TYPE, SMS_TYPE,
EMAIL_TYPE, EMAIL_TYPE,
@@ -12,15 +10,6 @@ from app.models import (
) )
def get_provider_statistics(service, **kwargs):
query = ProviderStatistics.query.filter_by(service=service)
if 'providers' in kwargs:
providers = ProviderDetails.query.filter(ProviderDetails.identifier.in_(kwargs['providers'])).all()
provider_ids = [provider.id for provider in providers]
query = query.filter(ProviderStatistics.provider_id.in_(provider_ids))
return query
def get_fragment_count(service_id): def get_fragment_count(service_id):
shared_filters = [ shared_filters = [
NotificationHistory.service_id == service_id, NotificationHistory.service_id == service_id,

View File

@@ -3,29 +3,25 @@ from datetime import datetime
import pytest import pytest
from celery.exceptions import MaxRetriesExceededError from celery.exceptions import MaxRetriesExceededError
from unittest.mock import ANY, call from unittest.mock import ANY
from notifications_utils.recipients import validate_phone_number, format_phone_number from notifications_utils.recipients import validate_phone_number, format_phone_number
import app import app
from app import statsd_client, mmg_client from app import mmg_client
from app.celery import provider_tasks from app.celery import provider_tasks
from app.celery.provider_tasks import send_sms_to_provider, send_email_to_provider from app.celery.provider_tasks import send_sms_to_provider, send_email_to_provider
from app.celery.research_mode_tasks import send_sms_response, send_email_response from app.celery.research_mode_tasks import send_sms_response, send_email_response
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 import notifications_dao, provider_details_dao from app.dao import notifications_dao, provider_details_dao
from app.dao import provider_statistics_dao
from app.dao.provider_statistics_dao import get_provider_statistics
from app.models import ( from app.models import (
Notification, Notification,
NotificationStatistics,
Job,
Organisation, Organisation,
KEY_TYPE_NORMAL, KEY_TYPE_NORMAL,
KEY_TYPE_TEST, KEY_TYPE_TEST,
BRANDING_ORG, BRANDING_ORG,
BRANDING_BOTH BRANDING_BOTH,
) KEY_TYPE_TEAM)
from tests.app.conftest import sample_notification from tests.app.conftest import sample_notification
@@ -241,14 +237,23 @@ 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
@pytest.mark.parametrize('research_mode,key_type', [ @pytest.mark.parametrize('research_mode,key_type, billable_units', [
(True, KEY_TYPE_NORMAL), (True, KEY_TYPE_NORMAL, 0),
(False, KEY_TYPE_TEST) (False, KEY_TYPE_NORMAL, 1),
(False, KEY_TYPE_TEST, 0),
(True, KEY_TYPE_TEST, 0),
(True, KEY_TYPE_TEAM, 0),
(False, KEY_TYPE_TEAM, 1)
]) ])
def test_not_should_update_provider_stats_on_success_in_research_mode(notify_db, sample_service, sample_notification, def test_should_update_billable_units_according_to_research_mode_and_key_type(notify_db,
mocker, research_mode, key_type): sample_service,
provider_stats = provider_statistics_dao.get_provider_statistics(sample_service).all() sample_notification,
assert len(provider_stats) == 0 mocker,
research_mode,
key_type,
billable_units):
assert Notification.query.count() == 1
mocker.patch('app.mmg_client.send_sms') mocker.patch('app.mmg_client.send_sms')
mocker.patch('app.mmg_client.get_name', return_value="mmg") mocker.patch('app.mmg_client.get_name', return_value="mmg")
@@ -264,8 +269,8 @@ def test_not_should_update_provider_stats_on_success_in_research_mode(notify_db,
sample_notification.id sample_notification.id
) )
updated_provider_stats = provider_statistics_dao.get_provider_statistics(sample_service).all() assert Notification.query.get(sample_notification.id).billable_units == billable_units, \
assert len(updated_provider_stats) == 0 "Research mode: {0}, key type: {1}, billable_units: {2}".format(research_mode, key_type, billable_units)
def test_should_not_send_to_provider_when_status_is_not_created(notify_db, notify_db_session, def test_should_not_send_to_provider_when_status_is_not_created(notify_db, notify_db_session,
@@ -369,9 +374,6 @@ def test_send_email_to_provider_should_call_research_mode_task_response_task_if_
sample_service.research_mode = True sample_service.research_mode = True
notify_db.session.add(sample_service) notify_db.session.add(sample_service)
notify_db.session.commit() notify_db.session.commit()
assert not get_provider_statistics(
sample_email_template.service,
providers=[ses_provider.identifier]).first()
send_email_to_provider( send_email_to_provider(
sample_service.id, sample_service.id,
notification.id notification.id
@@ -380,9 +382,6 @@ def test_send_email_to_provider_should_call_research_mode_task_response_task_if_
send_email_response.apply_async.assert_called_once_with( send_email_response.apply_async.assert_called_once_with(
('ses', str(reference), 'john@smith.com'), queue="research-mode" ('ses', str(reference), 'john@smith.com'), queue="research-mode"
) )
assert not get_provider_statistics(
sample_email_template.service,
providers=[ses_provider.identifier]).first()
persisted_notification = Notification.query.filter_by(id=notification.id).one() persisted_notification = Notification.query.filter_by(id=notification.id).one()
assert persisted_notification.to == 'john@smith.com' assert persisted_notification.to == 'john@smith.com'
@@ -392,6 +391,7 @@ def test_send_email_to_provider_should_call_research_mode_task_response_task_if_
assert persisted_notification.created_at <= datetime.utcnow() assert persisted_notification.created_at <= datetime.utcnow()
assert persisted_notification.sent_by == 'ses' assert persisted_notification.sent_by == 'ses'
assert persisted_notification.reference == str(reference) assert persisted_notification.reference == str(reference)
assert persisted_notification.billable_units == 0
def test_send_email_to_provider_should_go_into_technical_error_if_exceeds_retries( def test_send_email_to_provider_should_go_into_technical_error_if_exceeds_retries(
@@ -465,24 +465,6 @@ def test_send_email_should_use_service_reply_to_email(
) )
def test_should_not_set_billable_units_if_research_mode(notify_db, sample_service, sample_notification, mocker):
mocker.patch('app.mmg_client.send_sms')
mocker.patch('app.mmg_client.get_name', return_value="mmg")
mocker.patch('app.celery.research_mode_tasks.send_sms_response.apply_async')
sample_service.research_mode = True
notify_db.session.add(sample_service)
notify_db.session.commit()
send_sms_to_provider(
sample_notification.service_id,
sample_notification.id
)
persisted_notification = notifications_dao.get_notification_by_id(sample_notification.id)
assert persisted_notification.billable_units == 0
def test_get_html_email_renderer_should_return_for_normal_service(sample_service): def test_get_html_email_renderer_should_return_for_normal_service(sample_service):
renderer = provider_tasks.get_html_email_renderer(sample_service) renderer = provider_tasks.get_html_email_renderer(sample_service)
assert renderer.govuk_banner assert renderer.govuk_banner
@@ -519,12 +501,3 @@ def test_get_html_email_renderer_prepends_logo_path(notify_db, sample_service):
renderer = provider_tasks.get_html_email_renderer(sample_service) renderer = provider_tasks.get_html_email_renderer(sample_service)
assert renderer.brand_logo == 'http://localhost:6012/static/images/email-template/crests/justice-league.png' assert renderer.brand_logo == 'http://localhost:6012/static/images/email-template/crests/justice-league.png'
def _get_provider_statistics(service, **kwargs):
query = ProviderStatistics.query.filter_by(service=service)
if 'providers' in kwargs:
providers = ProviderDetails.query.filter(ProviderDetails.identifier.in_(kwargs['providers'])).all()
provider_ids = [provider.id for provider in providers]
query = query.filter(ProviderStatistics.provider_id.in_(provider_ids))
return query