From 9a5fbca707f35c2cee388c66f059b08f29e6087f Mon Sep 17 00:00:00 2001 From: Chris Hill-Scott Date: Mon, 18 Jul 2016 09:05:00 +0100 Subject: [PATCH] =?UTF-8?q?Make=20=E2=80=98Available=20for=E2=80=A6?= =?UTF-8?q?=E2=80=99=20text=20on=20job=20page=20relative?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When we say ‘delivery information is available for 7 days’ you have to infer _when_ the seven days starts. When you come back to the page it still says ‘available for 7 days’ even if you only have a day left to download it. This is confusing. This commit changes the text to be relative to now, eg ‘available for 7 days’, ‘available for 1 day’. The date is counted to midnight on the seventh day, which is when the data is actually deleted. --- app/main/views/jobs.py | 16 ++++++++++++++-- app/templates/partials/jobs/notifications.html | 2 +- requirements.txt | 1 + tests/__init__.py | 4 ++-- tests/app/main/views/test_jobs.py | 2 +- 5 files changed, 19 insertions(+), 6 deletions(-) diff --git a/app/main/views/jobs.py b/app/main/views/jobs.py index 4df9fa983..024412dfb 100644 --- a/app/main/views/jobs.py +++ b/app/main/views/jobs.py @@ -1,6 +1,9 @@ # -*- coding: utf-8 -*- import time +import dateutil +from datetime import datetime, timedelta, timezone +import ago from flask import ( render_template, @@ -296,7 +299,6 @@ def _get_job_counts(job, help_argument): def get_job_partials(job): - filter_args = _parse_filter_args(request.args) _set_status_filters(filter_args) return { @@ -317,7 +319,17 @@ def get_job_partials(job): job_id=job['id'], status=request.args.get('status', '') ), - help=get_help_argument() + help=get_help_argument(), + time_left=ago.human( + ( + datetime.now(timezone.utc).replace(hour=23, minute=59, second=59) + ) - ( + dateutil.parser.parse(job['created_at']) + timedelta(days=8) + ), + future_tense='Data available for {}', + past_tense='Was available {} ago', # No-one should ever see this + precision=1 + ) ), 'status': render_template( 'partials/jobs/status.html', diff --git a/app/templates/partials/jobs/notifications.html b/app/templates/partials/jobs/notifications.html index f81fe5a9d..27243bfbb 100644 --- a/app/templates/partials/jobs/notifications.html +++ b/app/templates/partials/jobs/notifications.html @@ -8,7 +8,7 @@

Download this report   - Available for 7 days + {{ time_left }}

{% endif %} diff --git a/requirements.txt b/requirements.txt index d953f7a6a..3913be4b8 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,4 @@ +ago==0.0.8 Flask==0.10.1 Flask-Script==2.0.5 Flask-WTF==0.11 diff --git a/tests/__init__.py b/tests/__init__.py index df6d357fb..7841a02e7 100644 --- a/tests/__init__.py +++ b/tests/__init__.py @@ -1,6 +1,6 @@ import pytest import uuid -from datetime import datetime, timedelta, date +from datetime import datetime, timedelta, date, timezone from flask.testing import FlaskClient from flask import url_for from flask_login import login_user @@ -155,7 +155,7 @@ def job_json(service_id, if template_id is None: template_id = str(generate_uuid()) if created_at is None: - created_at = str(datetime.utcnow().time()) + created_at = str(datetime.now(timezone.utc).strftime('%Y-%m-%dT%H:%M:%S.%f%z')) if status is None: status = 'Delivered' data = { diff --git a/tests/app/main/views/test_jobs.py b/tests/app/main/views/test_jobs.py index 704e2e067..0cffd5c21 100644 --- a/tests/app/main/views/test_jobs.py +++ b/tests/app/main/views/test_jobs.py @@ -97,7 +97,7 @@ def test_should_show_page_for_one_job( status=status_argument ) assert csv_link.text == 'Download this report' - assert page.find('span', {'id': 'time-left'}).text == 'Available for 7 days' + assert page.find('span', {'id': 'time-left'}).text == 'Data available for 7 days' mock_get_notifications.assert_called_with( service_one['id'], fake_uuid,