diff --git a/app/assets/stylesheets/components/big-number.scss b/app/assets/stylesheets/components/big-number.scss index 3afc5320a..57590d461 100644 --- a/app/assets/stylesheets/components/big-number.scss +++ b/app/assets/stylesheets/components/big-number.scss @@ -85,7 +85,8 @@ outline: 3px solid $yellow; } - .big-number { + .big-number, + .big-number-smaller { background: transparent; } diff --git a/app/main/views/dashboard.py b/app/main/views/dashboard.py index 675f5e5e0..8f343a68f 100644 --- a/app/main/views/dashboard.py +++ b/app/main/views/dashboard.py @@ -10,7 +10,6 @@ from flask import ( Response, ) from flask_login import login_required - from notifications_utils.recipients import format_phone_number_human_readable from app.main import main @@ -303,7 +302,18 @@ def get_dashboard_partials(service_id): for job in job_api_client.get_jobs(service_id, limit_days=7, statuses=statuses_to_display)['data'] ] service = service_api_client.get_detailed_service(service_id) - column_width = 'column-third' if 'letter' in current_service['permissions'] else 'column-half' + column_width, max_notifiction_count = get_column_properties( + number_of_columns=( + 3 if 'letter' in current_service['permissions'] else 2 + ) + ) + dashboard_totals = get_dashboard_totals(service['data']['statistics']), + highest_notification_count = max( + sum( + value[key] for key in {'requested', 'failed', 'delivered'} + ) + for key, value in dashboard_totals[0].items() + ) return { 'upcoming': render_template( @@ -320,8 +330,11 @@ def get_dashboard_partials(service_id): 'totals': render_template( 'views/dashboard/_totals.html', service_id=service_id, - statistics=get_dashboard_totals(service['data']['statistics']), - column_width=column_width + statistics=dashboard_totals[0], + column_width=column_width, + smaller_font_size=( + highest_notification_count > max_notifiction_count + ), ), 'template-statistics': render_template( 'views/dashboard/template-statistics.html', @@ -496,3 +509,10 @@ def get_tuples_of_financial_years( ) for year in range(start, end + 1) ) + + +def get_column_properties(number_of_columns): + return { + 2: ('column-half', 999999999), + 3: ('column-third', 99999), + }.get(number_of_columns) diff --git a/app/templates/views/dashboard/_totals.html b/app/templates/views/dashboard/_totals.html index 469a4b266..931fb3ad9 100644 --- a/app/templates/views/dashboard/_totals.html +++ b/app/templates/views/dashboard/_totals.html @@ -11,7 +11,8 @@ statistics['email']['failed_percentage'], statistics['email']['show_warning'], failure_link=url_for(".view_notifications", service_id=service_id, message_type='email', status='failed'), - link=url_for(".view_notifications", service_id=service_id, message_type='email', status='sending,delivered,failed') + link=url_for(".view_notifications", service_id=service_id, message_type='email', status='sending,delivered,failed'), + smaller=smaller_font_size ) }}
@@ -22,7 +23,8 @@ statistics['sms']['failed_percentage'], statistics['sms']['show_warning'], failure_link=url_for(".view_notifications", service_id=service_id, message_type='sms', status='failed'), - link=url_for(".view_notifications", service_id=service_id, message_type='sms', status='sending,delivered,failed') + link=url_for(".view_notifications", service_id=service_id, message_type='sms', status='sending,delivered,failed'), + smaller=smaller_font_size ) }}
{% if 'letter' in current_service['permissions'] %} @@ -34,7 +36,8 @@ statistics['letter']['failed_percentage'], statistics['letter']['show_warning'], failure_link=url_for(".view_notifications", service_id=service_id, message_type='letter', status='failed'), - link=url_for(".view_notifications", service_id=service_id, message_type='letter', status='') + link=url_for(".view_notifications", service_id=service_id, message_type='letter', status=''), + smaller=smaller_font_size ) }} {% endif %} diff --git a/tests/app/main/views/test_dashboard.py b/tests/app/main/views/test_dashboard.py index d8eb6c20e..671d0dbae 100644 --- a/tests/app/main/views/test_dashboard.py +++ b/tests/app/main/views/test_dashboard.py @@ -461,6 +461,77 @@ def test_correct_columns_display_on_dashboard( assert len(page.select(column_name)) == expected_column_count +@pytest.mark.parametrize('permissions, totals, big_number_class, expected_column_count', [ + ( + ['email', 'sms'], + { + 'email': {'requested': 0, 'delivered': 0, 'failed': 0}, + 'sms': {'requested': 999999999, 'delivered': 0, 'failed': 0} + }, + '.big-number', + 2, + ), + ( + ['email', 'sms'], + { + 'email': {'requested': 1000000000, 'delivered': 0, 'failed': 0}, + 'sms': {'requested': 1000000, 'delivered': 0, 'failed': 0} + }, + '.big-number-smaller', + 2, + ), + ( + ['email', 'sms', 'letter'], + { + 'email': {'requested': 0, 'delivered': 0, 'failed': 0}, + 'sms': {'requested': 99999, 'delivered': 0, 'failed': 0}, + 'letter': {'requested': 99999, 'delivered': 0, 'failed': 0} + }, + '.big-number', + 3, + ), + ( + ['email', 'sms', 'letter'], + { + 'email': {'requested': 0, 'delivered': 0, 'failed': 0}, + 'sms': {'requested': 0, 'delivered': 0, 'failed': 0}, + 'letter': {'requested': 100000, 'delivered': 0, 'failed': 0}, + }, + '.big-number-smaller', + 3, + ), +]) +def test_correct_font_size_for_big_numbers( + client_request, + mocker, + mock_get_service_templates, + mock_get_template_statistics, + mock_get_detailed_service, + mock_get_jobs, + service_one, + permissions, + totals, + big_number_class, + expected_column_count, +): + + service_one['permissions'] = permissions + + mocker.patch( + 'app.main.views.dashboard.get_dashboard_totals', + return_value=totals + ) + + page = client_request.get( + 'main.service_dashboard', + service_id=service_one['id'], + ) + + assert expected_column_count == len( + page.select('.big-number-with-status {}'.format(big_number_class)) + ) + + @freeze_time("2016-01-01 11:09:00.061258") def test_should_show_recent_jobs_on_dashboard( logged_in_client,