Files
notifications-api/tests/app/complaint/test_complaint_rest.py
Katie Smith 3398e4cf93 Paginate the function to get all complaints
The DAO function to get all complaints has been paginated and the
endpoint which uses it has been updated to take a page number as a query
parameter.
2018-07-03 11:11:49 +01:00

84 lines
3.4 KiB
Python

from datetime import date
import json
from flask import url_for
from freezegun import freeze_time
from tests import create_authorization_header
from tests.app.db import create_complaint, create_service, create_template, create_notification
def test_get_all_complaints_returns_complaints_for_multiple_services(client, notify_db_session):
service = create_service(service_name='service1')
template = create_template(service=service)
notification = create_notification(template=template)
complaint_1 = create_complaint() # default service
complaint_2 = create_complaint(service=service, notification=notification)
response = client.get('/complaint', headers=[create_authorization_header()])
assert response.status_code == 200
assert json.loads(response.get_data(as_text=True))['complaints'] == [
complaint_2.serialize(), complaint_1.serialize()]
def test_get_all_complaints_returns_empty_complaints_list(client):
response = client.get('/complaint', headers=[create_authorization_header()])
assert response.status_code == 200
assert json.loads(response.get_data(as_text=True))['complaints'] == []
def test_get_all_complaints_returns_pagination_links(mocker, client, notify_db_session):
mocker.patch.dict('app.dao.complaint_dao.current_app.config', {'PAGE_SIZE': 1})
service_1 = create_service(service_name='service1')
service_2 = create_service(service_name='service2')
create_complaint()
create_complaint(service=service_1)
create_complaint(service=service_2)
response = client.get(url_for('complaint.get_all_complaints', page=2), headers=[create_authorization_header()])
assert response.status_code == 200
assert json.loads(response.get_data(as_text=True))['links'] == {
'last': '/complaint?page=3',
'next': '/complaint?page=3',
'prev': '/complaint?page=1'}
def test_get_complaint_with_start_and_end_date_passes_these_to_dao_function(mocker, client):
start_date = date(2018, 6, 11)
end_date = date(2018, 6, 11)
dao_mock = mocker.patch('app.complaint.complaint_rest.fetch_count_of_complaints', return_value=3)
response = client.get(
url_for('complaint.get_complaint_count', start_date=start_date, end_date=end_date),
headers=[create_authorization_header()]
)
dao_mock.assert_called_once_with(start_date=start_date, end_date=end_date)
assert response.status_code == 200
assert json.loads(response.get_data(as_text=True)) == 3
@freeze_time("2018-06-01 11:00:00")
def test_get_complaint_sets_start_and_end_date_to_today_if_not_specified(mocker, client):
dao_mock = mocker.patch('app.complaint.complaint_rest.fetch_count_of_complaints', return_value=5)
response = client.get(url_for('complaint.get_complaint_count'), headers=[create_authorization_header()])
dao_mock.assert_called_once_with(start_date=date.today(), end_date=date.today())
assert response.status_code == 200
assert json.loads(response.get_data(as_text=True)) == 5
def test_get_complaint_with_invalid_data_returns_400_status_code(client):
start_date = '1234-56-78'
response = client.get(
url_for('complaint.get_complaint_count', start_date=start_date),
headers=[create_authorization_header()]
)
assert response.status_code == 400
assert response.json['errors'][0]['message'] == 'start_date time data {} does not match format %Y-%m-%d'.format(
start_date)