Merge pull request #1244 from alphagov/order-platform-admin-by-activity

Sort platform admin page by requested messages.
This commit is contained in:
minglis
2017-04-26 10:23:18 +01:00
committed by GitHub
3 changed files with 99 additions and 2 deletions

View File

@@ -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),

View File

@@ -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"

View File

@@ -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