mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-02-23 20:01:01 -05:00
It sucks having to scroll down the massive list of services just to see which ones are live.
161 lines
4.7 KiB
Python
161 lines
4.7 KiB
Python
from datetime import date
|
|
|
|
from flask import url_for
|
|
from freezegun import freeze_time
|
|
import pytest
|
|
from bs4 import BeautifulSoup
|
|
|
|
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, create_global_stats
|
|
|
|
|
|
def test_should_redirect_if_not_logged_in(app_):
|
|
with app_.test_request_context():
|
|
with app_.test_client() as client:
|
|
response = client.get(url_for('main.platform_admin'))
|
|
assert response.status_code == 302
|
|
assert url_for('main.index', _external=True) in response.location
|
|
|
|
|
|
def test_should_403_if_not_platform_admin(app_, active_user_with_permissions, mocker):
|
|
with app_.test_request_context():
|
|
with app_.test_client() as client:
|
|
mock_get_user(mocker, user=active_user_with_permissions)
|
|
client.login(active_user_with_permissions)
|
|
|
|
response = client.get(url_for('main.platform_admin'))
|
|
|
|
assert response.status_code == 403
|
|
|
|
|
|
@pytest.mark.parametrize('restricted, table_index, research_mode, displayed', [
|
|
(True, 1, False, ''),
|
|
(False, 0, False, 'Live'),
|
|
(False, 0, True, 'research mode'),
|
|
(True, 1, True, 'research mode')
|
|
])
|
|
def test_should_show_research_and_restricted_mode(
|
|
restricted,
|
|
table_index,
|
|
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.find_all('tbody')[table_index].find_all('td')[1].text.strip() == displayed
|
|
|
|
|
|
def test_should_render_platform_admin_page(
|
|
app_,
|
|
platform_admin_user,
|
|
mocker,
|
|
mock_get_detailed_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
|
|
resp_data = response.get_data(as_text=True)
|
|
assert 'Platform admin' in resp_data
|
|
assert 'Today' in resp_data
|
|
assert 'Live services' in resp_data
|
|
assert 'Trial mode services' in resp_data
|
|
mock_get_detailed_services.assert_called_once_with({'detailed': True})
|
|
|
|
|
|
def test_create_global_stats_sets_failure_rates(fake_uuid):
|
|
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,
|
|
)
|
|
|
|
stats = create_global_stats(services)
|
|
|
|
assert stats == {
|
|
'email': {
|
|
'delivered': 2,
|
|
'failed': 1,
|
|
'requested': 3,
|
|
'failure_rate': '33.3'
|
|
},
|
|
'sms': {
|
|
'delivered': 0,
|
|
'failed': 0,
|
|
'requested': 0,
|
|
'failure_rate': '0'
|
|
}
|
|
}
|
|
|
|
|
|
def create_stats(
|
|
emails_requested=0,
|
|
emails_delivered=0,
|
|
emails_failed=0,
|
|
sms_requested=0,
|
|
sms_delivered=0,
|
|
sms_failed=0
|
|
):
|
|
return {
|
|
'sms': {
|
|
'requested': sms_requested,
|
|
'delivered': sms_delivered,
|
|
'failed': sms_failed,
|
|
},
|
|
'email': {
|
|
'requested': emails_requested,
|
|
'delivered': emails_delivered,
|
|
'failed': emails_failed,
|
|
}
|
|
}
|
|
|
|
|
|
def test_format_stats_by_service_sums_values_for_sending(fake_uuid):
|
|
services = [service_json(fake_uuid, 'a', [])]
|
|
services[0]['statistics'] = create_stats(
|
|
emails_requested=10,
|
|
emails_delivered=3,
|
|
emails_failed=5,
|
|
sms_requested=50,
|
|
sms_delivered=7,
|
|
sms_failed=11
|
|
)
|
|
|
|
ret = list(format_stats_by_service(services))
|
|
|
|
assert len(ret) == 1
|
|
assert ret[0]['sending'] == 34
|
|
assert ret[0]['delivered'] == 10
|
|
assert ret[0]['failed'] == 16
|