diff --git a/migrations/versions/0225_letter_class.py b/migrations/versions/0226_letter_class.py similarity index 75% rename from migrations/versions/0225_letter_class.py rename to migrations/versions/0226_letter_class.py index 225426b57..eef9bcb5d 100644 --- a/migrations/versions/0225_letter_class.py +++ b/migrations/versions/0226_letter_class.py @@ -1,7 +1,7 @@ """ -Revision ID: 0225_letter_class -Revises: 0224_returned_letter_status +Revision ID: 0226_letter_class +Revises: 0225_another_letter_org Create Date: 2018-09-13 16:23:59.168877 """ @@ -9,8 +9,8 @@ from alembic import op import sqlalchemy as sa -revision = '0225_letter_class' -down_revision = '0224_returned_letter_status' +revision = '0226_letter_class' +down_revision = '0225_another_letter_org' def upgrade(): diff --git a/tests/app/dao/test_services_dao.py b/tests/app/dao/test_services_dao.py index eb2f1ff18..d8ee6ff4c 100644 --- a/tests/app/dao/test_services_dao.py +++ b/tests/app/dao/test_services_dao.py @@ -1,6 +1,5 @@ from datetime import datetime, timedelta import uuid -import functools import pytest from sqlalchemy.orm.exc import FlushError, NoResultFound @@ -32,7 +31,8 @@ from app.dao.services_dao import ( dao_fetch_active_users_for_service, dao_fetch_service_by_inbound_number, dao_fetch_monthly_historical_stats_by_template, - dao_fetch_monthly_historical_usage_by_template_for_service) + dao_fetch_monthly_historical_usage_by_template_for_service +) from app.dao.service_permissions_dao import dao_add_service_permission, dao_remove_service_permission from app.dao.users_dao import save_model_user from app.models import ( @@ -67,13 +67,11 @@ from tests.app.db import ( create_service_with_inbound_number, create_service_with_defined_sms_sender, create_template, - create_notification as create_notification_db -) -from tests.app.conftest import ( - sample_notification as create_notification, - sample_notification_history as create_notification_history, - sample_email_template as create_email_template, - sample_template as create_sample_template + create_notification, + create_api_key, + create_sample_inbound_numbers, + create_code, + create_invited_user ) @@ -82,17 +80,17 @@ def test_should_have_decorated_services_dao_functions(): assert dao_fetch_stats_for_service.__wrapped__.__name__ == 'dao_fetch_stats_for_service' # noqa -def test_create_service(sample_user): +def test_create_service(notify_db_session): + user = create_user() assert Service.query.count() == 0 service = Service(name="service_name", email_from="email_from", message_limit=1000, restricted=False, organisation_type='central', - created_by=sample_user) - dao_create_service(service, sample_user) + created_by=user) + dao_create_service(service, user) assert Service.query.count() == 1 - service_db = Service.query.one() assert service_db.name == "service_name" assert service_db.id == service.id @@ -102,68 +100,72 @@ def test_create_service(sample_user): assert service_db.prefix_sms is True assert service_db.letter_class == 'second' assert service.active is True - assert sample_user in service_db.users + assert user in service_db.users assert service_db.organisation_type == 'central' assert service_db.crown is True -def test_cannot_create_two_services_with_same_name(sample_user): +def test_cannot_create_two_services_with_same_name(notify_db_session): + user = create_user() assert Service.query.count() == 0 service1 = Service(name="service_name", email_from="email_from1", message_limit=1000, restricted=False, - created_by=sample_user,) + created_by=user, ) service2 = Service(name="service_name", email_from="email_from2", message_limit=1000, restricted=False, - created_by=sample_user) + created_by=user) with pytest.raises(IntegrityError) as excinfo: - dao_create_service(service1, sample_user) - dao_create_service(service2, sample_user) + dao_create_service(service1, user) + dao_create_service(service2, user) assert 'duplicate key value violates unique constraint "services_name_key"' in str(excinfo.value) -def test_cannot_create_two_services_with_same_email_from(sample_user): +def test_cannot_create_two_services_with_same_email_from(notify_db_session): + user = create_user() assert Service.query.count() == 0 service1 = Service(name="service_name1", email_from="email_from", message_limit=1000, restricted=False, - created_by=sample_user) + created_by=user) service2 = Service(name="service_name2", email_from="email_from", message_limit=1000, restricted=False, - created_by=sample_user) + created_by=user) with pytest.raises(IntegrityError) as excinfo: - dao_create_service(service1, sample_user) - dao_create_service(service2, sample_user) + dao_create_service(service1, user) + dao_create_service(service2, user) assert 'duplicate key value violates unique constraint "services_email_from_key"' in str(excinfo.value) -def test_cannot_create_service_with_no_user(notify_db_session, sample_user): +def test_cannot_create_service_with_no_user(notify_db_session): + user = create_user() assert Service.query.count() == 0 service = Service(name="service_name", email_from="email_from", message_limit=1000, restricted=False, - created_by=sample_user) + created_by=user) with pytest.raises(FlushError) as excinfo: dao_create_service(service, None) assert "Can't flush None value found in collection Service.users" in str(excinfo.value) -def test_should_add_user_to_service(sample_user): +def test_should_add_user_to_service(notify_db_session): + user = create_user() service = Service(name="service_name", email_from="email_from", message_limit=1000, restricted=False, - created_by=sample_user) - dao_create_service(service, sample_user) - assert sample_user in Service.query.first().users + created_by=user) + dao_create_service(service, user) + assert user in Service.query.first().users new_user = User( name='Test User', email_address='new_user@digital.cabinet-office.gov.uk', @@ -175,13 +177,14 @@ def test_should_add_user_to_service(sample_user): assert new_user in Service.query.first().users -def test_should_remove_user_from_service(sample_user): +def test_should_remove_user_from_service(notify_db_session): + user = create_user() service = Service(name="service_name", email_from="email_from", message_limit=1000, restricted=False, - created_by=sample_user) - dao_create_service(service, sample_user) + created_by=user) + dao_create_service(service, user) new_user = User( name='Test User', email_address='new_user@digital.cabinet-office.gov.uk', @@ -195,21 +198,21 @@ def test_should_remove_user_from_service(sample_user): assert new_user not in Service.query.first().users -def test_get_all_services(service_factory): - service_factory.get('service 1', email_from='service.1') +def test_get_all_services(notify_db_session): + create_service(service_name='service 1', email_from='service.1') assert len(dao_fetch_all_services()) == 1 assert dao_fetch_all_services()[0].name == 'service 1' - service_factory.get('service 2', email_from='service.2') + create_service(service_name='service 2', email_from='service.2') assert len(dao_fetch_all_services()) == 2 assert dao_fetch_all_services()[1].name == 'service 2' -def test_get_all_services_should_return_in_created_order(service_factory): - service_factory.get('service 1', email_from='service.1') - service_factory.get('service 2', email_from='service.2') - service_factory.get('service 3', email_from='service.3') - service_factory.get('service 4', email_from='service.4') +def test_get_all_services_should_return_in_created_order(notify_db_session): + create_service(service_name='service 1', email_from='service.1') + create_service(service_name='service 2', email_from='service.2') + create_service(service_name='service 3', email_from='service.3') + create_service(service_name='service 4', email_from='service.4') assert len(dao_fetch_all_services()) == 4 assert dao_fetch_all_services()[0].name == 'service 1' assert dao_fetch_all_services()[1].name == 'service 2' @@ -221,20 +224,22 @@ def test_get_all_services_should_return_empty_list_if_no_services(): assert len(dao_fetch_all_services()) == 0 -def test_get_all_services_for_user(service_factory, sample_user): - service_factory.get('service 1', sample_user, email_from='service.1') - service_factory.get('service 2', sample_user, email_from='service.2') - service_factory.get('service 3', sample_user, email_from='service.3') - assert len(dao_fetch_all_services_by_user(sample_user.id)) == 3 - assert dao_fetch_all_services_by_user(sample_user.id)[0].name == 'service 1' - assert dao_fetch_all_services_by_user(sample_user.id)[1].name == 'service 2' - assert dao_fetch_all_services_by_user(sample_user.id)[2].name == 'service 3' +def test_get_all_services_for_user(notify_db_session): + user = create_user() + create_service(service_name='service 1', user=user, email_from='service.1') + create_service(service_name='service 2', user=user, email_from='service.2') + create_service(service_name='service 3', user=user, email_from='service.3') + assert len(dao_fetch_all_services_by_user(user.id)) == 3 + assert dao_fetch_all_services_by_user(user.id)[0].name == 'service 1' + assert dao_fetch_all_services_by_user(user.id)[1].name == 'service 2' + assert dao_fetch_all_services_by_user(user.id)[2].name == 'service 3' -def test_get_all_only_services_user_has_access_to(service_factory, sample_user): - service_factory.get('service 1', sample_user, email_from='service.1') - service_factory.get('service 2', sample_user, email_from='service.2') - service_3 = service_factory.get('service 3', sample_user, email_from='service.3') +def test_get_all_only_services_user_has_access_to(notify_db_session): + user = create_user() + create_service(service_name='service 1', user=user, email_from='service.1') + create_service(service_name='service 2', user=user, email_from='service.2') + service_3 = create_service(service_name='service 3', user=user, email_from='service.3') new_user = User( name='Test User', email_address='new_user@digital.cabinet-office.gov.uk', @@ -243,16 +248,17 @@ def test_get_all_only_services_user_has_access_to(service_factory, sample_user): ) save_model_user(new_user) dao_add_user_to_service(service_3, new_user) - assert len(dao_fetch_all_services_by_user(sample_user.id)) == 3 - assert dao_fetch_all_services_by_user(sample_user.id)[0].name == 'service 1' - assert dao_fetch_all_services_by_user(sample_user.id)[1].name == 'service 2' - assert dao_fetch_all_services_by_user(sample_user.id)[2].name == 'service 3' + assert len(dao_fetch_all_services_by_user(user.id)) == 3 + assert dao_fetch_all_services_by_user(user.id)[0].name == 'service 1' + assert dao_fetch_all_services_by_user(user.id)[1].name == 'service 2' + assert dao_fetch_all_services_by_user(user.id)[2].name == 'service 3' assert len(dao_fetch_all_services_by_user(new_user.id)) == 1 assert dao_fetch_all_services_by_user(new_user.id)[0].name == 'service 3' -def test_get_all_user_services_should_return_empty_list_if_no_services_for_user(sample_user): - assert len(dao_fetch_all_services_by_user(sample_user.id)) == 0 +def test_get_all_user_services_should_return_empty_list_if_no_services_for_user(notify_db_session): + user = create_user() + assert len(dao_fetch_all_services_by_user(user.id)) == 0 def test_get_service_by_id_returns_none_if_no_service(notify_db): @@ -261,13 +267,13 @@ def test_get_service_by_id_returns_none_if_no_service(notify_db): assert 'No row was found for one()' in str(e) -def test_get_service_by_id_returns_service(service_factory): - service = service_factory.get('testing', email_from='testing') +def test_get_service_by_id_returns_service(notify_db_session): + service = create_service(service_name='testing', email_from='testing') assert dao_fetch_service_by_id(service.id).name == 'testing' -def test_create_service_returns_service_with_default_permissions(service_factory): - service = service_factory.get('testing', email_from='testing') +def test_create_service_returns_service_with_default_permissions(notify_db_session): + service = create_service(service_name='testing', email_from='testing', service_permissions=None) service = dao_fetch_service_by_id(service.id) _assert_service_permissions(service.permissions, ( @@ -280,28 +286,31 @@ def test_create_service_returns_service_with_default_permissions(service_factory (EMAIL_TYPE, (SMS_TYPE, LETTER_TYPE)), ]) def test_remove_permission_from_service_by_id_returns_service_with_correct_permissions( - sample_service, permission_to_remove, permission_remaining + notify_db_session, permission_to_remove, permission_remaining ): - dao_remove_service_permission(service_id=sample_service.id, permission=permission_to_remove) + service = create_service(service_permissions=None) + dao_remove_service_permission(service_id=service.id, permission=permission_to_remove) - service = dao_fetch_service_by_id(sample_service.id) + service = dao_fetch_service_by_id(service.id) _assert_service_permissions(service.permissions, ( permission_remaining + (INTERNATIONAL_SMS_TYPE,) )) -def test_removing_all_permission_returns_service_with_no_permissions(sample_service): - dao_remove_service_permission(service_id=sample_service.id, permission=SMS_TYPE) - dao_remove_service_permission(service_id=sample_service.id, permission=EMAIL_TYPE) - dao_remove_service_permission(service_id=sample_service.id, permission=LETTER_TYPE) - dao_remove_service_permission(service_id=sample_service.id, permission=INTERNATIONAL_SMS_TYPE) +def test_removing_all_permission_returns_service_with_no_permissions(notify_db_session): + service = create_service() + dao_remove_service_permission(service_id=service.id, permission=SMS_TYPE) + dao_remove_service_permission(service_id=service.id, permission=EMAIL_TYPE) + dao_remove_service_permission(service_id=service.id, permission=LETTER_TYPE) + dao_remove_service_permission(service_id=service.id, permission=INTERNATIONAL_SMS_TYPE) - service = dao_fetch_service_by_id(sample_service.id) + service = dao_fetch_service_by_id(service.id) assert len(service.permissions) == 0 -def test_remove_service_does_not_remove_service_permission_types(sample_service): - delete_service_and_all_associated_db_objects(sample_service) +def test_remove_service_does_not_remove_service_permission_types(notify_db_session): + service = create_service() + delete_service_and_all_associated_db_objects(service) services = dao_fetch_all_services() assert len(services) == 0 @@ -327,15 +336,16 @@ def test_create_service_by_id_adding_and_removing_letter_returns_service_without )) -def test_create_service_creates_a_history_record_with_current_data(sample_user): +def test_create_service_creates_a_history_record_with_current_data(notify_db_session): + user = create_user() assert Service.query.count() == 0 assert Service.get_history_model().query.count() == 0 service = Service(name="service_name", email_from="email_from", message_limit=1000, restricted=False, - created_by=sample_user) - dao_create_service(service, sample_user) + created_by=user) + dao_create_service(service, user) assert Service.query.count() == 1 assert Service.get_history_model().query.count() == 1 @@ -347,22 +357,23 @@ def test_create_service_creates_a_history_record_with_current_data(sample_user): assert service_from_db.version == 1 assert service_from_db.version == service_history.version assert service_from_db.letter_class == 'second' - assert sample_user.id == service_history.created_by_id + assert user.id == service_history.created_by_id assert service_from_db.created_by.id == service_history.created_by_id assert service_from_db.dvla_organisation_id == DVLA_ORG_HM_GOVERNMENT assert service_history.dvla_organisation_id == DVLA_ORG_HM_GOVERNMENT assert service_history.letter_class == 'second' -def test_update_service_creates_a_history_record_with_current_data(sample_user): +def test_update_service_creates_a_history_record_with_current_data(notify_db_session): + user = create_user() assert Service.query.count() == 0 assert Service.get_history_model().query.count() == 0 service = Service(name="service_name", email_from="email_from", message_limit=1000, restricted=False, - created_by=sample_user) - dao_create_service(service, sample_user) + created_by=user) + dao_create_service(service, user) assert Service.query.count() == 1 assert Service.query.first().version == 1 @@ -382,15 +393,16 @@ def test_update_service_creates_a_history_record_with_current_data(sample_user): assert Service.get_history_model().query.filter_by(name='updated_service_name').one().version == 2 -def test_update_service_permission_creates_a_history_record_with_current_data(sample_user): +def test_update_service_permission_creates_a_history_record_with_current_data(notify_db_session): + user = create_user() assert Service.query.count() == 0 assert Service.get_history_model().query.count() == 0 service = Service(name="service_name", email_from="email_from", message_limit=1000, restricted=False, - created_by=sample_user) - dao_create_service(service, sample_user, service_permissions=[ + created_by=user) + dao_create_service(service, user, service_permissions=[ SMS_TYPE, EMAIL_TYPE, INTERNATIONAL_SMS_TYPE, @@ -427,60 +439,59 @@ def test_update_service_permission_creates_a_history_record_with_current_data(sa assert Service.get_history_model().query.filter_by(name='service_name').all()[2].version == 3 -def test_update_service_set_letter_class_to_default(sample_user): +def test_update_service_set_letter_class_to_default(notify_db_session): + user = create_user() assert Service.query.count() == 0 assert Service.get_history_model().query.count() == 0 service = Service(name="service_name", email_from="email_from", message_limit=1000, restricted=False, - created_by=sample_user) - dao_create_service(service, sample_user) + created_by=user) + dao_create_service(service, user) service_from_db = Service.query.first() service_from_db.letter_class = None dao_update_service(service_from_db) service_with_update = Service.query.first() assert service_with_update.letter_class == 'second' - service_history_with_update = Service.get_history_model().query.filter_by(version=2) + service_history_with_update = Service.get_history_model().query.filter_by(version=2).one() assert service_history_with_update.letter_class == 'second' -def test_create_service_and_history_is_transactional(sample_user): +def test_create_service_and_history_is_transactional(notify_db_session): + user = create_user() assert Service.query.count() == 0 assert Service.get_history_model().query.count() == 0 service = Service(name=None, email_from="email_from", message_limit=1000, restricted=False, - created_by=sample_user) + created_by=user) with pytest.raises(IntegrityError) as excinfo: - dao_create_service(service, sample_user) + dao_create_service(service, user) assert 'column "name" violates not-null constraint' in str(excinfo.value) assert Service.query.count() == 0 assert Service.get_history_model().query.count() == 0 -def test_delete_service_and_associated_objects(notify_db, - notify_db_session, - sample_user, - sample_service, - sample_email_code, - sample_sms_code, - sample_template, - sample_email_template, - sample_api_key, - sample_job, - sample_notification, - sample_invited_user, - sample_permission): +def test_delete_service_and_associated_objects(notify_db_session): + user = create_user() + service = create_service(user=user, service_permissions=None) + create_code(code_type='email', usr=user) + create_code(code_type='sms', usr=user) + template = create_template(service=service) + api_key = create_api_key(service=service) + create_notification(template=template, api_key=api_key) + create_invited_user(service=service) + assert ServicePermission.query.count() == len(( SMS_TYPE, EMAIL_TYPE, LETTER_TYPE, INTERNATIONAL_SMS_TYPE )) - delete_service_and_all_associated_db_objects(sample_service) + delete_service_and_all_associated_db_objects(service) assert VerifyCode.query.count() == 0 assert ApiKey.query.count() == 0 assert ApiKey.get_history_model().query.count() == 0 @@ -496,17 +507,18 @@ def test_delete_service_and_associated_objects(notify_db, assert ServicePermission.query.count() == 0 -def test_add_existing_user_to_another_service_doesnot_change_old_permissions(sample_user): +def test_add_existing_user_to_another_service_doesnot_change_old_permissions(notify_db_session): + user = create_user() service_one = Service(name="service_one", email_from="service_one", message_limit=1000, restricted=False, - created_by=sample_user) + created_by=user) - dao_create_service(service_one, sample_user) - assert sample_user.id == service_one.users[0].id - test_user_permissions = Permission.query.filter_by(service=service_one, user=sample_user).all() + dao_create_service(service_one, user) + assert user.id == service_one.users[0].id + test_user_permissions = Permission.query.filter_by(service=service_one, user=user).all() assert len(test_user_permissions) == 8 other_user = User( @@ -544,22 +556,26 @@ def test_add_existing_user_to_another_service_doesnot_change_old_permissions(sam assert len(other_user_service_two_permissions) == 8 -def test_fetch_stats_filters_on_service(sample_notification): +def test_fetch_stats_filters_on_service(notify_db_session): + service_one = create_service() + create_notification(template=create_template(service=service_one)) + service_two = Service(name="service_two", - created_by=sample_notification.service.created_by, + created_by=service_one.created_by, email_from="hello", restricted=False, message_limit=1000) - dao_create_service(service_two, sample_notification.service.created_by) + dao_create_service(service_two, service_one.created_by) stats = dao_fetch_stats_for_service(service_two.id, 7) assert len(stats) == 0 -def test_fetch_stats_ignores_historical_notification_data(sample_notification): - service_id = sample_notification.service.id +def test_fetch_stats_ignores_historical_notification_data(notify_db_session): + notification = create_notification(template=create_template(service=create_service())) + service_id = notification.service.id - db.session.delete(sample_notification) + db.session.delete(notification) assert Notification.query.count() == 0 assert NotificationHistory.query.count() == 1 @@ -568,14 +584,17 @@ def test_fetch_stats_ignores_historical_notification_data(sample_notification): assert len(stats) == 0 -def test_fetch_stats_counts_correctly(notify_db, notify_db_session, sample_template, sample_email_template): +def test_fetch_stats_counts_correctly(notify_db_session): + service = create_service() + sms_template = create_template(service=service) + email_template = create_template(service=service, template_type='email') # two created email, one failed email, and one created sms - create_notification(notify_db, notify_db_session, template=sample_email_template, status='created') - create_notification(notify_db, notify_db_session, template=sample_email_template, status='created') - create_notification(notify_db, notify_db_session, template=sample_email_template, status='technical-failure') - create_notification(notify_db, notify_db_session, template=sample_template, status='created') + create_notification(template=email_template, status='created') + create_notification(template=email_template, status='created') + create_notification(template=email_template, status='technical-failure') + create_notification(template=sms_template, status='created') - stats = dao_fetch_stats_for_service(sample_template.service_id, 7) + stats = dao_fetch_stats_for_service(sms_template.service_id, 7) stats = sorted(stats, key=lambda x: (x.notification_type, x.status)) assert len(stats) == 3 @@ -592,45 +611,42 @@ def test_fetch_stats_counts_correctly(notify_db, notify_db_session, sample_templ assert stats[2].count == 1 -def test_fetch_stats_counts_should_ignore_team_key( - notify_db, - notify_db_session, - sample_template, - sample_api_key, - sample_test_api_key, - sample_team_api_key -): - # two created email, one failed email, and one created sms - create_notification(notify_db, notify_db_session, api_key=sample_api_key, key_type=sample_api_key.key_type) - create_notification( - notify_db, notify_db_session, api_key=sample_test_api_key, key_type=sample_test_api_key.key_type) - create_notification( - notify_db, notify_db_session, api_key=sample_team_api_key, key_type=sample_team_api_key.key_type) - create_notification( - notify_db, notify_db_session) +def test_fetch_stats_counts_should_ignore_team_key(notify_db_session): + service = create_service() + template = create_template(service=service) + live_api_key = create_api_key(service=service, key_type=KEY_TYPE_NORMAL) + team_api_key = create_api_key(service=service, key_type=KEY_TYPE_TEAM) + test_api_key = create_api_key(service=service, key_type=KEY_TYPE_TEST) - stats = dao_fetch_stats_for_service(sample_template.service_id, 7) + # two created email, one failed email, and one created sms + create_notification(template=template, api_key=live_api_key, key_type=live_api_key.key_type) + create_notification(template=template, api_key=test_api_key, key_type=test_api_key.key_type) + create_notification(template=template, api_key=team_api_key, key_type=team_api_key.key_type) + create_notification(template=template) + + stats = dao_fetch_stats_for_service(template.service_id, 7) assert len(stats) == 1 assert stats[0].notification_type == 'sms' assert stats[0].status == 'created' assert stats[0].count == 3 -def test_fetch_stats_for_today_only_includes_today(notify_db, notify_db_session, sample_template): +def test_fetch_stats_for_today_only_includes_today(notify_db_session): + template = create_template(service=create_service()) # two created email, one failed email, and one created sms with freeze_time('2001-01-01T23:59:00'): # just_before_midnight_yesterday - create_notification(notify_db, None, to_field='1', status='delivered') + create_notification(template=template, to_field='1', status='delivered') with freeze_time('2001-01-02T00:01:00'): # just_after_midnight_today - create_notification(notify_db, None, to_field='2', status='failed') + create_notification(template=template, to_field='2', status='failed') with freeze_time('2001-01-02T12:00:00'): # right_now - create_notification(notify_db, None, to_field='3', status='created') + create_notification(template=template, to_field='3', status='created') - stats = dao_fetch_todays_stats_for_service(sample_template.service_id) + stats = dao_fetch_todays_stats_for_service(template.service_id) stats = {row.status: row.count for row in stats} assert 'delivered' not in stats @@ -649,11 +665,11 @@ def test_fetch_stats_for_today_only_includes_today(notify_db, notify_db_session, ('Sunday 8th July 2018 12:00', 10, 1), ]) def test_fetch_stats_should_not_gather_notifications_older_than_7_days( - sample_template, created_at, limit_days, rows_returned + sample_template, created_at, limit_days, rows_returned ): # It's monday today. Things made last monday should still show with freeze_time(created_at): - create_notification_db(sample_template,) + create_notification(sample_template, ) with freeze_time('Monday 16th July 2018 12:00'): stats = dao_fetch_stats_for_service(sample_template.service_id, limit_days) @@ -661,10 +677,9 @@ def test_fetch_stats_should_not_gather_notifications_older_than_7_days( assert len(stats) == rows_returned -def test_dao_fetch_todays_total_message_count_returns_count_for_today(notify_db, - notify_db_session, - sample_notification): - assert fetch_todays_total_message_count(sample_notification.service.id) == 1 +def test_dao_fetch_todays_total_message_count_returns_count_for_today(notify_db_session): + notification = create_notification(template=create_template(service=create_service())) + assert fetch_todays_total_message_count(notification.service.id) == 1 def test_dao_fetch_todays_total_message_count_returns_0_when_no_messages_for_today(notify_db, @@ -672,18 +687,18 @@ def test_dao_fetch_todays_total_message_count_returns_0_when_no_messages_for_tod assert fetch_todays_total_message_count(uuid.uuid4()) == 0 -def test_dao_fetch_todays_stats_for_all_services_includes_all_services(notify_db, notify_db_session, service_factory): +def test_dao_fetch_todays_stats_for_all_services_includes_all_services(notify_db_session): # two services, each with an email and sms notification - service1 = service_factory.get('service 1', email_from='service.1') - service2 = service_factory.get('service 2', email_from='service.2') - create_notification(notify_db, notify_db_session, service=service1) - create_notification(notify_db, notify_db_session, service=service2) - create_notification( - notify_db, notify_db_session, service=service1, - template=create_email_template(notify_db, notify_db_session, service=service1)) - create_notification( - notify_db, notify_db_session, service=service2, - template=create_email_template(notify_db, notify_db_session, service=service2)) + service1 = create_service(service_name='service 1', email_from='service.1') + service2 = create_service(service_name='service 2', email_from='service.2') + template_email_one = create_template(service=service1, template_type='email') + template_sms_one = create_template(service=service1, template_type='sms') + template_email_two = create_template(service=service2, template_type='email') + template_sms_two = create_template(service=service2, template_type='sms') + create_notification(template=template_email_one) + create_notification(template=template_sms_one) + create_notification(template=template_email_two) + create_notification(template=template_sms_two) stats = dao_fetch_todays_stats_for_all_services() @@ -692,14 +707,15 @@ def test_dao_fetch_todays_stats_for_all_services_includes_all_services(notify_db assert stats == sorted(stats, key=lambda x: x.service_id) -def test_dao_fetch_todays_stats_for_all_services_only_includes_today(notify_db, notify_db_session): +def test_dao_fetch_todays_stats_for_all_services_only_includes_today(notify_db_session): + template = create_template(service=create_service()) with freeze_time('2001-01-01T23:59:00'): # just_before_midnight_yesterday - create_notification(notify_db, None, to_field='1', status='delivered') + create_notification(template=template, to_field='1', status='delivered') with freeze_time('2001-01-02T00:01:00'): # just_after_midnight_today - create_notification(notify_db, None, to_field='2', status='failed') + create_notification(template=template, to_field='2', status='failed') with freeze_time('2001-01-02T12:00:00'): stats = dao_fetch_todays_stats_for_all_services() @@ -709,18 +725,19 @@ def test_dao_fetch_todays_stats_for_all_services_only_includes_today(notify_db, assert stats['failed'] == 1 -def test_dao_fetch_todays_stats_for_all_services_groups_correctly(notify_db, notify_db_session, service_factory): - service1 = service_factory.get('service 1', email_from='service.1') - service2 = service_factory.get('service 2', email_from='service.2') +def test_dao_fetch_todays_stats_for_all_services_groups_correctly(notify_db, notify_db_session): + service1 = create_service(service_name='service 1', email_from='service.1') + service2 = create_service(service_name='service 2', email_from='service.2') + template_sms = create_template(service=service1) + template_email = create_template(service=service1, template_type='email') + template_two = create_template(service=service2) # service1: 2 sms with status "created" and one "failed", and one email - create_notification(notify_db, notify_db_session, service=service1) - create_notification(notify_db, notify_db_session, service=service1) - create_notification(notify_db, notify_db_session, service=service1, status='failed') - create_notification( - notify_db, notify_db_session, service=service1, - template=create_email_template(notify_db, notify_db_session, service=service1)) + create_notification(template=template_sms) + create_notification(template=template_sms) + create_notification(template=template_sms, status='failed') + create_notification(template=template_email) # service2: 1 sms "created" - create_notification(notify_db, notify_db_session, service=service2) + create_notification(template=template_two) stats = dao_fetch_todays_stats_for_all_services() assert len(stats) == 4 @@ -734,10 +751,11 @@ def test_dao_fetch_todays_stats_for_all_services_groups_correctly(notify_db, not service2.created_at, 'sms', 'created', 1) in stats -def test_dao_fetch_todays_stats_for_all_services_includes_all_keys_by_default(notify_db, notify_db_session): - create_notification(notify_db, notify_db_session, key_type=KEY_TYPE_NORMAL) - create_notification(notify_db, notify_db_session, key_type=KEY_TYPE_TEAM) - create_notification(notify_db, notify_db_session, key_type=KEY_TYPE_TEST) +def test_dao_fetch_todays_stats_for_all_services_includes_all_keys_by_default(notify_db_session): + template = create_template(service=create_service()) + create_notification(template=template, key_type=KEY_TYPE_NORMAL) + create_notification(template=template, key_type=KEY_TYPE_TEAM) + create_notification(template=template, key_type=KEY_TYPE_TEST) stats = dao_fetch_todays_stats_for_all_services() @@ -745,10 +763,11 @@ def test_dao_fetch_todays_stats_for_all_services_includes_all_keys_by_default(no assert stats[0].count == 3 -def test_dao_fetch_todays_stats_for_all_services_can_exclude_from_test_key(notify_db, notify_db_session): - create_notification(notify_db, notify_db_session, key_type=KEY_TYPE_NORMAL) - create_notification(notify_db, notify_db_session, key_type=KEY_TYPE_TEAM) - create_notification(notify_db, notify_db_session, key_type=KEY_TYPE_TEST) +def test_dao_fetch_todays_stats_for_all_services_can_exclude_from_test_key(notify_db_session): + template = create_template(service=create_service()) + create_notification(template=template, key_type=KEY_TYPE_NORMAL) + create_notification(template=template, key_type=KEY_TYPE_TEAM) + create_notification(template=template, key_type=KEY_TYPE_TEST) stats = dao_fetch_todays_stats_for_all_services(include_from_test_key=False) @@ -756,12 +775,13 @@ def test_dao_fetch_todays_stats_for_all_services_can_exclude_from_test_key(notif assert stats[0].count == 2 -def test_fetch_stats_by_date_range_for_all_services(notify_db, notify_db_session): - create_notification(notify_db, notify_db_session, created_at=datetime.now() - timedelta(days=4)) - create_notification(notify_db, notify_db_session, created_at=datetime.now() - timedelta(days=3)) - result_one = create_notification(notify_db, notify_db_session, created_at=datetime.now() - timedelta(days=2)) - create_notification(notify_db, notify_db_session, created_at=datetime.now() - timedelta(days=1)) - create_notification(notify_db, notify_db_session, created_at=datetime.now()) +def test_fetch_stats_by_date_range_for_all_services(notify_db_session): + template = create_template(service=create_service()) + create_notification(template=template, created_at=datetime.now() - timedelta(days=4)) + create_notification(template=template, created_at=datetime.now() - timedelta(days=3)) + result_one = create_notification(template=template, created_at=datetime.now() - timedelta(days=2)) + create_notification(template=template, created_at=datetime.now() - timedelta(days=1)) + create_notification(template=template, created_at=datetime.now()) start_date = (datetime.utcnow() - timedelta(days=2)).date() end_date = (datetime.utcnow() - timedelta(days=1)).date() @@ -775,13 +795,15 @@ def test_fetch_stats_by_date_range_for_all_services(notify_db, notify_db_session @freeze_time('2001-01-01T23:59:00') -def test_dao_suspend_service_marks_service_as_inactive_and_expires_api_keys(sample_service, sample_api_key): - dao_suspend_service(sample_service.id) - service = Service.query.get(sample_service.id) +def test_dao_suspend_service_marks_service_as_inactive_and_expires_api_keys(notify_db_session): + service = create_service() + api_key = create_api_key(service=service) + dao_suspend_service(service.id) + service = Service.query.get(service.id) assert not service.active - assert service.name == sample_service.name + assert service.name == service.name - api_key = ApiKey.query.get(sample_api_key.id) + api_key = ApiKey.query.get(api_key.id) assert api_key.expiry_date == datetime(2001, 1, 1, 23, 59, 00) @@ -790,19 +812,18 @@ def test_dao_suspend_service_marks_service_as_inactive_and_expires_api_keys(samp ("9", "8", "1"), # a date range older than 9 days does not return test notifications. ("8", "4", "2")]) # a date range that starts more than 7 days ago @freeze_time('2017-10-23T00:00:00') -def test_fetch_stats_by_date_range_for_all_services_returns_test_notifications(notify_db, - notify_db_session, +def test_fetch_stats_by_date_range_for_all_services_returns_test_notifications(notify_db_session, start_delta, end_delta, expected): - create_noti = functools.partial(create_notification, notify_db, notify_db_session) - result_one = create_noti(created_at=datetime.now(), key_type='test') - create_noti(created_at=datetime.now() - timedelta(days=2), key_type='test') - create_noti(created_at=datetime.now() - timedelta(days=3), key_type='test') - create_noti(created_at=datetime.now() - timedelta(days=4), key_type='normal') - create_noti(created_at=datetime.now() - timedelta(days=4), key_type='test') - create_noti(created_at=datetime.now() - timedelta(days=8), key_type='test') - create_noti(created_at=datetime.now() - timedelta(days=8), key_type='normal') + template = create_template(service=create_service()) + result_one = create_notification(template=template, created_at=datetime.now(), key_type='test') + create_notification(template=template, created_at=datetime.now() - timedelta(days=2), key_type='test') + create_notification(template=template, created_at=datetime.now() - timedelta(days=3), key_type='test') + create_notification(template=template, created_at=datetime.now() - timedelta(days=4), key_type='normal') + create_notification(template=template, created_at=datetime.now() - timedelta(days=4), key_type='test') + create_notification(template=template, created_at=datetime.now() - timedelta(days=8), key_type='test') + create_notification(template=template, created_at=datetime.now() - timedelta(days=8), key_type='normal') start_date = (datetime.utcnow() - timedelta(days=int(start_delta))).date() end_date = (datetime.utcnow() - timedelta(days=int(end_delta))).date() @@ -821,17 +842,17 @@ def test_fetch_stats_by_date_range_for_all_services_returns_test_notifications(n ("8", "4", "2")]) # a date range that starts more than 7 days ago @freeze_time('2017-10-23T23:00:00') def test_fetch_stats_by_date_range_during_bst_hour_for_all_services_returns_test_notifications( - notify_db, notify_db_session, start_delta, end_delta, expected + notify_db_session, start_delta, end_delta, expected ): - create_noti = functools.partial(create_notification, notify_db, notify_db_session) - result_one = create_noti(created_at=datetime.now(), key_type='test') - create_noti(created_at=datetime.now() - timedelta(days=2), key_type='test') - create_noti(created_at=datetime.now() - timedelta(days=3), key_type='test') - create_noti(created_at=datetime.now() - timedelta(days=4), key_type='normal') - create_noti(created_at=datetime.now() - timedelta(days=4), key_type='test') - create_noti(created_at=datetime.now() - timedelta(days=8), key_type='normal') - create_noti(created_at=datetime.now() - timedelta(days=9), key_type='normal') - create_noti(created_at=datetime.now() - timedelta(days=9), key_type='test') + template = create_template(service=create_service()) + result_one = create_notification(template=template, created_at=datetime.now(), key_type='test') + create_notification(template=template, created_at=datetime.now() - timedelta(days=2), key_type='test') + create_notification(template=template, created_at=datetime.now() - timedelta(days=3), key_type='test') + create_notification(template=template, created_at=datetime.now() - timedelta(days=4), key_type='normal') + create_notification(template=template, created_at=datetime.now() - timedelta(days=4), key_type='test') + create_notification(template=template, created_at=datetime.now() - timedelta(days=8), key_type='normal') + create_notification(template=template, created_at=datetime.now() - timedelta(days=9), key_type='normal') + create_notification(template=template, created_at=datetime.now() - timedelta(days=9), key_type='test') start_date = (datetime.utcnow() - timedelta(days=int(start_delta))).date() end_date = (datetime.utcnow() - timedelta(days=int(end_delta))).date() @@ -845,19 +866,21 @@ def test_fetch_stats_by_date_range_during_bst_hour_for_all_services_returns_test @freeze_time('2001-01-01T23:59:00') -def test_dao_resume_service_marks_service_as_active_and_api_keys_are_still_revoked(sample_service, sample_api_key): - dao_suspend_service(sample_service.id) - service = Service.query.get(sample_service.id) +def test_dao_resume_service_marks_service_as_active_and_api_keys_are_still_revoked(notify_db_session): + service = create_service() + api_key = create_api_key(service=service) + dao_suspend_service(service.id) + service = Service.query.get(service.id) assert not service.active dao_resume_service(service.id) assert Service.query.get(service.id).active - api_key = ApiKey.query.get(sample_api_key.id) + api_key = ApiKey.query.get(api_key.id) assert api_key.expiry_date == datetime(2001, 1, 1, 23, 59, 00) -def test_dao_fetch_active_users_for_service_returns_active_only(notify_db, notify_db_session): +def test_dao_fetch_active_users_for_service_returns_active_only(notify_db_session): active_user = create_user(email='active@foo.com', state='active') pending_user = create_user(email='pending@foo.com', state='pending') service = create_service(user=active_user) @@ -913,7 +936,8 @@ def test_dao_fetch_service_by_inbound_number_with_inactive_number_returns_empty( assert service is None -def test_dao_allocating_inbound_number_shows_on_service(notify_db_session, sample_inbound_numbers): +def test_dao_allocating_inbound_numer_shows_on_service(notify_db_session): + create_sample_inbound_numbers() inbound_numbers = dao_get_available_inbound_numbers() service = create_service(service_name='test service') @@ -924,26 +948,19 @@ def test_dao_allocating_inbound_number_shows_on_service(notify_db_session, sampl def _assert_service_permissions(service_permissions, expected): - assert len(service_permissions) == len(expected) assert set(expected) == set(p.permission for p in service_permissions) -def test_dao_fetch_monthly_historical_stats_by_template(notify_db, notify_db_session): - notification_history = functools.partial( - create_notification_history, - notify_db, - notify_db_session, - status='delivered' - ) +def test_dao_fetch_monthly_historical_stats_by_template(notify_db_session): + service = create_service() + template_one = create_template(service=service, template_name='1') + template_two = create_template(service=service, template_name='2') - template_one = create_sample_template(notify_db, notify_db_session, template_name='1') - template_two = create_sample_template(notify_db, notify_db_session, template_name='2') - - notification_history(created_at=datetime(2017, 10, 1), sample_template=template_one) - notification_history(created_at=datetime(2016, 4, 1), sample_template=template_two) - notification_history(created_at=datetime(2016, 4, 1), sample_template=template_two) - notification_history(created_at=datetime.now(), sample_template=template_two) + create_notification(created_at=datetime(2017, 10, 1), template=template_one, status='delivered') + create_notification(created_at=datetime(2016, 4, 1), template=template_two, status='delivered') + create_notification(created_at=datetime(2016, 4, 1), template=template_two, status='delivered') + create_notification(created_at=datetime.now(), template=template_two, status='delivered') result = sorted(dao_fetch_monthly_historical_stats_by_template(), key=lambda x: (x.month, x.year)) @@ -961,23 +978,16 @@ def test_dao_fetch_monthly_historical_stats_by_template(notify_db, notify_db_ses def test_dao_fetch_monthly_historical_usage_by_template_for_service_no_stats_today( - notify_db, notify_db_session, ): - notification_history = functools.partial( - create_notification_history, - notify_db, - notify_db_session, - status='delivered' - ) + service = create_service() + template_one = create_template(service=service, template_name='1') + template_two = create_template(service=service, template_name='2') - template_one = create_sample_template(notify_db, notify_db_session, template_name='1') - template_two = create_sample_template(notify_db, notify_db_session, template_name='2') - - n = notification_history(created_at=datetime(2017, 10, 1), sample_template=template_one) - notification_history(created_at=datetime(2017, 4, 1), sample_template=template_two) - notification_history(created_at=datetime(2017, 4, 1), sample_template=template_two) - notification_history(created_at=datetime.now(), sample_template=template_two) + n = create_notification(created_at=datetime(2017, 10, 1), template=template_one, status='delivered') + create_notification(created_at=datetime(2017, 4, 1), template=template_two, status='delivered') + create_notification(created_at=datetime(2017, 4, 1), template=template_two, status='delivered') + create_notification(created_at=datetime.now(), template=template_two, status='delivered') daily_stats_template_usage_by_month() @@ -1005,29 +1015,23 @@ def test_dao_fetch_monthly_historical_usage_by_template_for_service_no_stats_tod @freeze_time("2017-11-10 11:09:00.000000") def test_dao_fetch_monthly_historical_usage_by_template_for_service_add_to_historical( - notify_db, notify_db_session, - sample_service ): - notification_history = functools.partial( - create_notification_history, - notify_db, - notify_db_session, - status='delivered' - ) - - template_one = create_sample_template(notify_db, notify_db_session, template_name='1') - template_two = create_sample_template(notify_db, notify_db_session, template_name='2') - template_three = create_sample_template(notify_db, notify_db_session, template_name='3') + service = create_service() + template_one = create_template(service=service, template_name='1') + template_two = create_template(service=service, template_name='2') + template_three = create_template(service=service, template_name='3') date = datetime.now() day = date.day month = date.month year = date.year - n = notification_history(created_at=datetime(2017, 9, 1), sample_template=template_one) - notification_history(created_at=datetime(year, month, day) - timedelta(days=1), sample_template=template_two) - notification_history(created_at=datetime(year, month, day) - timedelta(days=1), sample_template=template_two) + n = create_notification(created_at=datetime(2017, 9, 1), template=template_one, status='delivered') + create_notification(created_at=datetime(year, month, day) - timedelta(days=1), template=template_two, + status='delivered') + create_notification(created_at=datetime(year, month, day) - timedelta(days=1), template=template_two, + status='delivered') daily_stats_template_usage_by_month() @@ -1053,18 +1057,14 @@ def test_dao_fetch_monthly_historical_usage_by_template_for_service_add_to_histo assert result[1].count == 2 create_notification( - notify_db, - notify_db_session, - service=sample_service, template=template_three, - created_at=datetime.now() + created_at=datetime.now(), + status='delivered' ) create_notification( - notify_db, - notify_db_session, - service=sample_service, template=template_two, - created_at=datetime.now() + created_at=datetime.now(), + status='delivered' ) result = sorted( @@ -1098,29 +1098,20 @@ def test_dao_fetch_monthly_historical_usage_by_template_for_service_add_to_histo @freeze_time("2017-11-10 11:09:00.000000") def test_dao_fetch_monthly_historical_usage_by_template_for_service_does_add_old_notification( - notify_db, notify_db_session, - sample_service ): - notification_history = functools.partial( - create_notification_history, - notify_db, - notify_db_session, - status='delivered' - ) - - template_one = create_sample_template(notify_db, notify_db_session, template_name='1', template_type='email') - template_two = create_sample_template(notify_db, notify_db_session, template_name='2', template_type='sms') - template_three = create_sample_template(notify_db, notify_db_session, template_name='3', template_type='letter') + template_one, template_three, template_two = create_email_sms_letter_template() date = datetime.now() day = date.day month = date.month year = date.year - n = notification_history(created_at=datetime(2017, 9, 1), sample_template=template_one) - notification_history(created_at=datetime(year, month, day) - timedelta(days=1), sample_template=template_two) - notification_history(created_at=datetime(year, month, day) - timedelta(days=1), sample_template=template_two) + n = create_notification(created_at=datetime(2017, 9, 1), template=template_one, status='delivered') + create_notification(created_at=datetime(year, month, day) - timedelta(days=1), template=template_two, + status='delivered') + create_notification(created_at=datetime(year, month, day) - timedelta(days=1), template=template_two, + status='delivered') daily_stats_template_usage_by_month() @@ -1146,11 +1137,9 @@ def test_dao_fetch_monthly_historical_usage_by_template_for_service_does_add_old assert result[1].count == 2 create_notification( - notify_db, - notify_db_session, - service=sample_service, template=template_three, - created_at=datetime.utcnow() - timedelta(days=2) + created_at=datetime.utcnow() - timedelta(days=2), + status='delivered' ) result = sorted( @@ -1163,29 +1152,20 @@ def test_dao_fetch_monthly_historical_usage_by_template_for_service_does_add_old @freeze_time("2017-11-10 11:09:00.000000") def test_dao_fetch_monthly_historical_usage_by_template_for_service_get_this_year_only( - notify_db, notify_db_session, - sample_service ): - notification_history = functools.partial( - create_notification_history, - notify_db, - notify_db_session, - status='delivered' - ) - - template_one = create_sample_template(notify_db, notify_db_session, template_name='1', template_type='email') - template_two = create_sample_template(notify_db, notify_db_session, template_name='2', template_type='sms') - template_three = create_sample_template(notify_db, notify_db_session, template_name='3', template_type='letter') + template_one, template_three, template_two = create_email_sms_letter_template() date = datetime.now() day = date.day month = date.month year = date.year - n = notification_history(created_at=datetime(2016, 9, 1), sample_template=template_one) - notification_history(created_at=datetime(year, month, day) - timedelta(days=1), sample_template=template_two) - notification_history(created_at=datetime(year, month, day) - timedelta(days=1), sample_template=template_two) + n = create_notification(created_at=datetime(2016, 9, 1), template=template_one, status='delivered') + create_notification(created_at=datetime(year, month, day) - timedelta(days=1), template=template_two, + status='delivered') + create_notification(created_at=datetime(year, month, day) - timedelta(days=1), template=template_two, + status='delivered') daily_stats_template_usage_by_month() @@ -1204,9 +1184,6 @@ def test_dao_fetch_monthly_historical_usage_by_template_for_service_get_this_yea assert result[0].count == 2 create_notification( - notify_db, - notify_db_session, - service=sample_service, template=template_three, created_at=datetime.utcnow() - timedelta(days=2) ) @@ -1219,9 +1196,6 @@ def test_dao_fetch_monthly_historical_usage_by_template_for_service_get_this_yea assert len(result) == 1 create_notification( - notify_db, - notify_db_session, - service=sample_service, template=template_three, created_at=datetime.utcnow() ) @@ -1234,27 +1208,27 @@ def test_dao_fetch_monthly_historical_usage_by_template_for_service_get_this_yea assert len(result) == 2 +def create_email_sms_letter_template(): + service = create_service() + template_one = create_template(service=service, template_name='1', template_type='email') + template_two = create_template(service=service, template_name='2', template_type='sms') + template_three = create_template(service=service, template_name='3', template_type='letter') + return template_one, template_three, template_two + + @freeze_time("2017-11-10 11:09:00.000000") def test_dao_fetch_monthly_historical_usage_by_template_for_service_combined_historical_current( - notify_db, notify_db_session, - sample_service ): - notification_history = functools.partial( - create_notification_history, - notify_db, - notify_db_session, - status='delivered' - ) - - template_one = create_sample_template(notify_db, notify_db_session, template_name='1') + template_one = create_template(service=create_service(), template_name='1') date = datetime.now() day = date.day month = date.month year = date.year - n = notification_history(created_at=datetime(year, month, day) - timedelta(days=30), sample_template=template_one) + n = create_notification(status='delivered', created_at=datetime(year, month, day) - timedelta(days=30), + template=template_one) daily_stats_template_usage_by_month() @@ -1273,9 +1247,6 @@ def test_dao_fetch_monthly_historical_usage_by_template_for_service_combined_his assert result[0].count == 1 create_notification( - notify_db, - notify_db_session, - service=sample_service, template=template_one, created_at=datetime.utcnow() ) @@ -1304,17 +1275,11 @@ def test_dao_fetch_monthly_historical_usage_by_template_for_service_combined_his @freeze_time("2017-11-10 11:09:00.000000") def test_dao_fetch_monthly_historical_usage_by_template_for_service_does_not_return_double_precision_values( - notify_db, notify_db_session, - sample_service ): - - template_one = create_sample_template(notify_db, notify_db_session, template_name='1') + template_one = create_template(service=create_service()) n = create_notification( - notify_db, - notify_db_session, - service=sample_service, template=template_one, created_at=datetime.utcnow() ) @@ -1340,35 +1305,24 @@ def test_dao_fetch_monthly_historical_usage_by_template_for_service_does_not_ret def test_dao_fetch_monthly_historical_usage_by_template_for_service_returns_financial_year( notify_db, notify_db_session, - sample_service ): - template_one = create_sample_template(notify_db, notify_db_session, template_name='1', template_type='email') - - notification_history = functools.partial( - create_notification_history, - notify_db, - notify_db_session, - status='delivered', - sample_template=template_one - ) + service = create_service() + template_one = create_template(service=service, template_name='1', template_type='email') date = datetime.now() day = date.day year = date.year - notification_history(created_at=datetime(year - 1, 1, day)) - notification_history(created_at=datetime(year - 1, 3, day)) - notification_history(created_at=datetime(year - 1, 4, day)) - notification_history(created_at=datetime(year - 1, 5, day)) - notification_history(created_at=datetime(year, 1, day)) - notification_history(created_at=datetime(year, 2, day)) + create_notification(template=template_one, status='delivered', created_at=datetime(year - 1, 1, day)) + create_notification(template=template_one, status='delivered', created_at=datetime(year - 1, 3, day)) + create_notification(template=template_one, status='delivered', created_at=datetime(year - 1, 4, day)) + create_notification(template=template_one, status='delivered', created_at=datetime(year - 1, 5, day)) + create_notification(template=template_one, status='delivered', created_at=datetime(year, 1, day)) + create_notification(template=template_one, status='delivered', created_at=datetime(year, 2, day)) daily_stats_template_usage_by_month() n = create_notification( - notify_db, - notify_db_session, - service=sample_service, template=template_one, created_at=datetime.utcnow() ) @@ -1401,56 +1355,30 @@ def test_dao_fetch_monthly_historical_usage_by_template_for_service_returns_fina @freeze_time("2018-03-10 11:09:00.000000") def test_dao_fetch_monthly_historical_usage_by_template_for_service_only_returns_for_service( - notify_db, - notify_db_session, - sample_service + notify_db_session ): - template_one = create_sample_template(notify_db, notify_db_session, template_name='1', template_type='email') - - notification_history = functools.partial( - create_notification_history, - notify_db, - notify_db_session, - status='delivered', - sample_template=template_one - ) + template_one = create_template(service=create_service(), template_name='1', template_type='email') date = datetime.now() day = date.day year = date.year - notification_history(created_at=datetime(year, 1, day)) - notification_history(created_at=datetime(year, 2, day)) + create_notification(template=template_one, created_at=datetime(year, 1, day)) + create_notification(template=template_one, created_at=datetime(year, 2, day)) + create_notification(template=template_one, created_at=datetime(year, 3, day)) - service_two = create_service(service_name='other_service') - template_two = create_sample_template( - notify_db, - notify_db_session, - template_name='1', - template_type='email', - service=service_two - ) + service_two = create_service(service_name='other_service', user=create_user()) + template_two = create_template(service=service_two, template_name='1', template_type='email') + + create_notification(template=template_two) + create_notification(template=template_two) daily_stats_template_usage_by_month() - n = create_notification( - notify_db, - notify_db_session, - service=sample_service, - template=template_two, - created_at=datetime.utcnow() - ) - - create_notification( - notify_db, - notify_db_session, - service=service_two, - template=template_one, - created_at=datetime.utcnow() - ) + x = dao_fetch_monthly_historical_usage_by_template_for_service(template_one.service_id, 2017) result = sorted( - dao_fetch_monthly_historical_usage_by_template_for_service(n.service_id, 2017), + x, key=lambda x: (x.year, x.month) ) @@ -1465,17 +1393,18 @@ def test_dao_fetch_monthly_historical_usage_by_template_for_service_only_returns @freeze_time("2018-01-01 11:09:00.000000") -def test_dao_fetch_monthly_historical_usage_by_template_for_service_ignores_test_api_keys(sample_service): - template_1 = create_template(sample_service, template_name='1') - template_2 = create_template(sample_service, template_name='2') - template_3 = create_template(sample_service, template_name='3') +def test_dao_fetch_monthly_historical_usage_by_template_for_service_ignores_test_api_keys(notify_db_session): + service = create_service() + template_1 = create_template(service, template_name='1') + template_2 = create_template(service, template_name='2') + template_3 = create_template(service, template_name='3') - create_notification_db(template_1, key_type=KEY_TYPE_TEST) - create_notification_db(template_2, key_type=KEY_TYPE_TEAM) - create_notification_db(template_3, key_type=KEY_TYPE_NORMAL) + create_notification(template_1, key_type=KEY_TYPE_TEST) + create_notification(template_2, key_type=KEY_TYPE_TEAM) + create_notification(template_3, key_type=KEY_TYPE_NORMAL) results = sorted( - dao_fetch_monthly_historical_usage_by_template_for_service(sample_service.id, 2017), + dao_fetch_monthly_historical_usage_by_template_for_service(service.id, 2017), key=lambda x: x.name ) diff --git a/tests/app/db.py b/tests/app/db.py index 669a8666c..d829134af 100644 --- a/tests/app/db.py +++ b/tests/app/db.py @@ -2,6 +2,7 @@ from datetime import datetime, date import uuid from app import db +from app.dao.invited_user_dao import save_invited_user from app.dao.jobs_dao import dao_create_job from app.dao.service_data_retention_dao import insert_service_data_retention from app.dao.service_inbound_api_dao import save_service_inbound_api @@ -36,8 +37,9 @@ from app.models import ( FactBilling, FactNotificationStatus, Complaint, + InvitedUser ) -from app.dao.users_dao import save_model_user +from app.dao.users_dao import save_model_user, create_secret_code, create_user_code from app.dao.notifications_dao import ( dao_create_notification, dao_created_scheduled_notification @@ -660,3 +662,44 @@ def create_service_data_retention( days_of_retention=days_of_retention ) return data_retention + + +def create_sample_inbound_numbers(service=None): + if not service: + service = create_service(service_name='sample service 2') + service_2 = create_service(service_name='service 2 for inbound') + inbound_numbers = list() + inbound_numbers.append(create_inbound_number(number='1', provider='mmg')) + inbound_numbers.append(create_inbound_number(number='2', provider='mmg', active=False, service_id=service.id)) + inbound_numbers.append(create_inbound_number(number='3', provider='firetext', + service_id=service_2.id)) + return inbound_numbers + + +def create_code(code_type, usr=None, code=None): + if code is None: + code = create_secret_code() + if usr is None: + usr = create_user() + return create_user_code(usr, code, code_type), code + + +def create_invited_user(service=None, + to_email_address=None): + + if service is None: + service = create_service() + if to_email_address is None: + to_email_address = 'invited_user@digital.gov.uk' + + from_user = service.users[0] + + data = { + 'service': service, + 'email_address': to_email_address, + 'from_user': from_user, + 'permissions': 'send_messages,manage_service,manage_api_keys' + } + invited_user = InvitedUser(**data) + save_invited_user(invited_user) + return invited_user