Projet

Général

Profil

0005-cells-invalid-cell-report-38009.patch

Lauréline Guérin, 02 mars 2020 16:08

Télécharger (7,13 ko)

Voir les différences:

Subject: [PATCH 5/6] cells: invalid cell report (#38009)

 combo/data/models.py                          |  8 ++++--
 .../templates/combo/invalid_cell_report.html  | 28 +++++++++++++++++++
 .../manager/templates/combo/manager_home.html |  1 +
 combo/manager/urls.py                         |  1 +
 combo/manager/views.py                        | 12 ++++++++
 tests/test_manager.py                         | 23 +++++++++++++++
 6 files changed, 71 insertions(+), 2 deletions(-)
 create mode 100644 combo/manager/templates/combo/invalid_cell_report.html
combo/data/models.py
642 642
        return cell_types
643 643

  
644 644
    @classmethod
645
    def get_cells(cls, cell_filter=None, skip_cell_cache=False, prefetch_validity_info=False, **kwargs):
645
    def get_cells(cls, cell_filter=None, skip_cell_cache=False, prefetch_validity_info=False, select_related=None, **kwargs):
646 646
        """Returns the list of cells of various classes matching **kwargs"""
647 647
        cells = []
648 648
        pages = []
649
        select_related = select_related or {}
649 650
        if 'page' in kwargs:
650 651
            pages = [kwargs['page']]
651 652
        elif 'page__in' in kwargs:
......
670 671
                continue
671 672
            if cell_filter and not cell_filter(klass):
672 673
                continue
673
            cells.extend(klass.objects.filter(**kwargs))
674
            cells_queryset = klass.objects.filter(**kwargs)
675
            if select_related:
676
                cells_queryset = cells_queryset.select_related(*select_related)
677
            cells.extend(cells_queryset)
674 678
        if prefetch_validity_info:
675 679
            validity_info_list = list(ValidityInfo.objects.select_related('content_type'))
676 680
            for cell in cells:
combo/manager/templates/combo/invalid_cell_report.html
1
{% extends "combo/manager_base.html" %}
2
{% load i18n %}
3

  
4
{% block appbar %}
5
<h2>{% trans 'Invalid cells' %}</h2>
6
{% endblock %}
7

  
8
{% block breadcrumb %}
9
  {{ block.super }}
10
  <a href="{% url 'combo-manager-invalid-cell-report' %}">{% trans 'Anomaly report' %}</a>
11
{% endblock %}
12

  
13
{% block content %}
14
{% if object_list %}
15
<ul class="objects-list">
16
  {% for cell in object_list %}
17
  <li>
18
      {% trans "Page:" %} <a href="{% url 'combo-manager-page-view' pk=cell.page_id %}">{{ cell.page.title }}</a> -
19
      {% trans "Cell:" %} <a href="{% url 'combo-manager-page-view' pk=cell.page_id %}#cell-{{ cell.get_reference }}">{{ cell.get_label }}</a>
20
  </li>
21
  {% endfor %}
22
</ul>
23
{% else %}
24
<div class="big-msg-info">
25
  {% trans "No invalid cell found." %}
26
</div>
27
{% endif %}
28
{% endblock %}
combo/manager/templates/combo/manager_home.html
9 9
<ul class="extra-actions-menu">
10 10
 <li><a download href="{% url 'combo-manager-site-export' %}">{% trans 'Export Site' %}</a></li>
11 11
 <li><a href="{% url 'combo-manager-site-import' %}">{% trans 'Import Site' %}</a></li>
12
 <li><a href="{% url 'combo-manager-invalid-cell-report' %}">{% trans 'Anomaly report' %}</a></li>
12 13
 {% for extra_action in extra_actions %}
13 14
 <li><a href="{{ extra_action.href }}">{{ extra_action.text }}</a></li>
14 15
 {% endfor %}
combo/manager/urls.py
28 28
        url(r'^menu.json$', views.menu_json),
29 29
        url(r'^site-export$', views.site_export, name='combo-manager-site-export'),
30 30
        url(r'^site-import$', views.site_import, name='combo-manager-site-import'),
31
        url(r'^cells/invalid-report/$', views.invalid_cell_report, name='combo-manager-invalid-cell-report'),
31 32
        url(r'^pages/add/$', views.page_add, name='combo-manager-page-add'),
32 33
        url(r'^pages/(?P<pk>\d+)/$', views.page_view,
33 34
            name='combo-manager-page-view'),
combo/manager/views.py
24 24
from django.core.urlresolvers import reverse, reverse_lazy
25 25
from django.http import HttpResponse, HttpResponseRedirect, Http404
26 26
from django.shortcuts import redirect
27
from django.shortcuts import render
27 28
from django.shortcuts import get_object_or_404
28 29
from django.utils.translation import ugettext_lazy as _
29 30
from django.utils.encoding import force_text, force_bytes
......
91 92
site_import = SiteImportView.as_view()
92 93

  
93 94

  
95
def invalid_cell_report(request):
96
    invalid_cells = CellBase.get_cells(
97
        select_related=['page'],
98
        page__snapshot__isnull=True,
99
        validity_info__invalid_since__isnull=False)
100
    context = {
101
        'object_list': invalid_cells,
102
    }
103
    return render(request, 'combo/invalid_cell_report.html', context)
104

  
105

  
94 106
class PageAddView(CreateView):
95 107
    model = Page
96 108
    template_name = 'combo/page_add.html'
tests/test_manager.py
586 586
    assert 'Missing groups: foobar' in resp.text
587 587

  
588 588

  
589
def test_invalid_cell_report(app, admin_user):
590
    app = login(app)
591
    resp = app.get('/manage/cells/invalid-report/')
592
    assert resp.context['object_list'] == []
593

  
594
    page = Page.objects.create(title='One', slug='one', template_name='standard')
595
    cell = TextCell.objects.create(page=page, placeholder='content', text='Foobar', order=0)
596
    resp = app.get('/manage/cells/invalid-report/')
597
    assert resp.context['object_list'] == []
598

  
599
    cell.mark_as_invalid('foo_bar_reason')
600
    resp = app.get('/manage/cells/invalid-report/')
601
    assert resp.context['object_list'] == [cell]
602
    assert '<a href="/manage/pages/{}/">{}</a>'.format(page.pk, page.title) in resp.text
603
    assert '<a href="/manage/pages/{}/#cell-{}">{}</a>'.format(page.pk, cell.get_reference(), cell.get_label()) in resp.text
604

  
605
    snapshot = PageSnapshot.objects.create(page=page)
606
    page.snapshot = snapshot
607
    page.save()
608
    resp = app.get('/manage/cells/invalid-report/')
609
    assert resp.context['object_list'] == []
610

  
611

  
589 612
def test_duplicate_page(app, admin_user):
590 613
    page = Page.objects.create(title='One', slug='one', template_name='standard', exclude_from_navigation=False)
591 614
    TextCell.objects.create(page=page, placeholder='content', text='Foobar', order=0)
592
-