def test_get_all_templates_for_service(service_factory): service_1 = service_factory.get('service 1', email_from='service.1') service_2 = service_factory.get('service 2', email_from='service.2') assert Template.query.count() == 2 assert len(dao_get_all_templates_for_service(service_1.id)) == 1 assert len(dao_get_all_templates_for_service(service_2.id)) == 1 create_template( service=service_1, template_name='Sample Template 1', template_type="sms", content="Template content", ) create_template( service=service_1, template_name='Sample Template 2', template_type="sms", content="Template content", ) create_template( service=service_2, template_name='Sample Template 3', template_type="sms", content="Template content", ) assert Template.query.count() == 5 assert len(dao_get_all_templates_for_service(service_1.id)) == 3 assert len(dao_get_all_templates_for_service(service_2.id)) == 2
def test_get_all_templates_for_service_is_alphabetised(sample_service): create_template( template_name="Sample Template 1", template_type="sms", content="Template content", service=sample_service, ) template_2 = create_template( template_name="Sample Template 2", template_type="sms", content="Template content", service=sample_service, ) create_template( template_name="Sample Template 3", template_type="sms", content="Template content", service=sample_service, ) assert Template.query.count() == 3 assert dao_get_all_templates_for_service( sample_service.id)[0].name == "Sample Template 1" assert dao_get_all_templates_for_service( sample_service.id)[1].name == "Sample Template 2" assert dao_get_all_templates_for_service( sample_service.id)[2].name == "Sample Template 3" template_2.name = "AAAAA Sample Template 2" dao_update_template(template_2) assert dao_get_all_templates_for_service( sample_service.id)[0].name == "AAAAA Sample Template 2" assert dao_get_all_templates_for_service( sample_service.id)[1].name == "Sample Template 1"
def test_get_all_templates_for_service_is_alphabetised(sample_service): create_template( template_name='Sample Template 1', template_type="sms", content="Template content", service=sample_service ) template_2 = create_template( template_name='Sample Template 2', template_type="sms", content="Template content", service=sample_service ) create_template( template_name='Sample Template 3', template_type="sms", content="Template content", service=sample_service ) assert Template.query.count() == 3 assert dao_get_all_templates_for_service(sample_service.id)[0].name == 'Sample Template 1' assert dao_get_all_templates_for_service(sample_service.id)[1].name == 'Sample Template 2' assert dao_get_all_templates_for_service(sample_service.id)[2].name == 'Sample Template 3' template_2.name = 'AAAAA Sample Template 2' dao_update_template(template_2) assert dao_get_all_templates_for_service(sample_service.id)[0].name == 'AAAAA Sample Template 2' assert dao_get_all_templates_for_service(sample_service.id)[1].name == 'Sample Template 1'
def test_get_all_templates_for_service_shows_newest_created_first(notify_db, notify_db_session, sample_service): template_1 = create_sample_template( notify_db, notify_db_session, template_name='Sample Template 1', template_type="sms", content="Template content", service=sample_service ) template_2 = create_sample_template( notify_db, notify_db_session, template_name='Sample Template 2', template_type="sms", content="Template content", service=sample_service ) template_3 = create_sample_template( notify_db, notify_db_session, template_name='Sample Template 3', template_type="sms", content="Template content", service=sample_service ) assert Template.query.count() == 3 assert dao_get_all_templates_for_service(sample_service.id)[0].name == 'Sample Template 3' assert dao_get_all_templates_for_service(sample_service.id)[1].name == 'Sample Template 2' assert dao_get_all_templates_for_service(sample_service.id)[2].name == 'Sample Template 1' template_2.name = 'Sample Template 2 (updated)' dao_update_template(template_2) assert dao_get_all_templates_for_service(sample_service.id)[0].name == 'Sample Template 3' assert dao_get_all_templates_for_service(sample_service.id)[1].name == 'Sample Template 2 (updated)'
def get_detailed_services(start_date, end_date, only_active=False, include_from_test_key=True): if start_date == datetime.utcnow().date(): stats = dao_fetch_todays_stats_for_all_services( include_from_test_key=include_from_test_key, only_active=only_active) else: stats = fetch_stats_by_date_range_for_all_services( start_date=start_date, end_date=end_date, include_from_test_key=include_from_test_key, only_active=only_active) results = [] for service_id, rows in itertools.groupby(stats, lambda x: x.service_id): rows = list(rows) if rows[0].count is None: s = statistics.create_zeroed_stats_dicts() else: s = statistics.format_statistics(rows) sid = str(rows[0].service_id) s[EMAIL_TYPE]['templates'] = len( dao_get_all_templates_for_service(sid, EMAIL_TYPE)) s[SMS_TYPE]['templates'] = len( dao_get_all_templates_for_service(sid, SMS_TYPE)) s[LETTER_TYPE]['templates'] = len( dao_get_all_templates_for_service(sid, LETTER_TYPE)) domains = set() for user in dao_fetch_active_users_for_service(sid): parts = user.email_address.split('@') if len(parts) != 2: continue domains.add(parts[1].lower()) results.append({ 'id': sid, 'name': rows[0].name, 'notification_type': rows[0].notification_type, 'research_mode': rows[0].research_mode, 'restricted': rows[0].restricted, 'active': rows[0].active, 'created_at': rows[0].created_at, 'statistics': s, 'domains': sorted(list(domains)), 'organisation_type': rows[0].organisation_type }) return results
def test_update_template(sample_service, sample_user): data = { 'name': 'Sample Template', 'template_type': "sms", 'content': "Template content", 'service': sample_service, 'created_by': sample_user } template = Template(**data) dao_create_template(template) created = dao_get_all_templates_for_service(sample_service.id)[0] assert created.name == 'Sample Template' created.name = 'new name' dao_update_template(created) assert dao_get_all_templates_for_service(sample_service.id)[0].name == 'new name'
def test_update_template_creates_a_history_record_with_current_data(sample_service, sample_user): assert Template.query.count() == 0 assert TemplateHistory.query.count() == 0 data = { 'name': 'Sample Template', 'template_type': "email", 'subject': "subject", 'content': "Template content", 'service': sample_service, 'created_by': sample_user } template = Template(**data) dao_create_template(template) created = dao_get_all_templates_for_service(sample_service.id)[0] assert created.name == 'Sample Template' assert Template.query.count() == 1 assert Template.query.first().version == 1 assert TemplateHistory.query.count() == 1 created.name = 'new name' dao_update_template(created) assert Template.query.count() == 1 assert TemplateHistory.query.count() == 2 template_from_db = Template.query.first() assert template_from_db.version == 2 assert TemplateHistory.query.filter_by(name='Sample Template').one().version == 1 assert TemplateHistory.query.filter_by(name='new name').one().version == 2
def test_create_template(sample_service, sample_user, template_type, subject): data = { 'name': 'Sample Template', 'template_type': template_type, 'content': "Template content", 'service': sample_service, 'created_by': sample_user } if subject: data.update({'subject': subject}) template = Template(**data) dao_create_template(template) assert Template.query.count() == 1 assert len(dao_get_all_templates_for_service(sample_service.id)) == 1 assert dao_get_all_templates_for_service(sample_service.id)[0].name == 'Sample Template'
def test_update_template_creates_a_history_record_with_current_data( sample_service, sample_user): assert Template.query.count() == 0 assert TemplateHistory.query.count() == 0 data = { "name": "Sample Template", "template_type": "email", "subject": "subject", "content": "Template content", "service": sample_service, "created_by": sample_user, } template = Template(**data) dao_create_template(template) created = dao_get_all_templates_for_service(sample_service.id)[0] assert created.name == "Sample Template" assert Template.query.count() == 1 assert Template.query.first().version == 1 assert TemplateHistory.query.count() == 1 created.name = "new name" dao_update_template(created) assert Template.query.count() == 1 assert TemplateHistory.query.count() == 2 template_from_db = Template.query.first() assert template_from_db.version == 2 assert TemplateHistory.query.filter_by( name="Sample Template").one().version == 1 assert TemplateHistory.query.filter_by(name="new name").one().version == 2
def test_update_template(sample_service, sample_user): data = { 'name': 'Sample Template', 'template_type': "sms", 'content': "Template content", 'service': sample_service, 'created_by': sample_user } template = Template(**data) dao_create_template(template) created = dao_get_all_templates_for_service(sample_service.id)[0] assert created.name == 'Sample Template' created.name = 'new name' dao_update_template(created) assert dao_get_all_templates_for_service(sample_service.id)[0].name == 'new name'
def get_all_templates_for_service(service_id): templates = dao_get_all_templates_for_service(service_id=service_id) if str(request.args.get('detailed', True)) == 'True': data = template_schema.dump(templates, many=True).data else: data = template_schema_no_detail.dump(templates, many=True).data return jsonify(data=data)
def test_should_not_allow_template_from_another_service( notify_api, service_factory, sample_user, mocker, template_type): with notify_api.test_request_context(): with notify_api.test_client() as client: mocked = mocker.patch( 'app.celery.provider_tasks.deliver_{}.apply_async'.format( template_type)) service_1 = service_factory.get('service 1', user=sample_user, email_from='service.1') service_2 = service_factory.get('service 2', user=sample_user, email_from='service.2') service_2_templates = dao_get_all_templates_for_service( service_id=service_2.id) to = sample_user.mobile_number if template_type == SMS_TYPE else sample_user.email_address data = {'to': to, 'template': service_2_templates[0].id} auth_header = create_authorization_header(service_id=service_1.id) response = client.post( path='/notifications/{}'.format(template_type), data=json.dumps(data), headers=[('Content-Type', 'application/json'), auth_header]) json_resp = json.loads(response.get_data(as_text=True)) mocked.assert_not_called() assert response.status_code == 400 test_string = 'Template not found' assert test_string in json_resp['message']
def test_update_template_creates_a_history_record_with_current_data(sample_service, sample_user): assert Template.query.count() == 0 assert TemplateHistory.query.count() == 0 data = { 'name': 'Sample Template', 'template_type': "email", 'subject': "subject", 'content': "Template content", 'service': sample_service, 'created_by': sample_user } template = Template(**data) dao_create_template(template) created = dao_get_all_templates_for_service(sample_service.id)[0] assert created.name == 'Sample Template' assert Template.query.count() == 1 assert Template.query.first().version == 1 assert TemplateHistory.query.count() == 1 created.name = 'new name' dao_update_template(created) assert Template.query.count() == 1 assert TemplateHistory.query.count() == 2 template_from_db = Template.query.first() assert template_from_db.version == 2 assert TemplateHistory.query.filter_by(name='Sample Template').one().version == 1 assert TemplateHistory.query.filter_by(name='new name').one().version == 2
def test_should_not_allow_template_from_another_service(notify_api, service_factory, sample_user, mocker, template_type): with notify_api.test_request_context(): with notify_api.test_client() as client: mocked = mocker.patch('app.celery.provider_tasks.deliver_{}.apply_async'.format(template_type)) service_1 = service_factory.get('service 1', user=sample_user, email_from='service.1') service_2 = service_factory.get('service 2', user=sample_user, email_from='service.2') service_2_templates = dao_get_all_templates_for_service(service_id=service_2.id) to = sample_user.mobile_number if template_type == 'sms' else sample_user.email_address data = { 'to': to, 'template': service_2_templates[0].id } auth_header = create_authorization_header(service_id=service_1.id) response = client.post( path='/notifications/{}'.format(template_type), data=json.dumps(data), headers=[('Content-Type', 'application/json'), auth_header]) json_resp = json.loads(response.get_data(as_text=True)) mocked.assert_not_called() assert response.status_code == 404 test_string = 'No result found' assert test_string in json_resp['message']
def get_templates(): data = validate(request.args.to_dict(), get_all_template_request) templates = templates_dao.dao_get_all_templates_for_service( authenticated_service.id, data.get('type')) return jsonify( templates=[template.serialize_for_v2() for template in templates]), 200
def test_create_template(sample_service, sample_user, template_type, subject): data = { 'name': 'Sample Template', 'template_type': template_type, 'content': "Template content", 'service': sample_service, 'created_by': sample_user } if subject: data.update({'subject': subject}) template = Template(**data) dao_create_template(template) assert Template.query.count() == 1 assert len(dao_get_all_templates_for_service(sample_service.id)) == 1 assert dao_get_all_templates_for_service(sample_service.id)[0].name == 'Sample Template' assert dao_get_all_templates_for_service(sample_service.id)[0].process_type == 'normal'
def test_update_template(sample_service, sample_user): data = { "name": "Sample Template", "template_type": "sms", "content": "Template content", "service": sample_service, "created_by": sample_user, } template = Template(**data) dao_create_template(template) created = dao_get_all_templates_for_service(sample_service.id)[0] assert created.name == "Sample Template" created.name = "new name" dao_update_template(created) assert dao_get_all_templates_for_service( sample_service.id)[0].name == "new name"
def test_create_template(sample_service, sample_user, template_type, subject): data = { "name": "Sample Template", "template_type": template_type, "content": "Template content", "service": sample_service, "created_by": sample_user, } if template_type == "letter": data["postage"] = "second" if subject: data.update({"subject": subject}) template = Template(**data) dao_create_template(template) assert Template.query.count() == 1 assert len(dao_get_all_templates_for_service(sample_service.id)) == 1 assert dao_get_all_templates_for_service( sample_service.id)[0].name == "Sample Template" assert dao_get_all_templates_for_service( sample_service.id)[0].process_type == "normal"
def test_get_all_templates_ignores_hidden_templates(sample_service): normal_template = create_template(template_name='Normal Template', service=sample_service, archived=False) create_template(template_name='Hidden Template', hidden=True, service=sample_service) templates = dao_get_all_templates_for_service(sample_service.id) assert len(templates) == 1 assert templates[0] == normal_template
def test_get_all_templates_ignores_archived_templates(sample_service): normal_template = create_template(template_name='Normal Template', service=sample_service, archived=False) archived_template = create_template(template_name='Archived Template', service=sample_service) # sample_template fixture uses dao, which forces archived = False at creation. archived_template.archived = True dao_update_template(archived_template) templates = dao_get_all_templates_for_service(sample_service.id) assert len(templates) == 1 assert templates[0] == normal_template
def test_create_template_with_reply_to(sample_service, sample_user): letter_contact = create_letter_contact(sample_service, 'Edinburgh, ED1 1AA') data = { 'name': 'Sample Template', 'template_type': "letter", 'content': "Template content", 'service': sample_service, 'created_by': sample_user, 'reply_to': letter_contact.id, } template = Template(**data) dao_create_template(template) assert dao_get_all_templates_for_service(sample_service.id)[0].reply_to == letter_contact.id
def test_get_all_templates_for_service(notify_db, notify_db_session, service_factory): service_1 = service_factory.get('service 1', email_from='service.1') service_2 = service_factory.get('service 2', email_from='service.2') assert Template.query.count() == 2 assert len(dao_get_all_templates_for_service(service_1.id)) == 1 assert len(dao_get_all_templates_for_service(service_2.id)) == 1 template_1 = create_sample_template( notify_db, notify_db_session, template_name='Sample Template 1', template_type="sms", content="Template content", service=service_1 ) template_2 = create_sample_template( notify_db, notify_db_session, template_name='Sample Template 2', template_type="sms", content="Template content", service=service_1 ) template_3 = create_sample_template( notify_db, notify_db_session, template_name='Sample Template 3', template_type="sms", content="Template content", service=service_2 ) assert Template.query.count() == 5 assert len(dao_get_all_templates_for_service(service_1.id)) == 3 assert len(dao_get_all_templates_for_service(service_2.id)) == 2
def test_template_postage_constraint_on_update(sample_service, sample_user): data = { 'name': 'Sample Template', 'template_type': "letter", 'content': "Template content", 'service': sample_service, 'created_by': sample_user, 'postage': 'second' } template = Template(**data) dao_create_template(template) created = dao_get_all_templates_for_service(sample_service.id)[0] assert created.name == 'Sample Template' created.postage = 'third' with pytest.raises(expected_exception=SQLAlchemyError): dao_update_template(created)
def test_template_postage_constraint_on_update(sample_service, sample_user): data = { "name": "Sample Template", "template_type": "letter", "content": "Template content", "service": sample_service, "created_by": sample_user, "postage": "second", } template = Template(**data) dao_create_template(template) created = dao_get_all_templates_for_service(sample_service.id)[0] assert created.name == "Sample Template" created.postage = "third" with pytest.raises(expected_exception=SQLAlchemyError): dao_update_template(created)
def test_create_template_with_reply_to(sample_service, sample_user): letter_contact = create_letter_contact(sample_service, "Edinburgh, ED1 1AA") data = { "name": "Sample Template", "template_type": "letter", "content": "Template content", "service": sample_service, "created_by": sample_user, "reply_to": letter_contact.id, "postage": "second", } template = Template(**data) dao_create_template(template) assert dao_get_all_templates_for_service( sample_service.id)[0].reply_to == letter_contact.id
def test_get_all_templates_ignores_archived_templates(notify_db, notify_db_session, sample_service): normal_template = create_sample_template( notify_db, notify_db_session, template_name='Normal Template', service=sample_service, archived=False ) archived_template = create_sample_template( notify_db, notify_db_session, template_name='Archived Template', service=sample_service ) # sample_template fixture uses dao, which forces archived = False at creation. archived_template.archived = True dao_update_template(archived_template) templates = dao_get_all_templates_for_service(sample_service.id) assert len(templates) == 1 assert templates[0] == normal_template
def test_get_all_returns_empty_list_if_no_templates(sample_service): assert Template.query.count() == 0 assert len(dao_get_all_templates_for_service(sample_service.id)) == 0
def get_all_templates_for_service(service_id): templates = dao_get_all_templates_for_service(service_id=service_id) data = template_schema.dump(templates, many=True).data return jsonify(data=data)
def test_get_all_returns_empty_list_if_no_templates(sample_service): assert Template.query.count() == 0 assert len(dao_get_all_templates_for_service(sample_service.id)) == 0
def get_all_templates_for_service(service_id): templates = dao_get_all_templates_for_service(service_id=service_id) data = template_schema.dump(templates, many=True).data return jsonify(data=data)