From 4a628974224754d7dc7514d2a0fe263a4e469505 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laur=C3=A9line=20Gu=C3=A9rin?= Date: Fri, 5 Jun 2020 11:42:02 +0200 Subject: [PATCH] cells: display invalidity date or delay (#43605) --- combo/data/models.py | 8 ++- combo/manager/templates/combo/page_view.html | 12 +++-- combo/public/templatetags/combo.py | 12 ++++- tests/test_cells.py | 23 ++++++++- tests/test_manager.py | 51 ++++++++++++-------- 5 files changed, 78 insertions(+), 28 deletions(-) diff --git a/combo/data/models.py b/combo/data/models.py index dedbabad..97cb88f2 100644 --- a/combo/data/models.py +++ b/combo/data/models.py @@ -547,6 +547,12 @@ class ValidityInfo(models.Model): class Meta: unique_together = [('content_type', 'object_id')] + @property + def invalid_datetime(self): + if not self.invalid_since: + return + return self.invalid_since + datetime.timedelta(days=2) + class CellMeta(MediaDefiningClass, ModelBase): pass @@ -917,7 +923,7 @@ class CellBase(six.with_metaclass(CellMeta, models.Model)): def is_visible(self, user=None, check_validity_info=True): if check_validity_info: validity_info = self.get_validity_info() - if validity_info is not None and validity_info.invalid_since and validity_info.invalid_since < now() - datetime.timedelta(days=2): + if validity_info is not None and validity_info.invalid_datetime and validity_info.invalid_datetime <= now(): return False return element_is_visible(self, user=user) diff --git a/combo/manager/templates/combo/page_view.html b/combo/manager/templates/combo/page_view.html index e9a14bbb..2b4d6885 100644 --- a/combo/manager/templates/combo/page_view.html +++ b/combo/manager/templates/combo/page_view.html @@ -150,11 +150,15 @@ [{{ cell.extra_css_class }}] {% endif %} {{cell.get_additional_label|default_if_none:""}} - {% with cell.get_invalid_reason as invalid_reason %} - {% if invalid_reason %} - {{ invalid_reason }} + {% if cell.get_invalid_reason %} + {{ cell.get_invalid_reason }} - + {% if cell.get_validity_info.invalid_datetime|date_in_past %} + {% blocktrans with cell.get_validity_info.invalid_datetime|date:"DATETIME_FORMAT" as invalidity_date %}This cell is no longer displayed since {{ invalidity_date }}.{% endblocktrans %} + {% else %} + {% blocktrans with cell.get_validity_info.invalid_datetime|timeuntil as invalidity_delay %}This cell will no longer be displayed in {{ invalidity_delay }}.{% endblocktrans %} + {% endif %} + {% endif %} - {% endwith %} {% if not cell.public %} foo_bar_reason' in resp.text + assert 'foo_bar_reason' in resp.text + assert 'This cell will no longer be displayed in 1 day, 23 hours' in resp.text - cell.mark_as_invalid('another_foo_bar_reason', force=False) - validity_info.refresh_from_db() - assert old_reason == validity_info.invalid_reason_code - assert old_date == validity_info.invalid_since + ValidityInfo.objects.update(invalid_since=now() - datetime.timedelta(minutes=47*60-1)) + resp = app.get('/manage/pages/%s/' % page.pk) + assert 'foo_bar_reason' in resp.text + assert 'This cell will no longer be displayed in 1 hour, 1 minute.' in resp.text - cell.mark_as_invalid('another_foo_bar_reason') - validity_info.refresh_from_db() - assert validity_info.invalid_reason_code == 'another_foo_bar_reason' - assert old_date < validity_info.invalid_since + ValidityInfo.objects.update(invalid_since=now() - datetime.timedelta(minutes=47*60+29)) + resp = app.get('/manage/pages/%s/' % page.pk) + assert 'foo_bar_reason' in resp.text + assert 'This cell will no longer be displayed in 31 minutes.' in resp.text + + ValidityInfo.objects.update(invalid_since=now() - datetime.timedelta(days=2)) + resp = app.get('/manage/pages/%s/' % page.pk) + assert 'foo_bar_reason' in resp.text + assert 'This cell is no longer displayed since June 5, 2020, noon.' in resp.text + + ValidityInfo.objects.update(invalid_since=now() - datetime.timedelta(days=2, minutes=10*60+2)) + resp = app.get('/manage/pages/%s/' % page.pk) + assert 'foo_bar_reason' in resp.text + assert 'This cell is no longer displayed since June 5, 2020, 1:58 a.m.' in resp.text cell.mark_as_valid() assert ValidityInfo.objects.exists() is False resp = app.get('/manage/pages/%s/' % page.pk) - assert 'foo_bar_reason' not in resp.text + assert 'foo_bar_reason' not in resp.text cell2 = LinkListCell.objects.create(order=0, placeholder='content', page=page) item = LinkCell.objects.create(page=page, placeholder=cell2.link_placeholder, order=0) item.mark_as_invalid('foo_bar_reason') cell2.check_validity() resp = app.get('/manage/pages/%s/' % page.pk) - assert 'Invalid link' in resp.text + assert 'Invalid link' in resp.text + assert 'This cell will no longer be displayed in 2 days.' in resp.text assert 'foo_bar_reason' in resp.text