diff --git a/app/__init__.py b/app/__init__.py index 9932ac77f..4eacdff6b 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -105,6 +105,7 @@ def create_app(): application.add_template_filter(nl2br) application.add_template_filter(format_datetime) + application.add_template_filter(format_datetime_24h) application.add_template_filter(format_datetime_normal) application.add_template_filter(format_datetime_short) application.add_template_filter(format_time) @@ -200,19 +201,41 @@ def gmt_timezones(date): def format_datetime(date): - return gmt_timezones(date).strftime('%A %d %B %Y at %H:%M') + return '{} at {}'.format( + format_date(date), + format_time(date) + ) + + +def format_datetime_24h(date): + return '{} at {}'.format( + format_date(date), + gmt_timezones(date).strftime('%H:%M') + ) def format_datetime_normal(date): - return gmt_timezones(date).strftime('%d %B %Y at %H:%M').lstrip('0') + return '{} at {}'.format( + format_date_normal(date), + format_time(date) + ) def format_datetime_short(date): - return gmt_timezones(date).strftime('%d %B at %H:%M').lstrip('0') + return '{} at {}'.format( + format_date_short(date), + format_time(date) + ) def format_time(date): - return gmt_timezones(date).strftime('%H:%M') + return { + '12:00AM': 'Midnight', + '12:00PM': 'Midday' + }.get( + gmt_timezones(date).strftime('%-I:%M%p'), + gmt_timezones(date).strftime('%-I:%M%p') + ).lower() def format_date(date): diff --git a/app/utils.py b/app/utils.py index 6f2c9e3ec..98178fd7f 100644 --- a/app/utils.py +++ b/app/utils.py @@ -89,7 +89,7 @@ def get_errors_for_csv(recipients, template_type): def generate_notifications_csv(json_list): - from app import format_datetime, format_notification_status + from app import format_datetime_24h, format_notification_status content = StringIO() retval = None with content as csvfile: @@ -103,7 +103,7 @@ def generate_notifications_csv(json_list): x['template']['template_type'], x['job']['original_file_name'] if x['job'] else '', format_notification_status(x['status'], x['template']['template_type']), - format_datetime(x['created_at'])]) + format_datetime_24h(x['created_at'])]) retval = content.getvalue() return retval diff --git a/tests/app/main/views/test_api_keys.py b/tests/app/main/views/test_api_keys.py index 543929478..d63b540e7 100644 --- a/tests/app/main/views/test_api_keys.py +++ b/tests/app/main/views/test_api_keys.py @@ -39,7 +39,7 @@ def test_should_show_api_keys_page(app_, resp_data = response.get_data(as_text=True) assert 'some key name' in resp_data assert 'another key name' in resp_data - assert 'Revoked 1 January at 01:00' in resp_data + assert 'Revoked 1 January at 1:00am' in resp_data mock_get_api_keys.assert_called_once_with(service_id=fake_uuid) diff --git a/tests/app/main/views/test_jobs.py b/tests/app/main/views/test_jobs.py index a31f51edb..405cb4c62 100644 --- a/tests/app/main/views/test_jobs.py +++ b/tests/app/main/views/test_jobs.py @@ -78,7 +78,7 @@ def test_should_show_page_for_one_job( '{}: Your vehicle tax is about to expire'.format(service_one['name']) ) assert ' '.join(page.find('tbody').find('tr').text.split()) == ( - '07123456789 1 January at 11:10 Delivered' + '07123456789 1 January at 11:10am Delivered' ) assert page.find('div', {'data-key': 'notifications'})['data-resource'] == url_for( 'main.view_job_updates', @@ -160,7 +160,7 @@ def test_should_show_not_show_csv_download_in_tour( ) not in response.get_data(as_text=True) -@freeze_time("2016-01-01 11:09:00.061258") +@freeze_time("2016-01-01 00:00:00.000001") def test_should_show_updates_for_one_job_as_json( app_, service_one, @@ -185,8 +185,8 @@ def test_should_show_updates_for_one_job_as_json( assert '07123456789' in content['notifications'] assert 'Status' in content['notifications'] assert 'Delivered' in content['notifications'] - assert '11:10' in content['notifications'] - assert 'Uploaded by Test User on 1 January at 11:09' in content['status'] + assert '12:01am' in content['notifications'] + assert 'Uploaded by Test User on 1 January at midnight' in content['status'] @pytest.mark.parametrize( @@ -335,7 +335,7 @@ def test_should_download_notifications_for_a_job(app_, assert response.status_code == 200 assert response.get_data(as_text=True) == csv_content assert 'text/csv' in response.headers['Content-Type'] - assert 'sample template - 1 January at 11:09.csv"' in response.headers['Content-Disposition'] + assert 'sample template - 1 January at 11:09am.csv"' in response.headers['Content-Disposition'] @pytest.mark.parametrize( diff --git a/tests/app/test_utils.py b/tests/app/test_utils.py index 4f64a5a09..dda4cfa0b 100644 --- a/tests/app/test_utils.py +++ b/tests/app/test_utils.py @@ -25,7 +25,7 @@ def test_email_safe_return_dot_separated_email_domain(): ('permanent-failure', 'sms', 'Phone number doesn’t exist') ] ) -@freeze_time("2016-01-01 11:09:00.061258") +@freeze_time("2016-01-01 15:09:00.061258") def test_generate_csv_from_notifications( app_, service_one, @@ -46,5 +46,5 @@ def test_generate_csv_from_notifications( ) for row in DictReader(StringIO(csv_content)): - assert row['Time'] == 'Friday 01 January 2016 at 11:09' + assert row['Time'] == 'Friday 01 January 2016 at 15:09' assert row['Status'] == expected_status