[Checkins] SVN: grokcore.view/new/src/grokcore/view/ftests/ Get rid
of view-unrelated ftests,
move those that are view-related to the 'view' directory.
Philipp von Weitershausen
philikon at philikon.de
Sat Aug 2 09:54:12 EDT 2008
Log message for revision 89226:
Get rid of view-unrelated ftests, move those that are view-related to the 'view' directory.
Changed:
D grokcore.view/new/src/grokcore/view/ftests/security/
U grokcore.view/new/src/grokcore/view/ftests/test_grok_functional.py
A grokcore.view/new/src/grokcore/view/ftests/view/handle_exception.py
A grokcore.view/new/src/grokcore/view/ftests/view/require.py
-=-
Modified: grokcore.view/new/src/grokcore/view/ftests/test_grok_functional.py
===================================================================
--- grokcore.view/new/src/grokcore/view/ftests/test_grok_functional.py 2008-08-02 13:53:07 UTC (rev 89225)
+++ grokcore.view/new/src/grokcore/view/ftests/test_grok_functional.py 2008-08-02 13:54:12 UTC (rev 89226)
@@ -51,6 +51,6 @@
def test_suite():
suite = unittest.TestSuite()
- for name in ['view', 'staticdir', 'url', 'security']:
+ for name in ['view', 'staticdir', 'url']:
suite.addTest(suiteFromPackage(name))
return suite
Copied: grokcore.view/new/src/grokcore/view/ftests/view/handle_exception.py (from rev 89214, grokcore.view/new/src/grokcore/view/ftests/security/handle_exception.py)
===================================================================
--- grokcore.view/new/src/grokcore/view/ftests/view/handle_exception.py (rev 0)
+++ grokcore.view/new/src/grokcore/view/ftests/view/handle_exception.py 2008-08-02 13:54:12 UTC (rev 89226)
@@ -0,0 +1,41 @@
+"""
+The handleException() method has a special case that might introduce a proxy
+and cause the grok security to fail, we have a simple test here that assures
+that we don't hit this:
+
+ >>> from zope.testbrowser.testing import Browser
+ >>> browser = Browser()
+ >>> browser.open("http://localhost/@@cave")
+ Traceback (most recent call last):
+ HTTPError: HTTP Error 500: Internal Server Error
+ >>> browser.contents
+ "It's gone!"
+
+"""
+
+import zope.interface
+import grokcore.view as grok
+
+
+class CaveWasRobbedError(Exception):
+ pass
+
+
+class Cave(grok.View):
+
+ grok.context(zope.interface.Interface)
+
+ fire = "It's gone!"
+
+ def render(self):
+ raise CaveWasRobbedError("EVERYTHING GONE! GROK ANGRY!")
+
+
+class CaveErrorView(grok.View):
+
+ grok.context(CaveWasRobbedError)
+ grok.name("index.html")
+
+ def render(self):
+ self.request.response.setStatus(500)
+ return self.context.__parent__.fire
Copied: grokcore.view/new/src/grokcore/view/ftests/view/require.py (from rev 89214, grokcore.view/new/src/grokcore/view/ftests/security/require.py)
===================================================================
--- grokcore.view/new/src/grokcore/view/ftests/view/require.py (rev 0)
+++ grokcore.view/new/src/grokcore/view/ftests/view/require.py 2008-08-02 13:54:12 UTC (rev 89226)
@@ -0,0 +1,45 @@
+"""
+Viewing a protected view with insufficient privileges will yield
+Unauthorized:
+
+ >>> from zope.testbrowser.testing import Browser
+ >>> browser = Browser()
+ >>> browser.open("http://localhost/@@painting")
+ Traceback (most recent call last):
+ HTTPError: HTTP Error 401: Unauthorized
+
+When we log in (e.g. as a manager), we can access the view just fine:
+
+ >>> browser.addHeader('Authorization', 'Basic mgr:mgrpw')
+ >>> browser.handleErrors = False
+ >>> browser.open("http://localhost/@@painting")
+ >>> print browser.contents
+ What a beautiful painting.
+
+A view protected with 'zope.Public' is always accessible:
+
+ >>> browser = Browser()
+ >>> browser.open("http://localhost/@@publicnudity")
+ >>> print browser.contents
+ Everybody can see this.
+"""
+
+import grokcore.view as grok
+import zope.interface
+
+class ViewPainting(grok.Permission):
+ grok.name('cave.ViewPainting')
+
+class Painting(grok.View):
+ grok.context(zope.interface.Interface)
+ grok.require(ViewPainting)
+
+ def render(self):
+ return 'What a beautiful painting.'
+
+class PublicNudity(grok.View):
+ grok.context(zope.interface.Interface)
+ grok.require(grok.Public)
+
+ def render(self):
+ return 'Everybody can see this.'
More information about the Checkins
mailing list