diff --git a/app/main/views/add_service.py b/app/main/views/add_service.py
index 471058d44..3a6d7722f 100644
--- a/app/main/views/add_service.py
+++ b/app/main/views/add_service.py
@@ -38,7 +38,7 @@ def add_service():
email_from = email_safe(form.name.data)
service_id = service_api_client.create_service(service_name=form.name.data,
active=False,
- limit=current_app.config['DEFAULT_SERVICE_LIMIT'],
+ message_limit=current_app.config['DEFAULT_SERVICE_LIMIT'],
restricted=True,
user_id=session['user_id'],
email_from=email_from)
diff --git a/app/main/views/api_keys.py b/app/main/views/api_keys.py
index 4d992c249..f50bd0390 100644
--- a/app/main/views/api_keys.py
+++ b/app/main/views/api_keys.py
@@ -39,7 +39,7 @@ def create_api_key(service_id):
)
-@main.route("/services/
- Successful messages - Failed messages + Successful messages + Failed messages
{% call(item, row_number) list_table( notifications, @@ -45,8 +45,12 @@ {{ item.status }} {% endcall %} {% call field() %} - {{ item.created_at | format_datetime}} + {{ item.created_at | format_datetime }} {% endcall %} {% endcall %} ++ Download csv +
{{ previous_next_navigation(prev_page, next_page) }} + {% endblock %} \ No newline at end of file diff --git a/app/utils.py b/app/utils.py index 682060858..fbefa6aed 100644 --- a/app/utils.py +++ b/app/utils.py @@ -1,5 +1,6 @@ import re - +import csv +from io import StringIO from functools import wraps from flask import (abort, session, request, url_for) @@ -85,6 +86,25 @@ def get_errors_for_csv(recipients, template_type): return errors +def generate_notifications_csv(json_list): + from app import format_datetime + content = StringIO() + retval = None + with content as csvfile: + csvwriter = csv.writer(csvfile) + csvwriter.writerow(['Recipient', 'Template', 'Type', 'Job', 'Status', 'Time']) + for x in json_list: + csvwriter.writerow([ + x['to'], + x['template']['name'], + x['template']['template_type'], + x['job']['original_file_name'], + x['status'], + format_datetime(x['created_at'])]) + retval = content.getvalue() + return retval + + def get_page_from_request(): if 'page' in request.args: try: diff --git a/scripts/run_tests.sh b/scripts/run_tests.sh index 38ed4e6ee..03e31b9b8 100755 --- a/scripts/run_tests.sh +++ b/scripts/run_tests.sh @@ -30,6 +30,11 @@ display_result $? 1 "Code style check" npm test display_result $? 2 "Front end code style check" +export NOTIFY_ADMIN_ENVIRONMENT='config.Test' + ## Code coverage py.test --cov=app --cov-report=term-missing tests/ display_result $? 3 "Code coverage" + +#py.test -v +#display_result $? 4 "Unit tests diff --git a/tests/__init__.py b/tests/__init__.py index 91ff5a87e..cdf4efae8 100644 --- a/tests/__init__.py +++ b/tests/__init__.py @@ -1,4 +1,6 @@ import pytest +import uuid +import datetime from flask.testing import FlaskClient from flask import url_for from flask_login import login_user @@ -23,19 +25,27 @@ class TestClient(FlaskClient): self.get(url_for("main.logout")) -def service_json(id_, name, users, limit=1000, active=False, restricted=True, email_from=None): +def sample_uuid(): + return "6ce466d0-fd6a-11e5-82f5-e0accb9d11a6" + + +def generate_uuid(): + return uuid.uuid4() + + +def service_json(id_, name, users, message_limit=1000, active=False, restricted=True, email_from=None): return { 'id': id_, 'name': name, 'users': users, - 'limit': limit, + 'message_limit': message_limit, 'active': active, 'restricted': restricted, 'email_from': email_from } -def template_json(service_id, id_=1, name="sample template", type_="sms", content="template content"): +def template_json(service_id, id_, name="sample template", type_="sms", content="template content"): return { 'id': id_, 'name': name, @@ -52,8 +62,8 @@ def api_key_json(id_, name, expiry_date=None): } -def invite_json(id, from_user, service_id, email_address, permissions, created_at, status): - return {'id': id, +def invite_json(id_, from_user, service_id, email_address, permissions, created_at, status): + return {'id': id_, 'from_user': from_user, 'service': service_id, 'email_address': email_address, @@ -81,13 +91,10 @@ def create_test_api_user(state, permissions={}): def job_json(): - import uuid - import datetime - uuid.uuid4() - job_id = str(uuid.uuid4()) + job_id = str(generate_uuid()) created_at = str(datetime.datetime.now().time()) data = { - 'id': str(job_id), + 'id': job_id, 'service': 1, 'template': 1, 'original_file_name': 'thisisatest.csv', @@ -107,11 +114,10 @@ def notification_json(service_id, sent_at=None, created_at=None, with_links=False): - import datetime if job is None: job = job_json() if template is None: - template = template_json(service_id) + template = template_json(service_id, str(generate_uuid())) if sent_at is None: sent_at = str(datetime.datetime.now().time()) if created_at is None: @@ -126,7 +132,10 @@ def notification_json(service_id, data = { 'notifications': [{ 'to': to, - 'template': {'id': template['id'], 'name': template['name']}, + 'template': { + 'id': template['id'], + 'name': template['name'], + 'template_type': template['template_type']}, 'job': {'id': job['id'], 'original_file_name': job['original_file_name']}, 'sent_at': sent_at, 'status': status, diff --git a/tests/app/main/views/test_api_keys.py b/tests/app/main/views/test_api_keys.py index 2d65690de..a21905246 100644 --- a/tests/app/main/views/test_api_keys.py +++ b/tests/app/main/views/test_api_keys.py @@ -45,18 +45,18 @@ def test_should_show_api_keys_page(app_, mock_get_user_by_email, mock_get_api_keys, mock_get_service, - mock_has_permissions): + mock_has_permissions, + fake_uuid): with app_.test_request_context(): with app_.test_client() as client: client.login(api_user_active) - service_id = str(uuid.uuid4()) - response = client.get(url_for('main.api_keys', service_id=service_id)) + response = client.get(url_for('main.api_keys', service_id=fake_uuid)) assert response.status_code == 200 assert 'some key name' in response.get_data(as_text=True) assert 'another key name' in response.get_data(as_text=True) assert 'Revoked Thursday 01 January 1970 at 00:00' in response.get_data(as_text=True) - mock_get_api_keys.assert_called_once_with(service_id=service_id) + mock_get_api_keys.assert_called_once_with(service_id=fake_uuid) def test_should_show_name_api_key_page(app_, @@ -104,16 +104,16 @@ def test_should_show_confirm_revoke_api_key(app_, mock_get_user_by_email, mock_get_api_keys, mock_get_service, - mock_has_permissions): + mock_has_permissions, + fake_uuid): with app_.test_request_context(): with app_.test_client() as client: client.login(api_user_active) - service_id = str(uuid.uuid4()) - response = client.get(url_for('main.revoke_api_key', service_id=service_id, key_id=321)) + response = client.get(url_for('main.revoke_api_key', service_id=fake_uuid, key_id=fake_uuid)) assert response.status_code == 200 assert 'some key name' in response.get_data(as_text=True) - mock_get_api_keys.assert_called_once_with(service_id=service_id, key_id=321) + mock_get_api_keys.assert_called_once_with(service_id=fake_uuid, key_id=fake_uuid) def test_should_redirect_after_revoking_api_key(app_, @@ -124,17 +124,17 @@ def test_should_redirect_after_revoking_api_key(app_, mock_revoke_api_key, mock_get_api_keys, mock_get_service, - mock_has_permissions): + mock_has_permissions, + fake_uuid): with app_.test_request_context(): with app_.test_client() as client: client.login(api_user_active) - service_id = str(uuid.uuid4()) - response = client.post(url_for('main.revoke_api_key', service_id=service_id, key_id=321)) + response = client.post(url_for('main.revoke_api_key', service_id=fake_uuid, key_id=fake_uuid)) assert response.status_code == 302 - assert response.location == url_for('.api_keys', service_id=service_id, _external=True) - mock_revoke_api_key.assert_called_once_with(service_id=service_id, key_id=321) - mock_get_api_keys.assert_called_once_with(service_id=service_id, key_id=321) + assert response.location == url_for('.api_keys', service_id=fake_uuid, _external=True) + mock_revoke_api_key.assert_called_once_with(service_id=fake_uuid, key_id=fake_uuid) + mock_get_api_keys.assert_called_once_with(service_id=fake_uuid, key_id=fake_uuid) def test_route_permissions(mocker, diff --git a/tests/app/main/views/test_dashboard.py b/tests/app/main/views/test_dashboard.py index d2d066298..75183efb4 100644 --- a/tests/app/main/views/test_dashboard.py +++ b/tests/app/main/views/test_dashboard.py @@ -233,7 +233,14 @@ def test_menu_all_services_for_platform_admin_user(mocker, assert url_for('main.service_settings', service_id=service_one['id']) in page assert url_for('main.view_notifications', service_id=service_one['id']) in page assert url_for('main.api_keys', service_id=service_one['id']) not in page - assert url_for('main.edit_service_template', service_id=service_one['id'], template_id=1) in page + + # Should this be here?? + # template_json = mock_get_service_templates(service_one['id'])['data'][0] + + # assert url_for( + # 'main.edit_service_template', + # service_id=service_one['id'], + # template_id=template_json['id']) in page def test_route_for_service_permissions(mocker, diff --git a/tests/app/main/views/test_jobs.py b/tests/app/main/views/test_jobs.py index 994ae27c8..9bd273bec 100644 --- a/tests/app/main/views/test_jobs.py +++ b/tests/app/main/views/test_jobs.py @@ -1,6 +1,7 @@ from flask import url_for from bs4 import BeautifulSoup import json +from app.utils import generate_notifications_csv def test_should_return_list_of_all_jobs(app_, @@ -179,3 +180,26 @@ def test_should_show_notifications_for_a_service_with_next_previous(app_, assert url_for('main.view_notifications', service_id=service_one['id'], page=1) in content assert 'Previous page' in content assert 'Next page' in content + + +def test_should_download_notifications_for_a_service(app_, + service_one, + api_user_active, + mock_login, + mock_get_user, + mock_get_user_by_email, + mock_get_service, + mock_get_notifications, + mock_has_permissions): + with app_.test_request_context(): + with app_.test_client() as client: + client.login(api_user_active) + response = client.get(url_for( + 'main.view_notifications', + service_id=service_one['id'], + download='csv')) + csv_content = generate_notifications_csv( + mock_get_notifications(service_one['id'])['notifications']) + assert response.status_code == 200 + assert response.get_data(as_text=True) == csv_content + assert 'text/csv' in response.headers['Content-Type'] diff --git a/tests/app/main/views/test_send.py b/tests/app/main/views/test_send.py index 27a7cc3e1..07ea44e60 100644 --- a/tests/app/main/views/test_send.py +++ b/tests/app/main/views/test_send.py @@ -1,6 +1,7 @@ import pytest - +import re from io import BytesIO +from bs4 import BeautifulSoup from flask import url_for from unittest.mock import ANY from tests import validate_route_permission @@ -17,7 +18,8 @@ def test_upload_csvfile_with_errors_shows_check_page_with_errors( mock_get_service_template, mock_s3_upload, mock_has_permissions, - mock_get_users_by_service + mock_get_users_by_service, + fake_uuid ): contents = u'phone number,name\n+44 123,test1\n+44 456,test2' @@ -27,13 +29,13 @@ def test_upload_csvfile_with_errors_shows_check_page_with_errors( with app_.test_client() as client: client.login(api_user_active) initial_upload = client.post( - url_for('main.send_messages', service_id=12345, template_id=54321), + url_for('main.send_messages', service_id=fake_uuid, template_id=fake_uuid), data={'file': (BytesIO(contents.encode('utf-8')), 'invalid.csv')}, content_type='multipart/form-data', follow_redirects=True ) reupload = client.post( - url_for('main.check_messages', service_id=12345, template_type='sms', upload_id='abc123'), + url_for('main.check_messages', service_id=fake_uuid, template_type='sms', upload_id='abc123'), data={'file': (BytesIO(contents.encode('utf-8')), 'invalid.csv')}, content_type='multipart/form-data', follow_redirects=True @@ -57,7 +59,8 @@ def test_send_test_sms_message_to_self( mock_get_service_template, mock_s3_upload, mock_has_permissions, - mock_get_users_by_service + mock_get_users_by_service, + fake_uuid ): expected_data = {'data': 'phone number\r\n07700 900 762\r\n', 'file_name': 'Test run'} @@ -67,11 +70,11 @@ def test_send_test_sms_message_to_self( with app_.test_client() as client: client.login(api_user_active) response = client.get( - url_for('main.send_message_to_self', service_id=12345, template_id=54321), + url_for('main.send_message_to_self', service_id=fake_uuid, template_id=fake_uuid), follow_redirects=True ) assert response.status_code == 200 - mock_s3_upload.assert_called_with(ANY, '12345', expected_data, 'eu-west-1') + mock_s3_upload.assert_called_with(ANY, fake_uuid, expected_data, 'eu-west-1') def test_send_test_email_message_to_self( @@ -83,7 +86,8 @@ def test_send_test_email_message_to_self( mock_get_service_email_template, mock_s3_upload, mock_has_permissions, - mock_get_users_by_service + mock_get_users_by_service, + fake_uuid ): expected_data = {'data': 'email address\r\ntest@user.gov.uk\r\n', 'file_name': 'Test run'} @@ -93,11 +97,11 @@ def test_send_test_email_message_to_self( with app_.test_client() as client: client.login(api_user_active) response = client.get( - url_for('main.send_message_to_self', service_id=12345, template_id=54321), + url_for('main.send_message_to_self', service_id=fake_uuid, template_id=fake_uuid), follow_redirects=True ) assert response.status_code == 200 - mock_s3_upload.assert_called_with(ANY, '12345', expected_data, 'eu-west-1') + mock_s3_upload.assert_called_with(ANY, fake_uuid, expected_data, 'eu-west-1') def test_send_test_message_from_api_page( @@ -108,13 +112,14 @@ def test_send_test_message_from_api_page( mock_get_service, mock_get_service_email_template, mock_s3_upload, - mock_has_permissions + mock_has_permissions, + fake_uuid ): with app_.test_request_context(): with app_.test_client() as client: client.login(api_user_active) response = client.get( - url_for('main.send_from_api', service_id=12345, template_id=54321), + url_for('main.send_from_api', service_id=fake_uuid, template_id=fake_uuid), follow_redirects=True ) assert response.status_code == 200 @@ -128,14 +133,15 @@ def test_download_example_csv( mock_login, mock_get_service, mock_get_service_template, - mock_has_permissions + mock_has_permissions, + fake_uuid ): with app_.test_request_context(): with app_.test_client() as client: client.login(api_user_active) response = client.get( - url_for('main.get_example_csv', service_id=12345, template_id=54321), + url_for('main.get_example_csv', service_id=fake_uuid, template_id=fake_uuid), follow_redirects=True ) assert response.status_code == 200 @@ -152,7 +158,8 @@ def test_upload_csvfile_with_valid_phone_shows_all_numbers( mock_get_service_template, mock_s3_upload, mock_has_permissions, - mock_get_users_by_service + mock_get_users_by_service, + fake_uuid ): mocker.patch( @@ -166,13 +173,13 @@ def test_upload_csvfile_with_valid_phone_shows_all_numbers( with app_.test_client() as client: client.login(api_user_active) response = client.post( - url_for('main.send_messages', service_id=12345, template_id=54321), + url_for('main.send_messages', service_id=fake_uuid, template_id=fake_uuid), data={'file': (BytesIO(''.encode('utf-8')), 'valid.csv')}, content_type='multipart/form-data', follow_redirects=True ) with client.session_transaction() as sess: - assert int(sess['upload_data']['template_id']) == 54321 + assert sess['upload_data']['template_id'] == fake_uuid assert sess['upload_data']['original_file_name'] == 'valid.csv' assert sess['upload_data']['notification_count'] == 53 @@ -272,7 +279,8 @@ def test_route_permissions(mocker, mock_get_jobs, mock_get_notifications, mock_create_job, - mock_s3_upload): + mock_s3_upload, + fake_uuid): routes = [ 'main.choose_template', 'main.send_messages', @@ -288,7 +296,7 @@ def test_route_permissions(mocker, route, service_id=service_one['id'], template_type='sms', - template_id=123), + template_id=fake_uuid), ['send_texts', 'send_emails', 'send_letters'], api_user_active, service_one) @@ -303,7 +311,7 @@ def test_route_permissions(mocker, 'main.send_message_to_self', service_id=service_one['id'], template_type='sms', - template_id=123), + template_id=fake_uuid), ['send_texts', 'send_emails', 'send_letters'], api_user_active, service_one) @@ -317,7 +325,8 @@ def test_route_invalid_permissions(mocker, mock_get_service_templates, mock_get_jobs, mock_get_notifications, - mock_create_job): + mock_create_job, + fake_uuid): routes = [ 'main.choose_template', 'main.send_messages', @@ -334,7 +343,7 @@ def test_route_invalid_permissions(mocker, route, service_id=service_one['id'], template_type='sms', - template_id=123), + template_id=fake_uuid), ['blah'], api_user_active, service_one) @@ -388,7 +397,11 @@ def test_route_choose_template_send_messages_permissions(mocker, mock_get_service_templates, mock_get_jobs): with app_.test_request_context(): - template_id = mock_get_service_templates(service_one['id'])['data'][0]['id'] + template_id = None + for temp in mock_get_service_templates(service_one['id'])['data']: + if temp['template_type'] == 'sms': + template_id = temp['id'] + assert template_id resp = validate_route_permission( mocker, app_, @@ -426,7 +439,11 @@ def test_route_choose_template_manage_api_keys_permissions(mocker, mock_get_service_templates, mock_get_jobs): with app_.test_request_context(): - template_id = mock_get_service_templates(service_one['id'])['data'][0]['id'] + template_id = None + for temp in mock_get_service_templates(service_one['id'])['data']: + if temp['template_type'] == 'sms': + template_id = temp['id'] + assert template_id resp = validate_route_permission( mocker, app_, @@ -440,10 +457,6 @@ def test_route_choose_template_manage_api_keys_permissions(mocker, api_user_active, service_one) page = resp.get_data(as_text=True) - assert url_for( - "main.send_messages", - service_id=service_one['id'], - template_id=template_id) in page assert url_for( "main.send_message_to_self", service_id=service_one['id'], @@ -452,3 +465,9 @@ def test_route_choose_template_manage_api_keys_permissions(mocker, "main.edit_service_template", service_id=service_one['id'], template_id=template_id) not in page + page = BeautifulSoup(resp.data.decode('utf-8'), 'html.parser') + links = page.findAll('a', href=re.compile('^' + url_for( + "main.send_from_api", + service_id=service_one['id'], + template_id=template_id))) + assert len(links) == 1 diff --git a/tests/app/main/views/test_service_settings.py b/tests/app/main/views/test_service_settings.py index 2553abc71..947c58350 100644 --- a/tests/app/main/views/test_service_settings.py +++ b/tests/app/main/views/test_service_settings.py @@ -114,7 +114,7 @@ def test_should_redirect_after_service_name_confirmation(app_, mock_update_service.assert_called_once_with(service_id, service_new_name, service_one['active'], - service_one['limit'], + service_one['message_limit'], service_one['restricted'], service_one['users'], email_safe(service_new_name)) diff --git a/tests/app/main/views/test_templates.py b/tests/app/main/views/test_templates.py index 6b8bd6fbc..7fdf1397a 100644 --- a/tests/app/main/views/test_templates.py +++ b/tests/app/main/views/test_templates.py @@ -12,12 +12,13 @@ def test_should_show_page_for_one_templates(app_, mock_get_service_template, mock_get_user, mock_get_user_by_email, - mock_has_permissions): + mock_has_permissions, + fake_uuid): with app_.test_request_context(): with app_.test_client() as client: client.login(api_user_active) - service_id = str(uuid.uuid4()) - template_id = 456 + service_id = fake_uuid + template_id = fake_uuid response = client.get(url_for( '.edit_service_template', service_id=service_id, @@ -38,12 +39,13 @@ def test_should_redirect_when_saving_a_template(app_, mock_get_user, mock_get_service, mock_get_user_by_email, - mock_has_permissions): + mock_has_permissions, + fake_uuid): with app_.test_request_context(): with app_.test_client() as client: client.login(api_user_active) - service_id = str(uuid.uuid4()) - template_id = 456 + service_id = fake_uuid + template_id = fake_uuid name = "new name" content = "template content" data = { @@ -72,12 +74,13 @@ def test_should_show_delete_template_page(app_, mock_get_service_template, mock_get_user, mock_get_user_by_email, - mock_has_permissions): + mock_has_permissions, + fake_uuid): with app_.test_request_context(): with app_.test_client() as client: client.login(api_user_active) - service_id = str(uuid.uuid4()) - template_id = 456 + service_id = fake_uuid + template_id = fake_uuid response = client.get(url_for( '.delete_service_template', service_id=service_id, @@ -100,17 +103,18 @@ def test_should_redirect_when_deleting_a_template(app_, mock_delete_service_template, mock_get_user, mock_get_user_by_email, - mock_has_permissions): + mock_has_permissions, + fake_uuid): with app_.test_request_context(): with app_.test_client() as client: client.login(api_user_active) - service_id = str(uuid.uuid4()) - template_id = 456 + service_id = fake_uuid + template_id = fake_uuid name = "new name" type_ = "sms" content = "template content" data = { - 'id': template_id, + 'id': str(template_id), 'name': name, 'template_type': type_, 'content': content, @@ -136,7 +140,8 @@ def test_route_permissions(mocker, app_, api_user_active, service_one, - mock_get_service_template): + mock_get_service_template, + fake_uuid): routes = [ 'main.add_service_template', 'main.edit_service_template', @@ -152,7 +157,7 @@ def test_route_permissions(mocker, route, service_id=service_one['id'], template_type='sms', - template_id=123), + template_id=fake_uuid), ['manage_templates'], api_user_active, service_one) @@ -183,7 +188,8 @@ def test_route_invalid_permissions(mocker, app_, api_user_active, service_one, - mock_get_service_template): + mock_get_service_template, + fake_uuid): routes = [ 'main.add_service_template', 'main.edit_service_template', @@ -199,7 +205,7 @@ def test_route_invalid_permissions(mocker, route, service_id=service_one['id'], template_type='sms', - template_id=123), + template_id=fake_uuid), ['view_activity'], api_user_active, service_one) diff --git a/tests/conftest.py b/tests/conftest.py index 706048193..dc28c1c42 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -12,7 +12,9 @@ from . import ( api_key_json, job_json, notification_json, - invite_json + invite_json, + sample_uuid, + generate_uuid ) from app.notify_client.models import ( User, @@ -47,11 +49,16 @@ def mock_send_sms(request, mocker): return mocker.patch("app.service_api_client.send_sms") +@pytest.fixture(scope='function') +def fake_uuid(): + return sample_uuid() + + @pytest.fixture(scope='function') def mock_get_service(mocker, api_user_active): def _get(service_id): service = service_json( - service_id, "Test Service", [api_user_active.id], limit=1000, + service_id, "Test Service", [api_user_active.id], message_limit=1000, active=False, restricted=True) return {'data': service} @@ -60,9 +67,9 @@ def mock_get_service(mocker, api_user_active): @pytest.fixture(scope='function') def mock_create_service(mocker): - def _create(service_name, active, limit, restricted, user_id, email_from): + def _create(service_name, active, message_limit, restricted, user_id, email_from): service = service_json( - 101, service_name, [user_id], limit=limit, + 101, service_name, [user_id], message_limit=message_limit, active=active, restricted=restricted, email_from=email_from) return service['id'] @@ -75,12 +82,12 @@ def mock_update_service(mocker): def _update(service_id, service_name, active, - limit, + message_limit, restricted, users, email_from): service = service_json( - service_id, service_name, users, limit=limit, + service_id, service_name, users, message_limit=message_limit, active=active, restricted=restricted, email_from=email_from) return {'data': service} @@ -111,9 +118,9 @@ SERVICE_TWO_ID = "147ad62a-2951-4fa1-9ca0-093cd1a52c52" @pytest.fixture(scope='function') -def mock_get_services(mocker, user=None): +def mock_get_services(mocker, fake_uuid, user=None): if user is None: - user = active_user_with_permissions() + user = active_user_with_permissions(fake_uuid) def _create(user_id=None): service_one = service_json( @@ -127,9 +134,9 @@ def mock_get_services(mocker, user=None): @pytest.fixture(scope='function') -def mock_get_services_with_one_service(mocker, user=None): +def mock_get_services_with_one_service(mocker, fake_uuid, user=None): if user is None: - user = api_user_active() + user = api_user_active(fake_uuid) def _create(user_id=None): return {'data': [service_json( @@ -181,10 +188,10 @@ def mock_get_service_email_template(mocker): @pytest.fixture(scope='function') -def mock_create_service_template(mocker): +def mock_create_service_template(mocker, fake_uuid): def _create(name, type_, content, service): template = template_json( - 101, name, type_, content, service) + fake_uuid, name, type_, content, service) return {'data': template} return mocker.patch( @@ -196,7 +203,7 @@ def mock_create_service_template(mocker): def mock_update_service_template(mocker): def _update(id_, name, type_, content, service): template = template_json( - id_, name, type_, content, service) + service, id_, name, type_, content) return {'data': template} return mocker.patch( @@ -206,19 +213,24 @@ def mock_update_service_template(mocker): @pytest.fixture(scope='function') def mock_get_service_templates(mocker): + uuid1 = str(generate_uuid()) + uuid2 = str(generate_uuid()) + uuid3 = str(generate_uuid()) + uuid4 = str(generate_uuid()) + def _create(service_id): return {'data': [ template_json( - service_id, 1, "sms_template_one", "sms", "sms template one content" + service_id, uuid1, "sms_template_one", "sms", "sms template one content" ), template_json( - service_id, 2, "sms_template_two", "sms", "sms template two content" + service_id, uuid2, "sms_template_two", "sms", "sms template two content" ), template_json( - service_id, 3, "email_template_one", "email", "email template one content" + service_id, uuid3, "email_template_one", "email", "email template one content" ), template_json( - service_id, 4, "email_template_two", "email", "email template two content" + service_id, uuid4, "email_template_two", "email", "email template two content" ) ]} @@ -239,9 +251,9 @@ def mock_delete_service_template(mocker): @pytest.fixture(scope='function') -def api_user_pending(): +def api_user_pending(fake_uuid): from app.notify_client.user_api_client import User - user_data = {'id': 111, + user_data = {'id': fake_uuid, 'name': 'Test User', 'password': 'somepassword', 'email_address': 'test@user.gov.uk', @@ -255,9 +267,9 @@ def api_user_pending(): @pytest.fixture(scope='function') -def platform_admin_user(): +def platform_admin_user(fake_uuid): from app.notify_client.user_api_client import User - user_data = {'id': 222, + user_data = {'id': fake_uuid, 'name': 'Platform admin user', 'password': 'somepassword', 'email_address': 'platform@admin.gov.uk', @@ -272,9 +284,9 @@ def platform_admin_user(): @pytest.fixture(scope='function') -def api_user_active(): +def api_user_active(fake_uuid): from app.notify_client.user_api_client import User - user_data = {'id': 222, + user_data = {'id': fake_uuid, 'name': 'Test User', 'password': 'somepassword', 'email_address': 'test@user.gov.uk', @@ -289,10 +301,10 @@ def api_user_active(): @pytest.fixture(scope='function') -def active_user_with_permissions(): +def active_user_with_permissions(fake_uuid): from app.notify_client.user_api_client import User - user_data = {'id': 222, + user_data = {'id': fake_uuid, 'name': 'Test User', 'password': 'somepassword', 'email_address': 'test@user.gov.uk', @@ -314,9 +326,9 @@ def active_user_with_permissions(): @pytest.fixture(scope='function') -def api_user_locked(): +def api_user_locked(fake_uuid): from app.notify_client.user_api_client import User - user_data = {'id': 333, + user_data = {'id': fake_uuid, 'name': 'Test User', 'password': 'somepassword', 'email_address': 'test@user.gov.uk', @@ -330,9 +342,9 @@ def api_user_locked(): @pytest.fixture(scope='function') -def api_user_request_password_reset(): +def api_user_request_password_reset(fake_uuid): from app.notify_client.user_api_client import User - user_data = {'id': 555, + user_data = {'id': fake_uuid, 'name': 'Test User', 'password': 'somepassword', 'email_address': 'test@user.gov.uk', @@ -347,9 +359,9 @@ def api_user_request_password_reset(): @pytest.fixture(scope='function') -def api_user_changed_password(): +def api_user_changed_password(fake_uuid): from app.notify_client.user_api_client import User - user_data = {'id': 555, + user_data = {'id': fake_uuid, 'name': 'Test User', 'password': 'somepassword', 'email_address': 'test@user.gov.uk', @@ -377,8 +389,8 @@ def mock_register_user(mocker, api_user_pending): @pytest.fixture(scope='function') def mock_get_user(mocker, api_user_active): - def _get_user(id): - api_user_active.id = id + def _get_user(id_): + api_user_active.id = id_ return api_user_active return mocker.patch( 'app.user_api_client.get_user', side_effect=_get_user) @@ -507,7 +519,7 @@ def mock_create_api_key(mocker): def _create(service_id, key_name): import uuid - return {'data': str(uuid.uuid4())} + return {'data': str(generate_uuid())} return mocker.patch('app.api_key_api_client.create_api_key', side_effect=_create) @@ -525,8 +537,8 @@ def mock_revoke_api_key(mocker): @pytest.fixture(scope='function') def mock_get_api_keys(mocker): def _get_keys(service_id, key_id=None): - keys = {'apiKeys': [api_key_json(1, 'some key name'), - api_key_json(2, 'another key name', expiry_date=str(date.fromtimestamp(0)))]} + keys = {'apiKeys': [api_key_json(service_id, 'some key name'), + api_key_json(service_id, 'another key name', expiry_date=str(date.fromtimestamp(0)))]} return keys return mocker.patch('app.api_key_api_client.get_api_keys', side_effect=_get_keys) @@ -629,11 +641,10 @@ def mock_get_job(mocker, job_data): @pytest.fixture(scope='function') def mock_get_jobs(mocker): def _get_jobs(service_id): - import uuid data = [] for i in range(5): job_data = job_json() - job_data['id'] = str(uuid.uuid4()) + job_data['id'] = str(generate_uuid()) job_data['service'] = service_id data.append(job_data) return {"data": data} @@ -709,14 +720,13 @@ def mock_s3_upload(mocker): @pytest.fixture(scope='function') def sample_invite(mocker, service_one, status='pending'): - import datetime - id = str(uuid.uuid4()) + id_ = str(generate_uuid()) from_user = service_one['users'][0] email_address = 'invited_user@test.gov.uk' service_id = service_one['id'] permissions = 'send_messages,manage_service,manage_api_keys' - created_at = str(datetime.datetime.now()) - return invite_json(id, from_user, service_id, email_address, permissions, created_at, status) + created_at = str(datetime.now()) + return invite_json(id_, from_user, service_id, email_address, permissions, created_at, status) @pytest.fixture(scope='function') @@ -783,10 +793,8 @@ def mock_remove_user_from_service(mocker): @pytest.fixture(scope='function') -def mock_get_template_statistics(mocker, service_one): - - import uuid - template = template_json(service_one['id'], 1, "Test template", "sms", "Something very interesting") +def mock_get_template_statistics(mocker, service_one, fake_uuid): + template = template_json(service_one['id'], fake_uuid, "Test template", "sms", "Something very interesting") data = { "usage_count": 1, "template": { @@ -795,7 +803,7 @@ def mock_get_template_statistics(mocker, service_one): "id": template['id'] }, "service": template['service'], - "id": str(uuid.uuid4()), + "id": str(generate_uuid()), "day": "2016-04-04" }