mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-07-05 08:59:10 -04:00
add tests for new jobs functionality
This commit is contained in:
@@ -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(
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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']
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user