2016-03-09 12:10:50 +00:00
|
|
|
import pytest
|
2016-01-15 15:15:35 +00:00
|
|
|
from flask.testing import FlaskClient
|
|
|
|
|
from flask import url_for
|
2016-03-18 10:49:22 +00:00
|
|
|
from flask_login import login_user
|
2016-01-15 15:15:35 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
class TestClient(FlaskClient):
|
2016-03-30 10:53:15 +01:00
|
|
|
def login(self, user, mocker=None, service=None):
|
2016-01-15 15:15:35 +00:00
|
|
|
# Skipping authentication here and just log them in
|
|
|
|
|
with self.session_transaction() as session:
|
2016-03-18 16:20:37 +00:00
|
|
|
session['user_id'] = user.id
|
|
|
|
|
session['_fresh'] = True
|
2016-03-31 10:26:03 +01:00
|
|
|
if mocker:
|
2016-03-30 10:53:15 +01:00
|
|
|
mocker.patch('app.user_api_client.get_user', return_value=user)
|
2016-03-31 10:26:03 +01:00
|
|
|
if mocker and service:
|
2016-03-30 10:53:15 +01:00
|
|
|
mocker.patch('app.service_api_client.get_service', return_value={'data': service})
|
2016-03-18 16:20:37 +00:00
|
|
|
login_user(user, remember=True)
|
|
|
|
|
|
|
|
|
|
def login_fresh(self):
|
|
|
|
|
return True
|
2016-01-15 15:15:35 +00:00
|
|
|
|
|
|
|
|
def logout(self, user):
|
|
|
|
|
self.get(url_for("main.logout"))
|
|
|
|
|
|
|
|
|
|
|
2016-03-30 17:12:00 +01:00
|
|
|
def service_json(id_, name, users, limit=1000, active=False, restricted=True, email_from=None):
|
2016-01-15 15:15:35 +00:00
|
|
|
return {
|
|
|
|
|
'id': id_,
|
|
|
|
|
'name': name,
|
|
|
|
|
'users': users,
|
|
|
|
|
'limit': limit,
|
|
|
|
|
'active': active,
|
2016-03-30 17:12:00 +01:00
|
|
|
'restricted': restricted,
|
|
|
|
|
'email_from': email_from
|
2016-01-15 15:15:35 +00:00
|
|
|
}
|
|
|
|
|
|
2016-01-18 17:35:28 +00:00
|
|
|
|
2016-03-16 16:57:10 +00:00
|
|
|
def template_json(service_id, id_=1, name="sample template", type_="sms", content="template content"):
|
2016-01-19 15:54:12 +00:00
|
|
|
return {
|
|
|
|
|
'id': id_,
|
|
|
|
|
'name': name,
|
|
|
|
|
'template_type': type_,
|
|
|
|
|
'content': content,
|
|
|
|
|
'service': service_id
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2016-01-21 12:28:05 +00:00
|
|
|
def api_key_json(id_, name, expiry_date=None):
|
|
|
|
|
return {'id': id_,
|
|
|
|
|
'name': name,
|
|
|
|
|
'expiry_date': expiry_date
|
|
|
|
|
}
|
|
|
|
|
|
2016-02-26 15:33:17 +00:00
|
|
|
|
2016-03-04 14:42:52 +00:00
|
|
|
def invite_json(id, from_user, service_id, email_address, permissions, created_at, status):
|
2016-02-26 15:33:17 +00:00
|
|
|
return {'id': id,
|
|
|
|
|
'from_user': from_user,
|
|
|
|
|
'service': service_id,
|
|
|
|
|
'email_address': email_address,
|
2016-03-04 14:42:52 +00:00
|
|
|
'status': status,
|
2016-02-29 17:35:21 +00:00
|
|
|
'permissions': permissions,
|
|
|
|
|
'created_at': created_at
|
|
|
|
|
}
|
2016-02-26 15:33:17 +00:00
|
|
|
|
|
|
|
|
|
2016-01-18 16:01:04 +00:00
|
|
|
TEST_USER_EMAIL = 'test@user.gov.uk'
|
2016-01-15 15:15:35 +00:00
|
|
|
|
2016-01-18 17:35:28 +00:00
|
|
|
|
2016-02-29 14:57:07 +00:00
|
|
|
def create_test_api_user(state, permissions={}):
|
2016-01-19 22:47:42 +00:00
|
|
|
from app.notify_client.user_api_client import User
|
|
|
|
|
user_data = {'id': 1,
|
|
|
|
|
'name': 'Test User',
|
|
|
|
|
'password': 'somepassword',
|
|
|
|
|
'email_address': TEST_USER_EMAIL,
|
|
|
|
|
'mobile_number': '+441234123412',
|
2016-02-29 14:57:07 +00:00
|
|
|
'state': state,
|
|
|
|
|
'permissions': permissions
|
2016-01-19 22:47:42 +00:00
|
|
|
}
|
|
|
|
|
user = User(user_data)
|
|
|
|
|
return user
|
|
|
|
|
|
|
|
|
|
|
2016-01-29 15:35:35 +00:00
|
|
|
def job_json():
|
|
|
|
|
import uuid
|
|
|
|
|
import datetime
|
|
|
|
|
uuid.uuid4()
|
|
|
|
|
job_id = str(uuid.uuid4())
|
|
|
|
|
created_at = str(datetime.datetime.now().time())
|
|
|
|
|
data = {
|
|
|
|
|
'id': str(job_id),
|
|
|
|
|
'service': 1,
|
|
|
|
|
'template': 1,
|
|
|
|
|
'original_file_name': 'thisisatest.csv',
|
2016-02-22 14:52:16 +00:00
|
|
|
'created_at': created_at,
|
2016-03-02 16:15:15 +00:00
|
|
|
'notification_count': 1,
|
2016-03-04 15:59:56 +00:00
|
|
|
'notifications_sent': 1,
|
2016-03-02 16:15:15 +00:00
|
|
|
'status': ''
|
2016-01-29 15:35:35 +00:00
|
|
|
}
|
|
|
|
|
return data
|
2016-03-02 16:15:15 +00:00
|
|
|
|
|
|
|
|
|
2016-03-16 16:57:10 +00:00
|
|
|
def notification_json(service_id,
|
|
|
|
|
job=None,
|
|
|
|
|
template=None,
|
|
|
|
|
to='07123456789',
|
|
|
|
|
status='sent',
|
|
|
|
|
sent_at=None,
|
|
|
|
|
created_at=None,
|
|
|
|
|
with_links=False):
|
2016-03-02 16:15:15 +00:00
|
|
|
import datetime
|
2016-03-16 16:57:10 +00:00
|
|
|
if job is None:
|
|
|
|
|
job = job_json()
|
|
|
|
|
if template is None:
|
|
|
|
|
template = template_json(service_id)
|
|
|
|
|
if sent_at is None:
|
|
|
|
|
sent_at = str(datetime.datetime.now().time())
|
|
|
|
|
if created_at is None:
|
|
|
|
|
created_at = str(datetime.datetime.now().time())
|
|
|
|
|
links = {}
|
|
|
|
|
if with_links:
|
|
|
|
|
links = {
|
|
|
|
|
'prev': '/service/{}/notifications'.format(service_id),
|
|
|
|
|
'next': '/service/{}/notifications'.format(service_id),
|
|
|
|
|
'last': '/service/{}/notifications'.format(service_id)
|
|
|
|
|
}
|
2016-03-02 16:15:15 +00:00
|
|
|
data = {
|
|
|
|
|
'notifications': [{
|
2016-03-16 16:57:10 +00:00
|
|
|
'to': to,
|
|
|
|
|
'template': {'id': template['id'], 'name': template['name']},
|
2016-03-16 17:05:27 +00:00
|
|
|
'job': {'id': job['id'], 'original_file_name': job['original_file_name']},
|
2016-03-16 16:57:10 +00:00
|
|
|
'sent_at': sent_at,
|
|
|
|
|
'status': status,
|
|
|
|
|
'created_at': created_at
|
2016-03-02 16:15:15 +00:00
|
|
|
} for i in range(5)],
|
2016-03-16 16:57:10 +00:00
|
|
|
'links': links
|
2016-03-02 16:15:15 +00:00
|
|
|
}
|
|
|
|
|
return data
|
2016-03-09 12:10:50 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
def validate_route_permission(mocker,
|
|
|
|
|
app_,
|
|
|
|
|
method,
|
|
|
|
|
response_code,
|
|
|
|
|
route,
|
|
|
|
|
permissions,
|
|
|
|
|
usr,
|
|
|
|
|
service):
|
|
|
|
|
usr._permissions[str(service['id'])] = permissions
|
|
|
|
|
mocker.patch(
|
|
|
|
|
'app.user_api_client.check_verify_code',
|
|
|
|
|
return_value=(True, ''))
|
|
|
|
|
mocker.patch(
|
2016-03-17 10:46:47 +00:00
|
|
|
'app.service_api_client.get_services',
|
2016-03-09 12:10:50 +00:00
|
|
|
return_value={'data': []})
|
|
|
|
|
mocker.patch('app.user_api_client.get_user', return_value=usr)
|
|
|
|
|
mocker.patch('app.user_api_client.get_user_by_email', return_value=usr)
|
2016-03-17 10:46:47 +00:00
|
|
|
mocker.patch('app.service_api_client.get_service', return_value={'data': service})
|
2016-03-17 14:25:28 +00:00
|
|
|
mocker.patch('app.user_api_client.get_users_for_service', return_value=[usr])
|
2016-03-09 12:10:50 +00:00
|
|
|
with app_.test_request_context():
|
|
|
|
|
with app_.test_client() as client:
|
|
|
|
|
client.login(usr)
|
|
|
|
|
resp = None
|
|
|
|
|
if method == 'GET':
|
|
|
|
|
resp = client.get(route)
|
|
|
|
|
elif method == 'POST':
|
|
|
|
|
resp = client.post(route)
|
|
|
|
|
else:
|
|
|
|
|
pytest.fail("Invalid method call {}".format(method))
|
|
|
|
|
if resp.status_code != response_code:
|
|
|
|
|
pytest.fail("Invalid permissions set for endpoint {}".format(route))
|
2016-03-09 13:51:56 +00:00
|
|
|
return resp
|