0005-cells-invalid-cell-report-38009.patch
combo/data/models.py | ||
---|---|---|
628 | 628 |
return cell_types |
629 | 629 | |
630 | 630 |
@classmethod |
631 |
def get_cells(cls, cell_filter=None, skip_cell_cache=False, **kwargs): |
|
631 |
def get_cells(cls, cell_filter=None, skip_cell_cache=False, select_related=None, **kwargs):
|
|
632 | 632 |
"""Returns the list of cells of various classes matching **kwargs""" |
633 | 633 |
cells = [] |
634 | 634 |
pages = [] |
635 |
select_related = select_related or {} |
|
635 | 636 |
if 'page' in kwargs: |
636 | 637 |
pages = [kwargs['page']] |
637 | 638 |
elif 'page__in' in kwargs: |
... | ... | |
656 | 657 |
continue |
657 | 658 |
if cell_filter and not cell_filter(klass): |
658 | 659 |
continue |
659 |
cells.extend(klass.objects.filter(**kwargs)) |
|
660 |
cells_queryset = klass.objects.filter(**kwargs) |
|
661 |
if select_related: |
|
662 |
cells_queryset = cells_queryset.select_related(*select_related) |
|
663 |
cells.extend(cells_queryset) |
|
660 | 664 |
cells.sort(key=lambda x: x.order) |
661 | 665 |
return cells |
662 | 666 |
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 |
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 | ||
---|---|---|
580 | 580 |
assert 'Missing groups: foobar' in resp.text |
581 | 581 | |
582 | 582 | |
583 |
def test_invalid_cell_report(app, admin_user): |
|
584 |
app = login(app) |
|
585 |
resp = app.get('/manage/cells/invalid-report/') |
|
586 |
assert resp.context['object_list'] == [] |
|
587 | ||
588 |
page = Page.objects.create(title='One', slug='one', template_name='standard') |
|
589 |
cell = TextCell.objects.create(page=page, placeholder='content', text='Foobar', order=0) |
|
590 |
resp = app.get('/manage/cells/invalid-report/') |
|
591 |
assert resp.context['object_list'] == [] |
|
592 | ||
593 |
cell.mark_as_invalid('foo_bar_reason') |
|
594 |
resp = app.get('/manage/cells/invalid-report/') |
|
595 |
assert resp.context['object_list'] == [cell] |
|
596 |
assert '<a href="/manage/pages/{}/">{}</a>'.format(page.pk, page.title) in resp.text |
|
597 |
assert '<a href="/manage/pages/{}/#cell-{}">{}</a>'.format(page.pk, cell.get_reference(), cell.get_label()) in resp.text |
|
598 | ||
599 |
snapshot = PageSnapshot.objects.create(page=page) |
|
600 |
page.snapshot = snapshot |
|
601 |
page.save() |
|
602 |
resp = app.get('/manage/cells/invalid-report/') |
|
603 |
assert resp.context['object_list'] == [] |
|
604 | ||
605 | ||
583 | 606 |
def test_duplicate_page(app, admin_user): |
584 | 607 |
page = Page.objects.create(title='One', slug='one', template_name='standard', exclude_from_navigation=False) |
585 | 608 |
TextCell.objects.create(page=page, placeholder='content', text='Foobar', order=0) |
586 |
- |