[Checkins] SVN: five.megrok.layout/trunk/src/five/megrok/layout/ftests/layout/ Fix and add more tests (specially about security).
Sylvain Viollon
sylvain at infrae.com
Mon Nov 23 09:55:04 EST 2009
Log message for revision 105963:
Fix and add more tests (specially about security).
Changed:
U five.megrok.layout/trunk/src/five/megrok/layout/ftests/layout/layout.py
U five.megrok.layout/trunk/src/five/megrok/layout/ftests/layout/page.py
A five.megrok.layout/trunk/src/five/megrok/layout/ftests/layout/pagesecurity.py
A five.megrok.layout/trunk/src/five/megrok/layout/ftests/layout/pagesecurity_templates/
A five.megrok.layout/trunk/src/five/megrok/layout/ftests/layout/pagesecurity_templates/master.pt
U five.megrok.layout/trunk/src/five/megrok/layout/ftests/layout/resources.py
-=-
Modified: five.megrok.layout/trunk/src/five/megrok/layout/ftests/layout/layout.py
===================================================================
--- five.megrok.layout/trunk/src/five/megrok/layout/ftests/layout/layout.py 2009-11-23 14:21:17 UTC (rev 105962)
+++ five.megrok.layout/trunk/src/five/megrok/layout/ftests/layout/layout.py 2009-11-23 14:55:03 UTC (rev 105963)
@@ -3,23 +3,34 @@
>>> from five.megrok.layout.ftests.layout.layout import *
>>> from zope.component import getMultiAdapter
>>> from zope.publisher.browser import TestRequest
+ >>> from zope.interface.verify import verifyObject
>>> request = TestRequest()
- >>> mammoth = Mammoth()
+
+You can create a context object and as a layout for it:
+
+ >>> mammoth = Mammoth('arthur')
>>> mylayout = getMultiAdapter((request, mammoth), ILayout)
- >>> ILayout.providedBy(mylayout)
+ >>> mylayout
+ <five.megrok.layout.ftests.layout.layout.MyLayout object at ...>
+ >>> verifyObject(ILayout, mylayout)
True
-
- >>> mylayout.context
- <five.megrok.layout.ftests.layout.layout.Mammoth object at ...>
-
+ >>> mylayout.context.aq_base
+ <Mammoth at arthur>
>>> mylayout.render()
'<div> MyLayout </div>'
- >>> elephant = Elephant()
+The layout can be different depending of the context:
+
+ >>> elephant = Elephant('paul')
>>> mycontextlayout = getMultiAdapter((request, elephant), ILayout)
+ >>> mycontextlayout
+ <five.megrok.layout.ftests.layout.layout.MyContextLayout object at ...>
+ >>> mycontextlayout.context.aq_base
+ <Elephant at paul>
>>> mycontextlayout.render()
'<div> MyContextLayout </div>'
+
"""
from five import grok
@@ -28,11 +39,11 @@
from five.megrok.layout import Layout
-class Mammoth(grok.Context):
+class Mammoth(grok.Model):
pass
-class Elephant(grok.Context):
+class Elephant(grok.Model):
pass
@@ -40,12 +51,12 @@
grok.context(interface.Interface)
def render(self):
- return "<div> MyLayout </div>"
+ return "<div> MyLayout </div>"
class MyContextLayout(Layout):
grok.context(Elephant)
def render(self):
- return "<div> MyContextLayout </div>"
+ return "<div> MyContextLayout </div>"
Modified: five.megrok.layout/trunk/src/five/megrok/layout/ftests/layout/page.py
===================================================================
--- five.megrok.layout/trunk/src/five/megrok/layout/ftests/layout/page.py 2009-11-23 14:21:17 UTC (rev 105962)
+++ five.megrok.layout/trunk/src/five/megrok/layout/ftests/layout/page.py 2009-11-23 14:55:03 UTC (rev 105963)
@@ -1,35 +1,48 @@
"""
- >>> from five.megrok.layout import ILayout
+ Some requirements:
+ >>> from five.megrok.layout import IPage
>>> from five.megrok.layout.ftests.layout.page import *
>>> from zope.component import getMultiAdapter
>>> from zope.publisher.browser import TestRequest
+ >>> from zope.interface.verify import verifyObject
+ >>> from Products.Five.testbrowser import Browser
+ >>> browser = Browser()
+ >>> browser.handleErrors = False
+
>>> request = TestRequest()
- >>> cow = Cow()
+ >>> root = getRootFolder()
+ >>> id = root._setObject("cow", Cow(id='cow'))
+ >>> cow = root._getOb("cow")
- The next line is for Zope 2. Don't fear it.
+ Hack for Zope2:
>>> cow.REQUEST = request
- >>> mylayout = getMultiAdapter((request, cow), ILayout)
+ You can now a page:
>>> myview = getMultiAdapter((cow, request), name='myview')
+ >>> myview
+ <five.megrok.layout.ftests.layout.page.MyView object at ...>
+ >>> IPage.providedBy(myview)
+ True
+ You can render your page, it's going to look for a layout and use it
+ to render itself:
>>> print myview()
<html>
<body>
<div class="layout"><p> My nice Content </p></div>
</body>
</html>
-
- >>> myview
- <five.megrok.layout.ftests.layout.page.MyView object at ...>
>>> myview.layout
<five.megrok.layout.ftests.layout.page.Master object at ...>
>>> print myview.content()
<p> My nice Content </p>
- >>> bigcow = BigCow()
+ >>> del cow.REQUEST
- The next line is for Zope 2. Don't fear it.
+ Here an another example:
+ >>> id = root._setObject("bigcow", BigCow(id='bigcow'))
+ >>> bigcow = root._getOb("bigcow")
>>> bigcow.REQUEST = request
>>> mybigview = getMultiAdapter((bigcow, request), name='myview')
@@ -49,6 +62,27 @@
>>> print mybigview.content()
<p> My big cool Content </p>
+ >>> del bigcow.REQUEST
+
+ We can even do some functional testing:
+ >>> browser.open('http://localhost/cow/myview')
+ >>> print browser.contents
+ <html>
+ <body>
+ <div class="layout"><p> My nice Content </p></div>
+ </body>
+ </html>
+
+ >>> browser.open('http://localhost/bigcow/myview')
+ >>> print browser.contents
+ <html>
+ <body>
+ <div class="layout"><p> My big cool Content </p>
+ </div>
+ </body>
+ </html>
+
+
"""
from five import grok
@@ -56,7 +90,7 @@
from five.megrok.layout import Layout, Page
-class Cow(grok.Context):
+class Cow(grok.Model):
pass
@@ -73,7 +107,7 @@
grok.context(interface.Interface)
def render(self):
- return "<p> My nice Content </p>"
+ return "<p> My nice Content </p>"
class MyBigView(Page):
Added: five.megrok.layout/trunk/src/five/megrok/layout/ftests/layout/pagesecurity.py
===================================================================
--- five.megrok.layout/trunk/src/five/megrok/layout/ftests/layout/pagesecurity.py (rev 0)
+++ five.megrok.layout/trunk/src/five/megrok/layout/ftests/layout/pagesecurity.py 2009-11-23 14:55:03 UTC (rev 105963)
@@ -0,0 +1,65 @@
+"""
+ Let's create a test content:
+ >>> from five.megrok.layout.ftests.layout.pagesecurity import *
+ >>> root = getRootFolder()
+ >>> id = root._setObject("home", Home(id='home'))
+
+ Now we can go on our page:
+ >>> from Products.Five.testbrowser import Browser
+ >>> browser = Browser()
+
+ >>> browser.open('http://localhost/home/publicview')
+ >>> print browser.contents
+ <html>
+ <body>
+ <div class="layout"><p> I can express myself freely </p></div>
+ </body>
+ </html>
+
+ >>> browser.open('http://localhost/home/securedview')
+ Traceback (most recent call last):
+ ...
+ HTTPError: HTTP Error 401: Unauthorized
+
+ And if you give the permission to anonymous people that should work
+ after:
+
+ >>> root.home.manage_permission('View management screens', ['Anonymous',])
+ >>> browser.open('http://localhost/home/securedview')
+ >>> print browser.contents
+ <html>
+ <body>
+ <div class="layout"><p> My secret </p></div>
+ </body>
+ </html>
+
+"""
+from five import grok
+
+from zope import interface
+from five.megrok.layout import Layout, Page
+
+
+class Home(grok.Model):
+ pass
+
+
+class Master(Layout):
+ grok.name('master')
+ grok.context(Home)
+
+
+class PublicView(Page):
+ grok.context(interface.Interface)
+ grok.require('zope2.View')
+
+ def render(self):
+ return "<p> I can express myself freely </p>"
+
+
+class SecuredView(Page):
+ grok.context(interface.Interface)
+ grok.require('zope2.ViewManagementScreens')
+
+ def render(self):
+ return "<p> My secret </p>"
Added: five.megrok.layout/trunk/src/five/megrok/layout/ftests/layout/pagesecurity_templates/master.pt
===================================================================
--- five.megrok.layout/trunk/src/five/megrok/layout/ftests/layout/pagesecurity_templates/master.pt (rev 0)
+++ five.megrok.layout/trunk/src/five/megrok/layout/ftests/layout/pagesecurity_templates/master.pt 2009-11-23 14:55:03 UTC (rev 105963)
@@ -0,0 +1,5 @@
+<html>
+ <body>
+ <div class="layout"><tal:page tal:content="structure view/content" /></div>
+ </body>
+</html>
Modified: five.megrok.layout/trunk/src/five/megrok/layout/ftests/layout/resources.py
===================================================================
--- five.megrok.layout/trunk/src/five/megrok/layout/ftests/layout/resources.py 2009-11-23 14:21:17 UTC (rev 105962)
+++ five.megrok.layout/trunk/src/five/megrok/layout/ftests/layout/resources.py 2009-11-23 14:55:03 UTC (rev 105963)
@@ -5,7 +5,7 @@
>>> from zope.publisher.browser import TestRequest
>>> request = TestRequest()
- >>> mongo = Dummy()
+ >>> mongo = Dummy('mongo')
>>> mylayout = getMultiAdapter((request, mongo), ILayout)
>>> mylayout.static
<five.grok.components.ZopeTwoDirectoryResource object at ...>
@@ -17,7 +17,7 @@
from five.megrok.layout import Layout
-class Dummy(grok.Context):
+class Dummy(grok.Model):
pass
More information about the checkins
mailing list