[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