Make ‘Available for…’ text on job page relative

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.
This commit is contained in:
Chris Hill-Scott
2016-07-18 09:05:00 +01:00
parent 52d5841bbe
commit 9a5fbca707
5 changed files with 19 additions and 6 deletions

View File

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

View File

@@ -8,7 +8,7 @@
<p class="bottom-gutter">
<a href="{{ download_link }}" download="download" class="heading-small">Download this report</a>
&emsp;
<span id="time-left">Available for 7 days</span>
<span id="time-left">{{ time_left }}</span>
</p>
{% endif %}

View File

@@ -1,3 +1,4 @@
ago==0.0.8
Flask==0.10.1
Flask-Script==2.0.5
Flask-WTF==0.11

View File

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

View File

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