r13322 - in MoreFieldsAndWidgets/archetypes.referencebrowserwidget/trunk/src/archetypes/referencebrowserwidget: browser tests
"Tom Gross" <[email protected]>
| Newsgroups | gmane.comp.web.zope.plone.archetypes.cvs |
|---|---|
| Message-ID | <[email protected]> |
Author: tom_gross
Date: Mon Dec 6 15:30:30 2010
New Revision: 13322
Modified:
MoreFieldsAndWidgets/archetypes.referencebrowserwidget/trunk/src/archetypes/referencebrowserwidget/browser/popup.pt
MoreFieldsAndWidgets/archetypes.referencebrowserwidget/trunk/src/archetypes/referencebrowserwidget/browser/view.py
MoreFieldsAndWidgets/archetypes.referencebrowserwidget/trunk/src/archetypes/referencebrowserwidget/tests/test_product.py
Log:
cleaned up breadcrumb code (refs #11289)
Modified: MoreFieldsAndWidgets/archetypes.referencebrowserwidget/trunk/src/archetypes/referencebrowserwidget/browser/popup.pt
==============================================================================
--- MoreFieldsAndWidgets/archetypes.referencebrowserwidget/trunk/src/archetypes/referencebrowserwidget/browser/popup.pt (original)
+++ MoreFieldsAndWidgets/archetypes.referencebrowserwidget/trunk/src/archetypes/referencebrowserwidget/browser/popup.pt Mon Dec 6 15:30:30 2010
@@ -115,8 +115,7 @@
<span id="breadcrumbs-you-are-here" i18n:domain="plone"
i18n:translate="you_are_here">You are here:</span>
- <tal:crumbs tal:repeat="
- crumb python:view.breadcrumbs(widget.startup_directory)">
+ <tal:crumbs tal:repeat="crumb view/breadcrumbs">
<a class="browsesite"
tal:attributes="href crumb/absolute_url;
Modified: MoreFieldsAndWidgets/archetypes.referencebrowserwidget/trunk/src/archetypes/referencebrowserwidget/browser/view.py
==============================================================================
--- MoreFieldsAndWidgets/archetypes.referencebrowserwidget/trunk/src/archetypes/referencebrowserwidget/browser/view.py (original)
+++ MoreFieldsAndWidgets/archetypes.referencebrowserwidget/trunk/src/archetypes/referencebrowserwidget/browser/view.py Mon Dec 6 15:30:30 2010
@@ -31,6 +31,7 @@
from Products.CMFPlone.PloneBatch import Batch
from archetypes.referencebrowserwidget import utils
+from archetypes.referencebrowserwidget.utils import getStartupDirectory
from archetypes.referencebrowserwidget.interfaces import IFieldRelation
from archetypes.referencebrowserwidget.interfaces import \
IReferenceBrowserHelperView
@@ -76,9 +77,11 @@
return ref.UID()
def getStartupDirectory(self, field):
- """ Return the path to the startup directory. """
+ """ Return the URL to the startup directory. """
widget = field.widget
- directory = widget.startup_directory
+
+ url_tool = self.context.restrictedTraverse('@@plone_tools').url()
+ basepath = '/'.join(url_tool.getRelativeContentPath(self.context))
if getattr(widget, 'startup_directory_method', None):
# First check that the method exists and isn't inherited.
method = getattr(aq_base(self.context),
@@ -92,7 +95,14 @@
False)
if callable(method):
method = method()
- return method
+ directory = method
+ elif getattr(self, 'startup_directory', None):
+ directory = self.startup_directory
+ if not directory.startswith('/'):
+ directory = '/'.join([basepath, directory])
+ else:
+ directory = basepath
+
return utils.getStartupDirectory(self.context, directory)
def getPortalPath(self):
@@ -146,7 +156,7 @@
if show_query:
try:
- results=catalog(**query)
+ results = catalog(**query)
except ParseError:
pass
@@ -260,33 +270,27 @@
return Batch(result, b_size, b_start, orphan=1)
- def breadcrumbs(self, startup_directory):
+ def breadcrumbs(self, startup_directory=None):
assert self._updated
- context = aq_inner(self.context)
+ context = aq_inner(self.context)
portal_state = getMultiAdapter((context, self.request),
name=u'plone_portal_state')
- portal = portal_state.portal()
-
- crumbs = context.restrictedTraverse('@@breadcrumbs_view').breadcrumbs()
-
- if startup_directory.startswith('/'):
- startup_directory = startup_directory[1:]
-
- startup_folder = portal.restrictedTraverse(startup_directory)
- startup_folder_url = startup_folder.absolute_url()
-
- newcrumbs = []
- for c in crumbs:
- if c['absolute_url'].startswith(startup_folder_url):
- c['absolute_url'] = self.genRefBrowserUrl(c['absolute_url'])
- newcrumbs.append(c)
+ bc_view = context.restrictedTraverse('@@breadcrumbs_view')
+ crumbs = bc_view.breadcrumbs()
if not self.widget.restrict_browsing_to_startup_directory:
- newcrumbs.insert(0,
- {'Title': 'Home',
- 'absolute_url': self.genRefBrowserUrl(
- portal_state.navigation_root_url())})
+ newcrumbs = [{'Title': 'Home',
+ 'absolute_url': self.genRefBrowserUrl(
+ portal_state.navigation_root_url())}]
+ else:
+ # browsing is restricted, so only the last item is
+ # interesting
+ crumbs = crumbs[-1:]
+ newcrumbs = []
+ for c in crumbs:
+ c['absolute_url'] = self.genRefBrowserUrl(c['absolute_url'])
+ newcrumbs.append(c)
return newcrumbs
def genRefBrowserUrl(self, urlbase):
Modified: MoreFieldsAndWidgets/archetypes.referencebrowserwidget/trunk/src/archetypes/referencebrowserwidget/tests/test_product.py
==============================================================================
--- MoreFieldsAndWidgets/archetypes.referencebrowserwidget/trunk/src/archetypes/referencebrowserwidget/tests/test_product.py (original)
+++ MoreFieldsAndWidgets/archetypes.referencebrowserwidget/trunk/src/archetypes/referencebrowserwidget/tests/test_product.py Mon Dec 6 15:30:30 2010
@@ -298,7 +298,7 @@
self.request.set('fieldName', fieldname)
self.request.set('fieldRealName', fieldname)
popup = self._getPopup()
- bc = popup.breadcrumbs('layer1')
+ bc = popup.breadcrumbs()
path = ''
pat = self.pat % (fieldname, fieldname)
@@ -311,18 +311,17 @@
assert bc['Title'] == compare[1]
def test_startup(self):
- """ The startup dir doesn't match the path we start with.
-
- -> the crumbs are empty except the home entry
+ """A completely different startup dir.
"""
fieldname = 'multiRef3'
self.request.set('at_url', '/plone/layer1/layer2/ref')
self.request.set('fieldName', fieldname)
self.request.set('fieldRealName', fieldname)
- popup = self._getPopup()
- bc = popup.breadcrumbs('news')
- assert len(bc) == 1
- assert bc[0]['Title'] == 'Home'
+ popup = self._getPopup(obj=self.portal.news)
+ bc = popup.breadcrumbs()
+ self.assertEqual(len(bc), 2)
+ self.assertEqual(bc[0]['Title'], 'Home')
+ self.assertEqual(bc[1]['Title'], 'News')
def test_restrictedbrowsing(self):
""" Only browse startup-dir and below """
@@ -331,16 +330,15 @@
self.request.set('fieldName', fieldname)
self.request.set('fieldRealName', fieldname)
- field = self.obj.getField(fieldname)
- field.widget.restrict_browsing_to_startup_directory = 1
+ widget = self.folder.ref.getField(fieldname).widget
+ widget.restrict_browsing_to_startup_directory = 1
- popup = self._getPopup()
- bc = popup.breadcrumbs('layer1/layer2')
- assert len(bc) == 2
- assert bc[0]['Title'] == 'Layer2'
- assert bc[1]['Title'] == 'ref'
+ popup = self._getPopup(obj=self.portal.layer1.layer2)
+ bc = popup.breadcrumbs(widget)
+ self.assertEqual(len(bc), 1)
+ self.assertEqual(bc[0]['Title'], 'Layer2')
- field.widget.restrict_browsing_to_startup_directory = 0
+ widget.restrict_browsing_to_startup_directory = 0
def test_isNotSelf(self):
catalog = getToolByName(self.portal, 'portal_catalog')
@@ -393,11 +391,13 @@
# dynamic query
field.widget.startup_directory_method = 'dynamicDirectory'
- assert helper.getStartupDirectory(field) == '/bar/dynamic'
+ self.assertEqual(helper.getStartupDirectory(field),
+ 'http://nohost/plone/bar/dynamic')
# constant query
field.widget.startup_directory_method = 'constantDirectory'
- assert helper.getStartupDirectory(field) == '/foo/constant'
+ self.assertEqual(helper.getStartupDirectory(field),
+ 'http://nohost/plone/foo/constant')
# clean up
field.widget.startup_directory_method = ''
@@ -473,6 +473,7 @@
self.setRoles(['Manager'])
makeContent(self.portal, portal_type='RefBrowserDemo', id='demo1')
makeContent(self.portal, portal_type='Document', id='page1')
+ makeContent(self.portal, portal_type='Folder', id='folder1')
self.demo1_url = self.portal.demo1.absolute_url(1)
self.popup_url = '%s/refbrowser_popup' % self.demo1_url
@@ -526,12 +527,16 @@
'value="Add..." src="') in body
assert '''<input type="button" class="destructive" value="Clear reference" onclick="javascript:refbrowser_removeReference('singleRef', 0)" />''' in body
- def getNormalizedPopup(self, url=None):
+ def getNormalizedPopup(self, url=None, field=None, startup_path=None):
if url is None:
url = self.demo1_url
+ if field is None:
+ field = 'singleRef'
+ if startup_path is None:
+ startup_path = self.popup_url
response = self.publish(
- '%s?fieldName=singleRef&fieldRealName=singleRef&at_url=%s'
- % (self.popup_url, url), self.basic_auth)
+ '%s?fieldName=%s&fieldRealName=%s&at_url=%s'
+ % (startup_path, field, field, url), self.basic_auth)
return normalize(response.getBody())
@@ -550,24 +555,23 @@
assert '<input type="hidden" name="at_url" value="plone/demo1" />' in body
def test_popup_items(self):
- wanted_rows = 6
+ wanted_rows = 7
wanted_insertlinks = 2
body = self.getNormalizedPopup()
INSERTLINK = re.compile(r'<input type="checkbox" class="insertreference" rel="[0-9a-f]*?" />')
ROWS = re.compile(r'<tr.*?>(.*?)</tr>', re.MULTILINE|re.DOTALL)
- assert len(ROWS.findall(body)) == wanted_rows
- assert len(INSERTLINK.findall(body)) == wanted_insertlinks
+ self.assertEqual(len(ROWS.findall(body)), wanted_rows)
+ self.assertEqual(len(INSERTLINK.findall(body)), wanted_insertlinks)
makeContent(self.portal, portal_type='News Item', id='newsitem')
body = self.getNormalizedPopup()
- assert len(ROWS.findall(body)) == wanted_rows + 1
- assert len(INSERTLINK.findall(body)) == wanted_insertlinks
+ self.assertEqual(len(ROWS.findall(body)), wanted_rows + 1)
+ self.assertEqual(len(INSERTLINK.findall(body)), wanted_insertlinks)
def test_bc_navigationroot(self):
- makeContent(self.portal, portal_type='Folder', id='folder1')
makeContent(self.portal.folder1, portal_type='Document', id='page1')
page = self.portal.folder1.page1
@@ -583,7 +587,7 @@
browser.addHeader('Authorization', 'Basic %s' % basic)
browser.open('%s/refbrowser_popup?%s' % (page.absolute_url(),
urlencode(data)))
- self.failUnless(('<a class="browsesite" href="http://nohost/plone/refbrowser_popup?'
+ self.assertTrue(('<a class="browsesite" href="http://nohost/plone/refbrowser_popup?'
'fieldName=relatedItems&fieldRealName=relatedItems'
'&at_url=plone/folder1/page1" rel="Home"> '
'<span>Home</span> </a>')
@@ -593,12 +597,29 @@
zope.interface.alsoProvides(self.portal.folder1, INavigationRoot)
browser.open('%s/refbrowser_popup?%s' % (page.absolute_url(),
urlencode(data)))
- self.failUnless(('<a class="browsesite" href="http://nohost/plone/folder1/refbrowser_popup?'
+ self.assertTrue(('<a class="browsesite" href="http://nohost/plone/folder1/refbrowser_popup?'
'fieldName=relatedItems&fieldRealName=relatedItems'
'&at_url=plone/folder1/page1" rel="Home"> '
'<span>Home</span> </a>')
in normalize(browser.contents))
+ def test_startup_directory(self):
+ startup_path = self.portal.folder1.absolute_url(1)
+ body = self.getNormalizedPopup(startup_path=startup_path,
+ field='multiRef3')
+ self.assertTrue(
+ ('<div id="portal-breadcrumbs"> '
+ '<span id="breadcrumbs-you-are-here">You are here:</span> '
+ '<span id="breadcrumbs-home"> '
+ '<a href="http://nohost/plone">Home</a> '
+ '<span class="breadcrumbSeparator"> › </span> '
+ '</span> '
+ '<span id="breadcrumbs-1" dir="ltr"> '
+ '<span id="breadcrumbs-current">folder1</span> '
+ '</span> '
+ '</div>') in body)
+
+
def test_suite():
return unittest.TestSuite([
unittest.makeSuite(ProductsTestCase),
------------------------------------------------------------------------------
What happens now with your Lotus Notes apps - do you make another costly
upgrade, or settle for being marooned without product support? Time to move
off Lotus Notes and onto the cloud with Force.com, apps are easier to build,
use, and manage than apps on traditional platforms. Sign up for the Lotus
Notes Migration Kit to learn more. http://p.sf.net/sfu/salesforce-d2d