diff --git a/app/main/views/platform_admin.py b/app/main/views/platform_admin.py
index 49e381248..53cca7132 100644
--- a/app/main/views/platform_admin.py
+++ b/app/main/views/platform_admin.py
@@ -505,14 +505,7 @@ def format_stats_by_service(services):
yield {
'id': service['id'],
'name': service['name'],
- 'stats': {
- msg_type: {
- 'sending': stats['requested'] - stats['delivered'] - stats['failed'],
- 'delivered': stats['delivered'],
- 'failed': stats['failed'],
- }
- for msg_type, stats in service['statistics'].items()
- },
+ 'stats': service['statistics'],
'restricted': service['restricted'],
'research_mode': service['research_mode'],
'created_at': service['created_at'],
diff --git a/app/templates/views/platform-admin/services.html b/app/templates/views/platform-admin/services.html
index 652e988ee..a0ba6b671 100644
--- a/app/templates/views/platform-admin/services.html
+++ b/app/templates/views/platform-admin/services.html
@@ -9,38 +9,16 @@
{% from "components/button/macro.njk" import govukButton %}
{% from "components/details/macro.njk" import govukDetails %}
-{% macro stats_fields(channel, data) -%}
-
- {% call field(border=False) %}
- {{ channel.title() }}
- {% endcall %}
-
- {% call field(align='right', border=False) %}
- {{ big_number(data[channel]['sending'], smaller=True) }}
- {% endcall %}
-
- {% call field(align='right', border=False) %}
- {{ big_number(data[channel]['delivered'], smaller=True) }}
- {% endcall %}
-
- {% call field(align='right', status='error' if data[channel]['failed'], border=False) %}
- {{ big_number(data[channel]['failed'], smaller=True) }}
- {% endcall %}
-
-{%- endmacro %}
-
{% macro services_table(services, caption) %}
{% call(item, row_number) mapping_table(
caption=caption,
caption_visible=False,
field_headings=[
- 'Service',
- hidden_field_heading('Type'),
- right_aligned_field_heading('Sending'),
- right_aligned_field_heading('Delivered'),
- right_aligned_field_heading('Failed')
+ right_aligned_field_heading('Emails'),
+ right_aligned_field_heading('Text messages'),
+ right_aligned_field_heading('Letters')
],
- field_headings_visible=True
+ field_headings_visible=False,
) %}
{% for service in services %}
@@ -48,30 +26,25 @@
{% call row_group() %}
{% call row() %}
- {% call field(border=False) %}
- {{ service['name'] }}
+ {% call field(border=False, colspan=3) %}
+ {{ service['name'] }}
{% if not service['active'] %}
Archived
{% endif %}
{% endcall %}
- {{ stats_fields('email', service['stats']) }}
{% endcall %}
{% call row() %}
-
- {% call field(border=False) %}
- {% endcall %}
- {{ stats_fields('sms', service['stats']) }}
- {% endcall %}
-
- {% call row() %}
-
- {% call field(border=False) %}
-
- {% endcall %}
- {{ stats_fields('letter', service['stats']) }}
-
+ {% for channel in ('email', 'sms', 'letter') %}
+ {% call field(border=False) %}
+ {{ big_number(
+ service['stats'][channel]['requested'],
+ smallest=True,
+ label=message_count_label(service['stats'][channel]['requested'], channel)
+ ) }}
+ {% endcall %}
+ {% endfor %}
{% endcall %}
{% endcall %}
diff --git a/tests/app/main/views/test_platform_admin.py b/tests/app/main/views/test_platform_admin.py
index ab9fcf657..79d7011c6 100644
--- a/tests/app/main/views/test_platform_admin.py
+++ b/tests/app/main/views/test_platform_admin.py
@@ -48,39 +48,6 @@ def test_should_403_if_not_platform_admin(
client_request.get(endpoint, _expected_status=403)
-@pytest.mark.parametrize('endpoint, restricted, research_mode, displayed', [
- ('main.trial_services', True, False, ''),
- ('main.live_services', False, False, 'Live'),
- ('main.live_services', False, True, 'research mode'),
- ('main.trial_services', True, True, 'research mode')
-])
-def test_should_show_research_and_restricted_mode(
- endpoint,
- restricted,
- research_mode,
- displayed,
- platform_admin_client,
- 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}
-
- response = platform_admin_client.get(url_for(endpoint))
-
- assert response.status_code == 200
- mock_get_detailed_services.assert_called_once_with({'detailed': True,
- 'include_from_test_key': True,
- 'only_active': False})
- page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser')
- # get first column in second row, which contains flags as text.
- table_body = page.find_all('table')[0].find_all('tbody')[0]
- service_mode = table_body.find_all('tbody')[0].find_all('tr')[1].find_all('td')[0].text.strip()
- assert service_mode == displayed
-
-
@pytest.mark.parametrize('endpoint, expected_services_shown', [
('main.live_services', 1),
('main.trial_services', 1),
@@ -94,7 +61,12 @@ def test_should_render_platform_admin_page(
response = platform_admin_client.get(url_for(endpoint))
assert response.status_code == 200
page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser')
- assert len(page.select('tbody tr')) == expected_services_shown * 3 # one row for SMS, one for email, one for letter
+ assert [
+ normalize_spaces(column.text)
+ for column in page.select('tbody tr')[1].select('td')
+ ] == [
+ '0 emails sent', '0 text messages sent', '0 letters sent',
+ ]
mock_get_detailed_services.assert_called_once_with({'detailed': True,
'include_from_test_key': True,
'only_active': False})
@@ -298,15 +270,15 @@ def test_format_stats_by_service_returns_correct_values(fake_uuid):
ret = list(format_stats_by_service(services))
assert len(ret) == 1
- assert ret[0]['stats']['email']['sending'] == 2
+ assert ret[0]['stats']['email']['requested'] == 10
assert ret[0]['stats']['email']['delivered'] == 3
assert ret[0]['stats']['email']['failed'] == 5
- assert ret[0]['stats']['sms']['sending'] == 32
+ assert ret[0]['stats']['sms']['requested'] == 50
assert ret[0]['stats']['sms']['delivered'] == 7
assert ret[0]['stats']['sms']['failed'] == 11
- assert ret[0]['stats']['letter']['sending'] == 13
+ assert ret[0]['stats']['letter']['requested'] == 40
assert ret[0]['stats']['letter']['delivered'] == 20
assert ret[0]['stats']['letter']['failed'] == 7
@@ -344,17 +316,11 @@ def test_should_show_email_and_sms_stats_for_all_service_types(
table_body = page.find_all('table')[0].find_all('tbody')[0]
service_row_group = table_body.find_all('tbody')[0].find_all('tr')
- email_stats = service_row_group[0].find_all('div', class_='big-number-number')
- sms_stats = service_row_group[1].find_all('div', class_='big-number-number')
- email_sending, email_delivered, email_failed = [int(x.text.strip()) for x in email_stats]
- sms_sending, sms_delivered, sms_failed = [int(x.text.strip()) for x in sms_stats]
+ email_stats = service_row_group[1].select('.big-number-number')[0]
+ sms_stats = service_row_group[1].select('.big-number-number')[1]
- assert email_sending == 2
- assert email_delivered == 3
- assert email_failed == 5
- assert sms_sending == 32
- assert sms_delivered == 7
- assert sms_failed == 11
+ assert normalize_spaces(email_stats.text) == '10'
+ assert normalize_spaces(sms_stats.text) == '50'
@pytest.mark.parametrize('endpoint, restricted', [
@@ -388,32 +354,9 @@ def test_should_show_archived_services_last(
table_body = page.find_all('table')[0].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() == 'A'
- assert services[1].td.text.strip() == 'B'
- assert services[2].td.text.strip() == 'C'
-
-
-@pytest.mark.parametrize('research_mode', (True, False))
-def test_shows_archived_label_instead_of_live_or_research_mode_label(
- platform_admin_client,
- mock_get_detailed_services,
- research_mode,
-):
- services = [
- service_json(restricted=False, research_mode=research_mode, active=False)
- ]
- services[0]['statistics'] = create_stats()
-
- mock_get_detailed_services.return_value = {'data': services}
- response = platform_admin_client.get(url_for('main.live_services'))
-
- assert response.status_code == 200
- page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser')
-
- table_body = page.find_all('table')[0].find_all('tbody')[0]
- service_mode = table_body.find_all('tbody')[0].find_all('tr')[1].td.text.strip()
- # get second column, which contains flags as text.
- assert service_mode == 'archived'
+ assert normalize_spaces(services[0].td.text) == 'A'
+ assert normalize_spaces(services[1].td.text) == 'B'
+ assert normalize_spaces(services[2].td.text) == 'C Archived'
@pytest.mark.parametrize('endpoint, restricted, research_mode', [
@@ -472,9 +415,9 @@ def test_should_order_services_by_usage_with_inactive_last(
table_body = page.find_all('table')[0].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'
+ assert normalize_spaces(services[0].td.text) == 'My Service 2'
+ assert normalize_spaces(services[1].td.text) == 'My Service 1'
+ assert normalize_spaces(services[2].td.text) == 'My Service 3 Archived'
def test_sum_service_usage_is_sum_of_all_activity(fake_uuid):