add tests for new jobs functionality

This commit is contained in:
Leo Hemsted
2016-10-10 17:15:57 +01:00
parent dbe4400441
commit 0fdd38b9c5
6 changed files with 80 additions and 33 deletions

View File

@@ -79,13 +79,12 @@ def view_jobs(service_id):
if job['original_file_name'] != current_app.config['TEST_MESSAGE_FILENAME']
]
prev_page = None
if jobs_response['links'].get('prev', None):
prev_page = generate_previous_dict('main.view_jobs', service_id, page=page - 1)
prev_page = generate_previous_dict('main.view_jobs', service_id, page)
next_page = None
if jobs_response['links'].get('next', None):
next_page = generate_next_dict('main.view_jobs', service_id, page=page + 1)
next_page = generate_next_dict('main.view_jobs', service_id, page)
return render_template(
'views/jobs/jobs.html',
@@ -234,10 +233,10 @@ def get_notifications(service_id, message_type, status_override=None):
}
prev_page = None
if notifications['links'].get('prev', None):
prev_page = generate_previous_dict('main.view_notifications', service_id, page - 1, url_args=url_args)
prev_page = generate_previous_dict('main.view_notifications', service_id, page, url_args=url_args)
next_page = None
if notifications['links'].get('next', None):
next_page = generate_next_dict('main.view_notifications', service_id, page + 1, url_args)
next_page = generate_next_dict('main.view_notifications', service_id, page, url_args)
if request.path.endswith('csv'):
csv_content = generate_notifications_csv(

View File

@@ -119,11 +119,11 @@ def get_page_from_request():
def generate_previous_dict(view, service_id, page, url_args=None):
return generate_previous_next_dict(view, service_id, page, 'Previous page', url_args or {})
return generate_previous_next_dict(view, service_id, page - 1, 'Previous page', url_args or {})
def generate_next_dict(view, service_id, page, url_args=None):
return generate_previous_next_dict(view, service_id, page, 'Next page', url_args or {})
return generate_previous_next_dict(view, service_id, page + 1, 'Next page', url_args or {})
def generate_previous_next_dict(view, service_id, page, title, url_args):

View File

@@ -12,24 +12,38 @@ from tests import notification_json
from freezegun import freeze_time
def test_should_return_list_of_all_real_jobs(
app_,
def test_get_jobs_should_return_list_of_all_real_jobs(
client,
service_one,
active_user_with_permissions,
mock_get_jobs,
mocker
):
with app_.test_request_context():
with app_.test_client() as client:
client.login(active_user_with_permissions, mocker, service_one)
response = client.get(url_for('main.view_jobs', service_id=service_one['id']))
client.login(active_user_with_permissions, mocker, service_one)
response = client.get(url_for('main.view_jobs', service_id=service_one['id']))
assert response.status_code == 200
page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser')
assert page.h1.string == 'Uploaded files'
jobs = [x.text for x in page.tbody.find_all('a', {'class': 'file-list-filename'})]
assert len(jobs) == 4
assert 'Test message' not in jobs
assert response.status_code == 200
page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser')
assert page.h1.string == 'Uploaded files'
jobs = [x.text for x in page.tbody.find_all('a', {'class': 'file-list-filename'})]
assert len(jobs) == 4
assert 'Test message' not in jobs
def test_get_jobs_shows_page_links(
client,
service_one,
active_user_with_permissions,
mock_get_jobs,
mocker
):
client.login(active_user_with_permissions, mocker, service_one)
response = client.get(url_for('main.view_jobs', service_id=service_one['id']))
assert response.status_code == 200
page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser')
assert 'Next page' in page.find('li', {'class': 'next-page'}).text
assert 'Previous page' in page.find('li', {'class': 'previous-page'}).text
@pytest.mark.parametrize(

View File

@@ -72,7 +72,16 @@ def test_client_gets_jobs_with_status_filter(mocker):
JobApiClient().get_jobs(uuid.uuid4(), statuses=['foo', 'bar'])
mock_get.assert_called_once_with(url=ANY, params={'statuses': 'foo,bar'})
mock_get.assert_called_once_with(url=ANY, params={'page': 1, 'statuses': 'foo,bar'})
def test_client_gets_jobs_with_page_parameter(mocker):
client = JobApiClient()
mock_get = mocker.patch('app.notify_client.job_api_client.JobApiClient.get')
client.get_jobs('foo', page=2)
mock_get.assert_called_once_with(url=ANY, params={'page': 2})
def test_client_parses_job_stats(mocker):
@@ -221,7 +230,7 @@ def test_client_parses_job_stats_for_service(mocker):
result = client.get_jobs(service_id)
mock_get.assert_called_once_with(url=expected_url, params={})
mock_get.assert_called_once_with(url=expected_url, params={'page': 1})
assert result['data'][0]['id'] == job_1_id
assert result['data'][0]['notifications_requested'] == 80
assert result['data'][0]['notifications_sent'] == 50
@@ -281,7 +290,7 @@ def test_client_parses_empty_job_stats_for_service(mocker):
result = client.get_jobs(service_id)
mock_get.assert_called_once_with(url=expected_url, params={})
mock_get.assert_called_once_with(url=expected_url, params={'page': 1})
assert result['data'][0]['id'] == job_1_id
assert result['data'][0]['notifications_requested'] == 0
assert result['data'][0]['notifications_sent'] == 0

View File

@@ -1,6 +1,6 @@
import pytest
from io import StringIO
from app.utils import email_safe, generate_notifications_csv
from app.utils import email_safe, generate_notifications_csv, generate_previous_dict, generate_next_dict
from csv import DictReader
from freezegun import freeze_time
@@ -48,3 +48,22 @@ def test_generate_csv_from_notifications(
for row in DictReader(StringIO(csv_content)):
assert row['Time'] == 'Friday 01 January 2016 at 15:09'
assert row['Status'] == expected_status
def test_generate_previous_dict(client):
ret = generate_previous_dict('main.view_jobs', 'foo', 2, {})
assert 'page=1' in ret['url']
assert ret['title'] == 'Previous page'
assert ret['label'] == 'page 1'
def test_generate_next_dict(client):
ret = generate_next_dict('main.view_jobs', 'foo', 2, {})
assert 'page=3' in ret['url']
assert ret['title'] == 'Next page'
assert ret['label'] == 'page 3'
def test_generate_previous_next_dict_adds_other_url_args(client):
ret = generate_next_dict('main.view_notifications', 'foo', 2, {'message_type': 'blah'})
assert 'notifications/blah' in ret['url']

View File

@@ -901,7 +901,7 @@ def mock_get_job_in_progress(mocker, api_user_active):
@pytest.fixture(scope='function')
def mock_get_jobs(mocker, api_user_active):
def _get_jobs(service_id, limit_days=None, statuses=None):
def _get_jobs(service_id, limit_days=None, statuses=None, page=1):
if statuses is None:
statuses = ['', 'scheduled', 'pending', 'cancelled']
@@ -914,17 +914,23 @@ def mock_get_jobs(mocker, api_user_active):
job_status=job_status
)
for filename, scheduled_for, job_status in (
("Test message", '', 'finished'),
("export 1/1/2016.xls", '', 'finished'),
("all email addresses.xlsx", '', 'pending'),
("applicants.ods", '', 'finished'),
("thisisatest.csv", '', 'finished'),
("send_me_later.csv", '2016-01-01 11:09:00.061258', 'scheduled'),
("even_later.csv", '2016-01-01 23:09:00.061258', 'scheduled'),
("full_of_regret.csv", '2016-01-01 23:09:00.061258', 'cancelled')
('Test message', '', 'finished'),
('export 1/1/2016.xls', '', 'finished'),
('all email addresses.xlsx', '', 'pending'),
('applicants.ods', '', 'finished'),
('thisisatest.csv', '', 'finished'),
('send_me_later.csv', '2016-01-01 11:09:00.061258', 'scheduled'),
('even_later.csv', '2016-01-01 23:09:00.061258', 'scheduled'),
('full_of_regret.csv', '2016-01-01 23:09:00.061258', 'cancelled')
)
]
return {"data": [job for job in jobs if job['job_status'] in statuses]}
return {
'data': [job for job in jobs if job['job_status'] in statuses],
'links': {
'prev': 'services/{}/jobs?page={}'.format(service_id, page - 1),
'next': 'services/{}/jobs?page={}'.format(service_id, page + 1)
}
}
return mocker.patch('app.job_api_client.get_jobs', side_effect=_get_jobs)