From 910a8dca1dd2951bf6e8abee8bfc2c62661e3baf Mon Sep 17 00:00:00 2001 From: Peter Mathis Date: Thu, 21 Mar 2019 11:37:01 +0100 Subject: [PATCH] Fix AttributeError in @@render-portlet and add a test for that --- news/124.bugfix | 1 + plone/app/portlets/browser/utils.py | 1 - plone/app/portlets/tests/test_utils.py | 42 +++++++++++++++++++++++--- 3 files changed, 39 insertions(+), 5 deletions(-) create mode 100644 news/124.bugfix diff --git a/news/124.bugfix b/news/124.bugfix new file mode 100644 index 00000000..2a2d3946 --- /dev/null +++ b/news/124.bugfix @@ -0,0 +1 @@ +Fix loading portlets with `@@render-portlet` [petschki] diff --git a/plone/app/portlets/browser/utils.py b/plone/app/portlets/browser/utils.py index 8d518a54..073f113a 100644 --- a/plone/app/portlets/browser/utils.py +++ b/plone/app/portlets/browser/utils.py @@ -27,7 +27,6 @@ def render_portlet(self, portlethash, **kw): manager, assignment.data), IPortletRenderer ) - renderer = renderer.__of__(self.context) renderer.update() if IDeferredPortletRenderer.providedBy(renderer): diff --git a/plone/app/portlets/tests/test_utils.py b/plone/app/portlets/tests/test_utils.py index f1dc0267..64042f73 100644 --- a/plone/app/portlets/tests/test_utils.py +++ b/plone/app/portlets/tests/test_utils.py @@ -1,15 +1,23 @@ # -*- coding: utf-8 -*- +from Products.CMFPlone.utils import safe_unicode + from plone.app.testing import TEST_USER_ID -from zope.component import getUtility, getMultiAdapter +from zope.component import getMultiAdapter +from zope.component import getUtility -from plone.portlets.interfaces import IPortletManager from plone.portlets.interfaces import IPortletAssignmentMapping +from plone.portlets.interfaces import IPortletManager +from plone.portlets.interfaces import IPortletRenderer -from plone.portlets.constants import USER_CATEGORY, CONTEXT_CATEGORY +from plone.portlets.constants import CONTEXT_CATEGORY +from plone.portlets.constants import USER_CATEGORY +from plone.portlets.utils import hashPortletInfo -from plone.app.portlets.storage import PortletAssignmentMapping +from plone.app.portlets.browser.utils import PortletUtilities from plone.app.portlets.portlets import classic +from plone.app.portlets.portlets import news +from plone.app.portlets.storage import PortletAssignmentMapping from plone.app.portlets.tests.base import PortletsTestCase from plone.app.portlets.utils import assignment_from_key @@ -49,8 +57,34 @@ def testGetPortletFromUserCategory(self): self.assertEqual(c, a) +class TestRendering(PortletsTestCase): + + def afterSetUp(self): + self.portal.invokeFactory('News Item', 'testnews', title=u'Test News') + + def testTraversalRendererWithHash(self): + context = self.folder + request = self.folder.REQUEST + manager = getUtility( + IPortletManager, name='plone.leftcolumn', context=self.folder) + assignment = news.Assignment(state=('private', )) + mapping = getMultiAdapter( + (context, manager), IPortletAssignmentMapping) + mapping['newsportlet'] = assignment + portlet_hash = hashPortletInfo( + dict(manager=manager.__name__, category=CONTEXT_CATEGORY, + key='/'.join(context.getPhysicalPath()), + name='newsportlet')) + render_portlet_view = PortletUtilities(context, request) + rendered_portlet = render_portlet_view.render_portlet( + safe_unicode(portlet_hash)) + self.assertIn(u'portletNews', rendered_portlet) + self.assertIn(u'Test News', rendered_portlet) + + def test_suite(): from unittest import TestSuite, makeSuite suite = TestSuite() suite.addTest(makeSuite(TestAssignmentFromKey)) + suite.addTest(makeSuite(TestRendering)) return suite