mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-04-04 17:42:05 -04:00
Merge pull request #1244 from alphagov/order-platform-admin-by-activity
Sort platform admin page by requested messages.
This commit is contained in:
@@ -35,12 +35,19 @@ def platform_admin():
|
||||
form=form,
|
||||
**get_statistics(sorted(
|
||||
services,
|
||||
key=lambda service: (service['active'], service['created_at']),
|
||||
key=lambda service: (service['active'], sum_service_usage(service), service['created_at']),
|
||||
reverse=True
|
||||
))
|
||||
)
|
||||
|
||||
|
||||
def sum_service_usage(service):
|
||||
total = 0
|
||||
for notification_type in service['statistics'].keys():
|
||||
total += service['statistics'][notification_type]['requested']
|
||||
return total
|
||||
|
||||
|
||||
def get_statistics(services):
|
||||
return {
|
||||
'global_stats': create_global_stats(services),
|
||||
|
||||
@@ -27,6 +27,7 @@ function display_result {
|
||||
if [[ -z "$VIRTUAL_ENV" ]] && [[ -d venv ]]; then
|
||||
source ./venv/bin/activate
|
||||
fi
|
||||
|
||||
pycodestyle .
|
||||
display_result $? 1 "Code style check"
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ from bs4 import BeautifulSoup
|
||||
from tests.conftest import mock_get_user
|
||||
from tests import service_json
|
||||
|
||||
from app.main.views.platform_admin import format_stats_by_service, create_global_stats
|
||||
from app.main.views.platform_admin import format_stats_by_service, create_global_stats, sum_service_usage
|
||||
|
||||
|
||||
def test_should_redirect_if_not_logged_in(
|
||||
@@ -347,3 +347,92 @@ def test_should_show_correct_sent_totals_for_platform_admin(
|
||||
|
||||
assert email_total == 60
|
||||
assert sms_total == 40
|
||||
|
||||
|
||||
@pytest.mark.parametrize('restricted, table_index, research_mode', [
|
||||
(True, 1, False),
|
||||
(False, 0, False)
|
||||
])
|
||||
def test_should_order_services_by_usage_with_inactive_last(
|
||||
restricted,
|
||||
table_index,
|
||||
research_mode,
|
||||
client,
|
||||
platform_admin_user,
|
||||
mocker,
|
||||
mock_get_detailed_services,
|
||||
fake_uuid,
|
||||
):
|
||||
services = [
|
||||
service_json(fake_uuid, 'My Service 1', [], restricted=restricted, research_mode=research_mode),
|
||||
service_json(fake_uuid, 'My Service 2', [], restricted=restricted, research_mode=research_mode),
|
||||
service_json(fake_uuid, 'My Service 3', [], restricted=restricted, research_mode=research_mode, active=False)
|
||||
]
|
||||
services[0]['statistics'] = create_stats(
|
||||
emails_requested=100,
|
||||
emails_delivered=25,
|
||||
emails_failed=25,
|
||||
sms_requested=100,
|
||||
sms_delivered=25,
|
||||
sms_failed=25
|
||||
)
|
||||
|
||||
services[1]['statistics'] = create_stats(
|
||||
emails_requested=200,
|
||||
emails_delivered=50,
|
||||
emails_failed=50,
|
||||
sms_requested=200,
|
||||
sms_delivered=50,
|
||||
sms_failed=50
|
||||
)
|
||||
|
||||
services[2]['statistics'] = create_stats(
|
||||
emails_requested=200,
|
||||
emails_delivered=50,
|
||||
emails_failed=50,
|
||||
sms_requested=200,
|
||||
sms_delivered=50,
|
||||
sms_failed=50
|
||||
)
|
||||
|
||||
mock_get_detailed_services.return_value = {'data': services}
|
||||
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, 'include_from_test_key': True})
|
||||
page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser')
|
||||
|
||||
table_body = page.find_all('table')[table_index].find_all('tbody')[0]
|
||||
services = [service.tr for service in table_body.find_all('tbody')]
|
||||
assert len(services) == 3
|
||||
assert services[0].td.text.strip() == 'My Service 2'
|
||||
assert services[1].td.text.strip() == 'My Service 1'
|
||||
assert services[2].td.text.strip() == 'My Service 3'
|
||||
|
||||
|
||||
def test_sum_service_usage_is_sum_of_all_activity(fake_uuid):
|
||||
service = service_json(fake_uuid, 'My Service 1')
|
||||
service['statistics'] = create_stats(
|
||||
emails_requested=100,
|
||||
emails_delivered=25,
|
||||
emails_failed=25,
|
||||
sms_requested=100,
|
||||
sms_delivered=25,
|
||||
sms_failed=25
|
||||
)
|
||||
assert sum_service_usage(service) == 200
|
||||
|
||||
|
||||
def test_sum_service_usage_with_zeros(fake_uuid):
|
||||
service = service_json(fake_uuid, 'My Service 1')
|
||||
service['statistics'] = create_stats(
|
||||
emails_requested=0,
|
||||
emails_delivered=0,
|
||||
emails_failed=25,
|
||||
sms_requested=0,
|
||||
sms_delivered=0,
|
||||
sms_failed=0
|
||||
)
|
||||
assert sum_service_usage(service) == 0
|
||||
|
||||
Reference in New Issue
Block a user