From 192c7153061b92ce48f2040fa98e346801dc648c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20P=C3=A9ters?= Date: Tue, 17 Oct 2017 20:12:56 +0200 Subject: [PATCH] manager: don't crash on buggy cells (#19503) --- combo/public/templatetags/combo.py | 4 ++++ tests/test_manager.py | 20 ++++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/combo/public/templatetags/combo.py b/combo/public/templatetags/combo.py index 7392427..6988c86 100644 --- a/combo/public/templatetags/combo.py +++ b/combo/public/templatetags/combo.py @@ -88,6 +88,10 @@ def render_cell(context, cell): return cell.render(context) except NothingInCacheException: return template.loader.get_template('combo/deferred-cell.html').render(context) + except: + if context.get('placeholder_search_mode'): + return '' + raise @register.tag def skeleton_extra_placeholder(parser, token): diff --git a/tests/test_manager.py b/tests/test_manager.py index 79d42c0..0813b11 100644 --- a/tests/test_manager.py +++ b/tests/test_manager.py @@ -1,4 +1,5 @@ import base64 +import json import os import re import StringIO @@ -7,8 +8,10 @@ import urllib import mock from django.core.files.storage import default_storage +from django.core.urlresolvers import reverse from django.conf import settings from django.contrib.auth.models import User +from django.template import TemplateSyntaxError from django.test import override_settings import pytest @@ -622,3 +625,20 @@ def test_page_cell_placeholder(app, admin_user): cell.save() resp = app.get('/manage/pages/%s/' % page.id) assert re.findall('data-placeholder-key="(.*)">', resp.body) == ['content', 'foobar', 'footer'] + +def test_page_discover_placeholder_with_error_cells(app, admin_user): + page = Page(title='One', slug='one', template_name='standard') + page.save() + cell = JsonCell(page=page, placeholder='content', order=0, url='xx') + cell.template_string = '{% xxx %}' + cell.save() + + app = login(app) + + with mock.patch('combo.utils.requests.get') as requests_get: + data = {'data': [{'url': 'xxx', 'text': 'xxx'}]} + with pytest.raises(TemplateSyntaxError): + cell.render({}) + + resp = app.get('/manage/pages/%s/' % page.id) + assert re.findall('data-placeholder-key="(.*)">', resp.body) == ['content', 'footer'] -- 2.15.0.rc1