mirror of
https://github.com/GSA/notifications-api.git
synced 2026-01-30 14:31:57 -05:00
Merge pull request #273 from alphagov/provider_statistics
Fragment count endpoint added and all tests working.
This commit is contained in:
@@ -1,8 +1,19 @@
|
||||
import pytest
|
||||
from datetime import datetime
|
||||
from datetime import (datetime, date)
|
||||
from app import db
|
||||
from app.models import (
|
||||
User, Service, Template, ApiKey, Job, Notification, InvitedUser, Permission)
|
||||
User,
|
||||
Service,
|
||||
Template,
|
||||
ApiKey,
|
||||
Job,
|
||||
Notification,
|
||||
InvitedUser,
|
||||
Permission,
|
||||
MMG_PROVIDER,
|
||||
SES_PROVIDER,
|
||||
TWILIO_PROVIDER,
|
||||
ProviderStatistics)
|
||||
from app.dao.users_dao import (save_model_user, create_user_code, create_secret_code)
|
||||
from app.dao.services_dao import (dao_create_service, dao_add_user_to_service)
|
||||
from app.dao.templates_dao import dao_create_template
|
||||
@@ -448,9 +459,35 @@ def fake_uuid():
|
||||
|
||||
@pytest.fixture(scope='function')
|
||||
def ses_provider_name():
|
||||
return 'ses'
|
||||
return SES_PROVIDER
|
||||
|
||||
|
||||
@pytest.fixture(scope='function')
|
||||
def mmg_provider_name():
|
||||
return 'mmg'
|
||||
return MMG_PROVIDER
|
||||
|
||||
|
||||
@pytest.fixture(scope='function')
|
||||
def twilio_provider_name():
|
||||
return TWILIO_PROVIDER
|
||||
|
||||
|
||||
@pytest.fixture(scope='function')
|
||||
def sample_provider_statistics(notify_db,
|
||||
notify_db_session,
|
||||
sample_service,
|
||||
provider=None,
|
||||
day=None,
|
||||
unit_count=1):
|
||||
if provider is None:
|
||||
provider = mmg_provider_name()
|
||||
if day is None:
|
||||
day = date.today()
|
||||
stats = ProviderStatistics(
|
||||
service=sample_service,
|
||||
provider=provider,
|
||||
day=day,
|
||||
unit_count=unit_count)
|
||||
notify_db.session.add(stats)
|
||||
notify_db.session.commit()
|
||||
return stats
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
from datetime import datetime
|
||||
from datetime import (date, timedelta)
|
||||
from app.models import ProviderStatistics
|
||||
|
||||
from app.dao.provider_statistics_dao import get_provider_statistics
|
||||
from app.dao.provider_statistics_dao import (
|
||||
get_provider_statistics, get_fragment_count)
|
||||
from app.models import Notification
|
||||
from tests.app.conftest import sample_notification as create_sample_notification
|
||||
|
||||
@@ -14,7 +15,9 @@ def test_should_update_provider_statistics_sms(notify_db,
|
||||
notify_db,
|
||||
notify_db_session,
|
||||
template=sample_template)
|
||||
provider_stats = get_provider_statistics(sample_template.service, mmg_provider_name)
|
||||
provider_stats = get_provider_statistics(
|
||||
sample_template.service,
|
||||
providers=[mmg_provider_name]).one()
|
||||
assert provider_stats.unit_count == 1
|
||||
|
||||
|
||||
@@ -26,7 +29,9 @@ def test_should_update_provider_statistics_email(notify_db,
|
||||
notify_db,
|
||||
notify_db_session,
|
||||
template=sample_email_template)
|
||||
provider_stats = get_provider_statistics(sample_email_template.service, ses_provider_name)
|
||||
provider_stats = get_provider_statistics(
|
||||
sample_email_template.service,
|
||||
providers=[ses_provider_name]).one()
|
||||
assert provider_stats.unit_count == 1
|
||||
|
||||
|
||||
@@ -49,7 +54,9 @@ def test_should_update_provider_statistics_sms_multi(notify_db,
|
||||
notify_db_session,
|
||||
template=sample_template,
|
||||
content_char_count=307)
|
||||
provider_stats = get_provider_statistics(sample_template.service, mmg_provider_name)
|
||||
provider_stats = get_provider_statistics(
|
||||
sample_template.service,
|
||||
providers=[mmg_provider_name]).one()
|
||||
assert provider_stats.unit_count == 6
|
||||
|
||||
|
||||
@@ -69,5 +76,66 @@ def test_should_update_provider_statistics_email_multi(notify_db,
|
||||
notify_db,
|
||||
notify_db_session,
|
||||
template=sample_email_template)
|
||||
provider_stats = get_provider_statistics(sample_email_template.service, ses_provider_name)
|
||||
provider_stats = get_provider_statistics(
|
||||
sample_email_template.service,
|
||||
providers=[ses_provider_name]).one()
|
||||
assert provider_stats.unit_count == 3
|
||||
|
||||
|
||||
def test_should_aggregate_fragment_count(notify_db,
|
||||
notify_db_session,
|
||||
sample_service,
|
||||
mmg_provider_name,
|
||||
twilio_provider_name,
|
||||
ses_provider_name):
|
||||
day = date.today()
|
||||
stats_mmg = ProviderStatistics(
|
||||
service=sample_service,
|
||||
day=day,
|
||||
provider=mmg_provider_name,
|
||||
unit_count=2
|
||||
)
|
||||
stats_twilio = ProviderStatistics(
|
||||
service=sample_service,
|
||||
day=day,
|
||||
provider=twilio_provider_name,
|
||||
unit_count=3
|
||||
)
|
||||
stats_twilio = ProviderStatistics(
|
||||
service=sample_service,
|
||||
day=day,
|
||||
provider=ses_provider_name,
|
||||
unit_count=1
|
||||
)
|
||||
notify_db.session.add(stats_mmg)
|
||||
notify_db.session.add(stats_twilio)
|
||||
notify_db.session.commit()
|
||||
results = get_fragment_count(sample_service, day, day)
|
||||
assert results['sms_count'] == 5
|
||||
assert results['email_count'] == 1
|
||||
|
||||
|
||||
def test_should_aggregate_fragment_count_over_days(notify_db,
|
||||
notify_db_session,
|
||||
sample_service,
|
||||
mmg_provider_name):
|
||||
today = date.today()
|
||||
yesterday = today - timedelta(days=1)
|
||||
stats_today = ProviderStatistics(
|
||||
service=sample_service,
|
||||
day=today,
|
||||
provider=mmg_provider_name,
|
||||
unit_count=2
|
||||
)
|
||||
stats_yesterday = ProviderStatistics(
|
||||
service=sample_service,
|
||||
day=yesterday,
|
||||
provider=mmg_provider_name,
|
||||
unit_count=3
|
||||
)
|
||||
notify_db.session.add(stats_today)
|
||||
notify_db.session.add(stats_yesterday)
|
||||
notify_db.session.commit()
|
||||
results = get_fragment_count(sample_service, yesterday, today)
|
||||
assert results['sms_count'] == 5
|
||||
assert results['email_count'] == 0
|
||||
|
||||
89
tests/app/service/test_service_fragment_count.py
Normal file
89
tests/app/service/test_service_fragment_count.py
Normal file
@@ -0,0 +1,89 @@
|
||||
import json
|
||||
from datetime import (date, timedelta)
|
||||
from flask import url_for
|
||||
from tests import create_authorization_header
|
||||
|
||||
|
||||
def test_fragment_count(notify_api, sample_provider_statistics):
|
||||
with notify_api.test_request_context():
|
||||
with notify_api.test_client() as client:
|
||||
endpoint = url_for(
|
||||
'service.get_service_provider_aggregate_statistics',
|
||||
service_id=str(sample_provider_statistics.service.id))
|
||||
auth_header = create_authorization_header(
|
||||
path=endpoint,
|
||||
method='GET'
|
||||
)
|
||||
resp = client.get(
|
||||
endpoint,
|
||||
headers=[auth_header]
|
||||
)
|
||||
assert resp.status_code == 200
|
||||
json_resp = json.loads(resp.get_data(as_text=True))
|
||||
assert json_resp['data']['sms_count'] == 1
|
||||
|
||||
|
||||
def test_fragment_count_from_to(notify_api, sample_provider_statistics):
|
||||
with notify_api.test_request_context():
|
||||
with notify_api.test_client() as client:
|
||||
today_str = date.today().strftime('%Y-%m-%d')
|
||||
endpoint = url_for(
|
||||
'service.get_service_provider_aggregate_statistics',
|
||||
service_id=str(sample_provider_statistics.service.id),
|
||||
date_from=today_str,
|
||||
date_to=today_str)
|
||||
auth_header = create_authorization_header(
|
||||
path=endpoint,
|
||||
method='GET'
|
||||
)
|
||||
resp = client.get(
|
||||
endpoint,
|
||||
headers=[auth_header]
|
||||
)
|
||||
assert resp.status_code == 200
|
||||
json_resp = json.loads(resp.get_data(as_text=True))
|
||||
assert json_resp['data']['sms_count'] == 1
|
||||
|
||||
|
||||
def test_fragment_count_from_greater_than_to(notify_api, sample_provider_statistics):
|
||||
with notify_api.test_request_context():
|
||||
with notify_api.test_client() as client:
|
||||
today_str = date.today().strftime('%Y-%m-%d')
|
||||
yesterday_str = date.today() - timedelta(days=1)
|
||||
endpoint = url_for(
|
||||
'service.get_service_provider_aggregate_statistics',
|
||||
service_id=str(sample_provider_statistics.service.id),
|
||||
date_from=today_str,
|
||||
date_to=yesterday_str)
|
||||
auth_header = create_authorization_header(
|
||||
path=endpoint,
|
||||
method='GET'
|
||||
)
|
||||
resp = client.get(
|
||||
endpoint,
|
||||
headers=[auth_header]
|
||||
)
|
||||
assert resp.status_code == 400
|
||||
json_resp = json.loads(resp.get_data(as_text=True))
|
||||
assert 'date_from needs to be greater than date_to' in json_resp['message']['_schema']
|
||||
|
||||
|
||||
def test_fragment_count_in_future(notify_api, sample_provider_statistics):
|
||||
with notify_api.test_request_context():
|
||||
with notify_api.test_client() as client:
|
||||
tomorrow_str = (date.today() + timedelta(days=1)).strftime('%Y-%m-%d')
|
||||
endpoint = url_for(
|
||||
'service.get_service_provider_aggregate_statistics',
|
||||
service_id=str(sample_provider_statistics.service.id),
|
||||
date_from=tomorrow_str)
|
||||
auth_header = create_authorization_header(
|
||||
path=endpoint,
|
||||
method='GET'
|
||||
)
|
||||
resp = client.get(
|
||||
endpoint,
|
||||
headers=[auth_header]
|
||||
)
|
||||
assert resp.status_code == 400
|
||||
json_resp = json.loads(resp.get_data(as_text=True))
|
||||
assert 'Date cannot be in the future' in json_resp['message']['date_from']
|
||||
Reference in New Issue
Block a user