mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-09-06 01:08:25 -04:00
added tests for reworked platform admin page
This commit is contained in:
@@ -15,18 +15,17 @@ from app.statistics_utils import get_formatted_percentage
|
|||||||
@login_required
|
@login_required
|
||||||
@user_has_permissions(admin_override=True)
|
@user_has_permissions(admin_override=True)
|
||||||
def platform_admin():
|
def platform_admin():
|
||||||
|
services = service_api_client.get_services({'detailed': True})['data']
|
||||||
return render_template(
|
return render_template(
|
||||||
'views/platform-admin.html',
|
'views/platform-admin.html',
|
||||||
**get_statistics()
|
**get_statistics(services)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def get_statistics():
|
def get_statistics(services):
|
||||||
services = service_api_client.get_services({'detailed': True})['data']
|
|
||||||
service_stats = format_stats_by_service(services)
|
|
||||||
return {
|
return {
|
||||||
'global_stats': create_global_stats(services),
|
'global_stats': create_global_stats(services),
|
||||||
'service_stats': service_stats
|
'service_stats': format_stats_by_service(services)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -2,10 +2,13 @@ from datetime import date
|
|||||||
|
|
||||||
from flask import url_for
|
from flask import url_for
|
||||||
from freezegun import freeze_time
|
from freezegun import freeze_time
|
||||||
|
import pytest
|
||||||
|
from bs4 import BeautifulSoup
|
||||||
|
|
||||||
from tests.conftest import mock_get_user
|
from tests.conftest import mock_get_user
|
||||||
|
from tests import service_json
|
||||||
|
|
||||||
from app.main.views.platform_admin import get_statistics, format_stats_by_service
|
from app.main.views.platform_admin import get_statistics, format_stats_by_service, create_global_stats
|
||||||
|
|
||||||
|
|
||||||
def test_should_redirect_if_not_logged_in(app_):
|
def test_should_redirect_if_not_logged_in(app_):
|
||||||
@@ -27,6 +30,39 @@ def test_should_403_if_not_platform_admin(app_, active_user_with_permissions, mo
|
|||||||
assert response.status_code == 403
|
assert response.status_code == 403
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize('restricted, research_mode, displayed', [
|
||||||
|
(True, False, ''),
|
||||||
|
(False, False, 'Live'),
|
||||||
|
(False, True, 'research mode'),
|
||||||
|
(True, True, 'research mode')
|
||||||
|
])
|
||||||
|
def test_should_show_research_and_restricted_mode(
|
||||||
|
restricted,
|
||||||
|
research_mode,
|
||||||
|
displayed,
|
||||||
|
app_,
|
||||||
|
platform_admin_user,
|
||||||
|
mocker,
|
||||||
|
mock_get_detailed_services,
|
||||||
|
fake_uuid
|
||||||
|
):
|
||||||
|
services = [service_json(fake_uuid, 'My Service', [], restricted=restricted, research_mode=research_mode)]
|
||||||
|
services[0]['statistics'] = create_stats()
|
||||||
|
|
||||||
|
mock_get_detailed_services.return_value = {'data': services}
|
||||||
|
with app_.test_request_context():
|
||||||
|
with app_.test_client() as client:
|
||||||
|
mock_get_user(mocker, user=platform_admin_user)
|
||||||
|
client.login(platform_admin_user)
|
||||||
|
response = client.get(url_for('main.platform_admin'))
|
||||||
|
|
||||||
|
assert response.status_code == 200
|
||||||
|
mock_get_detailed_services.assert_called_once_with({'detailed': True})
|
||||||
|
page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser')
|
||||||
|
# get second column, which contains flags as text.
|
||||||
|
assert page.tbody.select('td:nth-of-type(2)')[0].text.strip() == displayed
|
||||||
|
|
||||||
|
|
||||||
def test_should_render_platform_admin_page(
|
def test_should_render_platform_admin_page(
|
||||||
app_,
|
app_,
|
||||||
platform_admin_user,
|
platform_admin_user,
|
||||||
@@ -39,33 +75,49 @@ def test_should_render_platform_admin_page(
|
|||||||
client.login(platform_admin_user)
|
client.login(platform_admin_user)
|
||||||
response = client.get(url_for('main.platform_admin'))
|
response = client.get(url_for('main.platform_admin'))
|
||||||
|
|
||||||
assert response.status_code == 200
|
assert response.status_code == 200
|
||||||
resp_data = response.get_data(as_text=True)
|
resp_data = response.get_data(as_text=True)
|
||||||
assert 'Platform admin' in resp_data
|
assert 'Platform admin' in resp_data
|
||||||
assert 'Today' in resp_data
|
assert 'Today' in resp_data
|
||||||
assert 'Services' in resp_data
|
assert 'Services' in resp_data
|
||||||
|
mock_get_detailed_services.assert_called_once_with({'detailed': True})
|
||||||
|
|
||||||
|
|
||||||
def test_get_statistics_should_summarise_all_stats(mock_get_all_service_statistics, mock_get_services):
|
def test_create_global_stats_sets_failure_rates(fake_uuid):
|
||||||
resp = get_statistics()['global_stats']
|
services = [
|
||||||
|
service_json(fake_uuid, 'a', []),
|
||||||
|
service_json(fake_uuid, 'b', [])
|
||||||
|
]
|
||||||
|
services[0]['statistics'] = create_stats(
|
||||||
|
emails_requested=1,
|
||||||
|
emails_delivered=1,
|
||||||
|
emails_failed=0,
|
||||||
|
)
|
||||||
|
services[1]['statistics'] = create_stats(
|
||||||
|
emails_requested=2,
|
||||||
|
emails_delivered=1,
|
||||||
|
emails_failed=1,
|
||||||
|
)
|
||||||
|
|
||||||
assert 'emails_delivered' in resp
|
stats = create_global_stats(services)
|
||||||
assert 'emails_failed' in resp
|
|
||||||
assert 'emails_failure_rate' in resp
|
|
||||||
assert 'sms_delivered' in resp
|
|
||||||
assert 'sms_failed' in resp
|
|
||||||
assert 'sms_failure_rate' in resp
|
|
||||||
|
|
||||||
|
assert stats == {
|
||||||
@freeze_time('2000-06-30T23:30:00', tz_offset=0)
|
'email': {
|
||||||
def test_get_statistics_should_query_for_today_forced_to_GMT(mock_get_all_service_statistics, mock_get_services):
|
'delivered': 2,
|
||||||
get_statistics()
|
'failed': 1,
|
||||||
|
'requested': 3,
|
||||||
mock_get_all_service_statistics.assert_called_once_with(date(2000, 7, 1))
|
'failure_rate': '33.3'
|
||||||
|
},
|
||||||
|
'sms': {
|
||||||
|
'delivered': 0,
|
||||||
|
'failed': 0,
|
||||||
|
'requested': 0,
|
||||||
|
'failure_rate': '0'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
def create_stats(
|
def create_stats(
|
||||||
service,
|
|
||||||
emails_requested=0,
|
emails_requested=0,
|
||||||
emails_delivered=0,
|
emails_delivered=0,
|
||||||
emails_failed=0,
|
emails_failed=0,
|
||||||
@@ -74,59 +126,31 @@ def create_stats(
|
|||||||
sms_failed=0
|
sms_failed=0
|
||||||
):
|
):
|
||||||
return {
|
return {
|
||||||
'service': service,
|
'sms': {
|
||||||
'emails_requested': emails_requested,
|
'requested': sms_requested,
|
||||||
'emails_delivered': emails_delivered,
|
'delivered': sms_delivered,
|
||||||
'emails_failed': emails_failed,
|
'failed': sms_failed,
|
||||||
'sms_requested': sms_requested,
|
},
|
||||||
'sms_delivered': sms_delivered,
|
'email': {
|
||||||
'sms_failed': sms_failed,
|
'requested': emails_requested,
|
||||||
|
'delivered': emails_delivered,
|
||||||
|
'failed': emails_failed,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
def test_format_stats_by_service_gets_correct_stats_for_each_service():
|
def test_format_stats_by_service_sums_values_for_sending(fake_uuid):
|
||||||
services = [
|
services = [service_json(fake_uuid, 'a', [])]
|
||||||
{'name': 'a', 'id': 'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa', 'restricted': False, 'research_mode': True},
|
services[0]['statistics'] = create_stats(
|
||||||
{'name': 'b', 'id': 'bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb', 'restricted': True, 'research_mode': False}
|
emails_requested=10,
|
||||||
]
|
emails_delivered=3,
|
||||||
all_stats = [
|
emails_failed=5,
|
||||||
create_stats('aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa', emails_requested=1),
|
sms_requested=50,
|
||||||
create_stats('bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb', emails_requested=2)
|
sms_delivered=7,
|
||||||
]
|
sms_failed=11
|
||||||
|
)
|
||||||
|
|
||||||
ret = format_stats_by_service(all_stats, services)
|
ret = list(format_stats_by_service(services))
|
||||||
|
|
||||||
assert len(ret) == 2
|
|
||||||
assert ret[0]['name'] == 'a'
|
|
||||||
assert ret[0]['sending'] == 1
|
|
||||||
assert ret[0]['delivered'] == 0
|
|
||||||
assert ret[0]['failed'] == 0
|
|
||||||
assert ret[0]['restricted'] is False
|
|
||||||
|
|
||||||
assert ret[1]['name'] == 'b'
|
|
||||||
assert ret[1]['sending'] == 2
|
|
||||||
assert ret[1]['delivered'] == 0
|
|
||||||
assert ret[1]['failed'] == 0
|
|
||||||
assert ret[1]['restricted'] is True
|
|
||||||
|
|
||||||
|
|
||||||
def test_format_stats_by_service_sums_values_for_sending():
|
|
||||||
services = [
|
|
||||||
{'name': 'a', 'id': 'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa', 'restricted': False, 'research_mode': False},
|
|
||||||
]
|
|
||||||
all_stats = [
|
|
||||||
create_stats(
|
|
||||||
'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa',
|
|
||||||
emails_requested=10,
|
|
||||||
emails_delivered=3,
|
|
||||||
emails_failed=5,
|
|
||||||
sms_requested=50,
|
|
||||||
sms_delivered=7,
|
|
||||||
sms_failed=11
|
|
||||||
)
|
|
||||||
]
|
|
||||||
|
|
||||||
ret = format_stats_by_service(all_stats, services)
|
|
||||||
|
|
||||||
assert len(ret) == 1
|
assert len(ret) == 1
|
||||||
assert ret[0]['sending'] == 34
|
assert ret[0]['sending'] == 34
|
||||||
|
|||||||
@@ -108,8 +108,6 @@ def mock_get_detailed_services(mocker, fake_uuid):
|
|||||||
return mocker.patch('app.service_api_client.get_services', return_value=services)
|
return mocker.patch('app.service_api_client.get_services', return_value=services)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(scope='function')
|
@pytest.fixture(scope='function')
|
||||||
def mock_get_live_service(mocker, api_user_active):
|
def mock_get_live_service(mocker, api_user_active):
|
||||||
def _get(service_id):
|
def _get(service_id):
|
||||||
|
|||||||
Reference in New Issue
Block a user