mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-09-07 03:48:26 -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']
|
if job['original_file_name'] != current_app.config['TEST_MESSAGE_FILENAME']
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
prev_page = None
|
prev_page = None
|
||||||
if jobs_response['links'].get('prev', 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
|
next_page = None
|
||||||
if jobs_response['links'].get('next', 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(
|
return render_template(
|
||||||
'views/jobs/jobs.html',
|
'views/jobs/jobs.html',
|
||||||
@@ -234,10 +233,10 @@ def get_notifications(service_id, message_type, status_override=None):
|
|||||||
}
|
}
|
||||||
prev_page = None
|
prev_page = None
|
||||||
if notifications['links'].get('prev', 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
|
next_page = None
|
||||||
if notifications['links'].get('next', 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'):
|
if request.path.endswith('csv'):
|
||||||
csv_content = generate_notifications_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):
|
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):
|
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):
|
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
|
from freezegun import freeze_time
|
||||||
|
|
||||||
|
|
||||||
def test_should_return_list_of_all_real_jobs(
|
def test_get_jobs_should_return_list_of_all_real_jobs(
|
||||||
app_,
|
client,
|
||||||
service_one,
|
service_one,
|
||||||
active_user_with_permissions,
|
active_user_with_permissions,
|
||||||
mock_get_jobs,
|
mock_get_jobs,
|
||||||
mocker
|
mocker
|
||||||
):
|
):
|
||||||
with app_.test_request_context():
|
client.login(active_user_with_permissions, mocker, service_one)
|
||||||
with app_.test_client() as client:
|
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
|
assert response.status_code == 200
|
||||||
page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser')
|
page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser')
|
||||||
assert page.h1.string == 'Uploaded files'
|
assert page.h1.string == 'Uploaded files'
|
||||||
jobs = [x.text for x in page.tbody.find_all('a', {'class': 'file-list-filename'})]
|
jobs = [x.text for x in page.tbody.find_all('a', {'class': 'file-list-filename'})]
|
||||||
assert len(jobs) == 4
|
assert len(jobs) == 4
|
||||||
assert 'Test message' not in jobs
|
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(
|
@pytest.mark.parametrize(
|
||||||
|
|||||||
@@ -72,7 +72,16 @@ def test_client_gets_jobs_with_status_filter(mocker):
|
|||||||
|
|
||||||
JobApiClient().get_jobs(uuid.uuid4(), statuses=['foo', 'bar'])
|
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):
|
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)
|
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]['id'] == job_1_id
|
||||||
assert result['data'][0]['notifications_requested'] == 80
|
assert result['data'][0]['notifications_requested'] == 80
|
||||||
assert result['data'][0]['notifications_sent'] == 50
|
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)
|
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]['id'] == job_1_id
|
||||||
assert result['data'][0]['notifications_requested'] == 0
|
assert result['data'][0]['notifications_requested'] == 0
|
||||||
assert result['data'][0]['notifications_sent'] == 0
|
assert result['data'][0]['notifications_sent'] == 0
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import pytest
|
import pytest
|
||||||
from io import StringIO
|
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 csv import DictReader
|
||||||
from freezegun import freeze_time
|
from freezegun import freeze_time
|
||||||
|
|
||||||
@@ -48,3 +48,22 @@ def test_generate_csv_from_notifications(
|
|||||||
for row in DictReader(StringIO(csv_content)):
|
for row in DictReader(StringIO(csv_content)):
|
||||||
assert row['Time'] == 'Friday 01 January 2016 at 15:09'
|
assert row['Time'] == 'Friday 01 January 2016 at 15:09'
|
||||||
assert row['Status'] == expected_status
|
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')
|
@pytest.fixture(scope='function')
|
||||||
def mock_get_jobs(mocker, api_user_active):
|
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:
|
if statuses is None:
|
||||||
statuses = ['', 'scheduled', 'pending', 'cancelled']
|
statuses = ['', 'scheduled', 'pending', 'cancelled']
|
||||||
|
|
||||||
@@ -914,17 +914,23 @@ def mock_get_jobs(mocker, api_user_active):
|
|||||||
job_status=job_status
|
job_status=job_status
|
||||||
)
|
)
|
||||||
for filename, scheduled_for, job_status in (
|
for filename, scheduled_for, job_status in (
|
||||||
("Test message", '', 'finished'),
|
('Test message', '', 'finished'),
|
||||||
("export 1/1/2016.xls", '', 'finished'),
|
('export 1/1/2016.xls', '', 'finished'),
|
||||||
("all email addresses.xlsx", '', 'pending'),
|
('all email addresses.xlsx', '', 'pending'),
|
||||||
("applicants.ods", '', 'finished'),
|
('applicants.ods', '', 'finished'),
|
||||||
("thisisatest.csv", '', 'finished'),
|
('thisisatest.csv', '', 'finished'),
|
||||||
("send_me_later.csv", '2016-01-01 11:09:00.061258', 'scheduled'),
|
('send_me_later.csv', '2016-01-01 11:09:00.061258', 'scheduled'),
|
||||||
("even_later.csv", '2016-01-01 23: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')
|
('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)
|
return mocker.patch('app.job_api_client.get_jobs', side_effect=_get_jobs)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user