[Checkins] SVN: Sandbox/janwijbrand/zope.errorview/trunk/ add tests for browser views, browser view dependencies are now in extras_require

Jan-Wijbrand Kolman janwijbrand at gmail.com
Wed Jan 19 08:16:48 EST 2011


Log message for revision 119697:
  add tests for browser views, browser view dependencies are now in extras_require

Changed:
  U   Sandbox/janwijbrand/zope.errorview/trunk/buildout.cfg
  U   Sandbox/janwijbrand/zope.errorview/trunk/setup.py
  U   Sandbox/janwijbrand/zope.errorview/trunk/src/zope/errorview/browser.py
  U   Sandbox/janwijbrand/zope.errorview/trunk/src/zope/errorview/browser.zcml
  A   Sandbox/janwijbrand/zope.errorview/trunk/src/zope/errorview/tests/ftesting.zcml
  U   Sandbox/janwijbrand/zope.errorview/trunk/src/zope/errorview/tests/test_browser.py
  U   Sandbox/janwijbrand/zope.errorview/trunk/src/zope/errorview/tests/test_http.py

-=-
Modified: Sandbox/janwijbrand/zope.errorview/trunk/buildout.cfg
===================================================================
--- Sandbox/janwijbrand/zope.errorview/trunk/buildout.cfg	2011-01-19 11:44:31 UTC (rev 119696)
+++ Sandbox/janwijbrand/zope.errorview/trunk/buildout.cfg	2011-01-19 13:16:48 UTC (rev 119697)
@@ -8,7 +8,7 @@
 
 [test]
 recipe = zc.recipe.testrunner
-eggs = zope.errorview [test]
+eggs = zope.errorview [browser, test]
 defaults = ['--auto-color']
 
 [coverage-test]

Modified: Sandbox/janwijbrand/zope.errorview/trunk/setup.py
===================================================================
--- Sandbox/janwijbrand/zope.errorview/trunk/setup.py	2011-01-19 11:44:31 UTC (rev 119696)
+++ Sandbox/janwijbrand/zope.errorview/trunk/setup.py	2011-01-19 13:16:48 UTC (rev 119697)
@@ -52,12 +52,15 @@
       namespace_packages=['zope'],
       extras_require={
           'test':[
-          'zope.testing'],
+              'zope.testing'],
+          'browser': [
+              'zope.authentication',
+              'zope.browser',
+              'zope.browserpage',
+          ],
           },
       install_requires=[
           'setuptools',
-          'zope.browser',
-          'zope.authentication',
           'zope.component',
           'zope.interface',
           'zope.publisher',

Modified: Sandbox/janwijbrand/zope.errorview/trunk/src/zope/errorview/browser.py
===================================================================
--- Sandbox/janwijbrand/zope.errorview/trunk/src/zope/errorview/browser.py	2011-01-19 11:44:31 UTC (rev 119696)
+++ Sandbox/janwijbrand/zope.errorview/trunk/src/zope/errorview/browser.py	2011-01-19 13:16:48 UTC (rev 119697)
@@ -24,12 +24,12 @@
 
 # XXX i18n-ing?
 
-class ExceptionView(ExceptionView):
+class ExceptionView(ExceptionView, BrowserPage):
 
     def render(self):
         return u'A system error occurred.'
 
-class NotFoundView(ExceptionViewBase):
+class NotFoundView(ExceptionViewBase, BrowserPage):
 
     def update(self):
         self.request.response.setStatus(404)
@@ -37,7 +37,7 @@
     def render(self):
         return u'The requested resource can not be found.'
 
-class UnauthorizedView(UnauthorizedView):
+class UnauthorizedView(UnauthorizedView, BrowserPage):
 
     def update(self):
         # Set the error status to 403 (Forbidden) in the case when we
@@ -55,4 +55,5 @@
 
     def render(self):
         if self.request.response.getStatus() not in (302, 303):
-            return u'Acces to the requested resource is forbidden.'
+            return u'Access to the requested resource is forbidden.'
+        return ''

Modified: Sandbox/janwijbrand/zope.errorview/trunk/src/zope/errorview/browser.zcml
===================================================================
--- Sandbox/janwijbrand/zope.errorview/trunk/src/zope/errorview/browser.zcml	2011-01-19 11:44:31 UTC (rev 119696)
+++ Sandbox/janwijbrand/zope.errorview/trunk/src/zope/errorview/browser.zcml	2011-01-19 13:16:48 UTC (rev 119697)
@@ -2,25 +2,26 @@
   xmlns="http://namespaces.zope.org/zope"
   xmlns:browser="http://namespaces.zope.org/browser">
 
+  <include package="zope.browserpage" file="meta.zcml" />
   <include package="." file="http.zcml" />
 
-  <page
+  <browser:page
     for="zope.interface.common.interfaces.IException"
     class=".browser.ExceptionView"
     name="index.html"
     permission="zope.Public"
   />
 
-  <page
+  <browser:page
     for="zope.security.interfaces.IUnauthorized"
     class=".browser.UnauthorizedView"
     name="index.html"
     permission="zope.Public"
   />
 
-  <page
+  <browser:page
     for="zope.publisher.interfaces.INotFound"
-    class=".browser.NotFondView"
+    class=".browser.NotFoundView"
     name="index.html"
     permission="zope.Public"
   />

Added: Sandbox/janwijbrand/zope.errorview/trunk/src/zope/errorview/tests/ftesting.zcml
===================================================================
--- Sandbox/janwijbrand/zope.errorview/trunk/src/zope/errorview/tests/ftesting.zcml	                        (rev 0)
+++ Sandbox/janwijbrand/zope.errorview/trunk/src/zope/errorview/tests/ftesting.zcml	2011-01-19 13:16:48 UTC (rev 119697)
@@ -0,0 +1,12 @@
+<configure
+  xmlns="http://namespaces.zope.org/zope"
+  xmlns:browser="http://namespaces.zope.org/browser">
+
+  <include package="zope.errorview" file="browser.zcml" />
+
+  <utility
+    factory='.test_browser.MockAuthenticationUtility'
+    provides='zope.authentication.interfaces.IAuthentication'
+  />
+
+</configure>

Modified: Sandbox/janwijbrand/zope.errorview/trunk/src/zope/errorview/tests/test_browser.py
===================================================================
--- Sandbox/janwijbrand/zope.errorview/trunk/src/zope/errorview/tests/test_browser.py	2011-01-19 11:44:31 UTC (rev 119696)
+++ Sandbox/janwijbrand/zope.errorview/trunk/src/zope/errorview/tests/test_browser.py	2011-01-19 13:16:48 UTC (rev 119697)
@@ -1,6 +1,81 @@
 from unittest import TestCase
+from zope.authentication.interfaces import IAuthentication
+from zope.browser.interfaces import ISystemErrorView
+from zope.component import getUtility, getMultiAdapter
+from zope.component.testlayer import ZCMLFileLayer
+from zope.errorview import browser
+from zope.interface import implements
+from zope.publisher.browser import TestRequest
+from zope.publisher.defaultview import getDefaultViewName
+from zope.publisher.interfaces.http import IHTTPException
+from zope.publisher.interfaces import NotFound
+from zope.security.interfaces import Unauthorized
+import zope.errorview
 
-class Test(TestCase):
+browser_layer = ZCMLFileLayer(zope.errorview.tests)
 
-    def test_joop(self):
-        assert True
+class MockPrincipal(object):
+    id = 'mock principal'
+
+class MockAuthenticationUtility(object):
+    implements(IAuthentication) # this is a lie.
+
+    status = None
+
+    def unauthorized(self, principal_id, request):
+        if self.status is not None:
+            request.response.setStatus(self.status)
+
+class TestErrorViews(TestCase):
+
+    layer = browser_layer
+
+    def setUp(self):
+        self.request = TestRequest()
+
+    def test_defaultname(self):
+        self.assertEquals(
+            getDefaultViewName(Exception(), self.request), 'index.html')
+        error = NotFound(object(), self.request)
+        self.assertEquals(
+            getDefaultViewName(error, self.request), 'index.html')
+        self.assertEquals(
+            getDefaultViewName(
+                Unauthorized(), self.request), 'index.html')
+
+    def test_exceptionview(self):
+        view = getMultiAdapter((Exception(), self.request), name='index.html')
+        self.failUnless(IHTTPException.providedBy(view))
+        self.failUnless(ISystemErrorView.providedBy(view))
+        self.assertTrue(view.isSystemError())
+        self.assertEquals(view(), 'A system error occurred.')
+        self.assertEquals(self.request.response.getStatus(), 500)
+
+    def test_notfoundview(self):
+        error = NotFound(object(), self.request)
+        view = getMultiAdapter((error, self.request), name='index.html')
+        self.failUnless(IHTTPException.providedBy(view))
+        self.assertEquals(view(), 'The requested resource can not be found.')
+        self.assertEquals(self.request.response.getStatus(), 404)
+
+    def test_unauthorizedview(self):
+        self.request.setPrincipal(MockPrincipal())
+        view = getMultiAdapter(
+            (Unauthorized(), self.request), name='index.html')
+        self.failUnless(IHTTPException.providedBy(view))
+        self.assertEquals(
+            view(), 'Access to the requested resource is forbidden.')
+        self.assertEquals(self.request.response.getStatus(), 403)
+
+        getUtility(IAuthentication).status = 401
+        self.assertEquals(
+            view(), 'Access to the requested resource is forbidden.')
+        self.assertEquals(self.request.response.getStatus(), 401)
+
+        getUtility(IAuthentication).status = 302
+        self.assertEquals(view(), '')
+        self.assertEquals(self.request.response.getStatus(), 302)
+
+        getUtility(IAuthentication).status = 303
+        self.assertEquals(view(), '')
+        self.assertEquals(self.request.response.getStatus(), 303)

Modified: Sandbox/janwijbrand/zope.errorview/trunk/src/zope/errorview/tests/test_http.py
===================================================================
--- Sandbox/janwijbrand/zope.errorview/trunk/src/zope/errorview/tests/test_http.py	2011-01-19 11:44:31 UTC (rev 119696)
+++ Sandbox/janwijbrand/zope.errorview/trunk/src/zope/errorview/tests/test_http.py	2011-01-19 13:16:48 UTC (rev 119697)
@@ -54,7 +54,6 @@
     def test_traversalexceptionview(self):
         view = http.TraversalExceptionView(TraversalException(), self.request)
         self.failUnless(IHTTPException.providedBy(view))
-        self.assertEquals(str(view), '')
         self.assertEquals(view(), '')
         self.assertEqual(self.request.response.getStatus(), 404)
         # XXX test the MKCOL verb here too.
@@ -62,7 +61,6 @@
     def test_unauthorizedexceptionview(self):
         view = http.UnauthorizedView(Unauthorized(), self.request)
         self.failUnless(IHTTPException.providedBy(view))
-        self.assertEquals(str(view), '')
         self.assertEquals(view(), '')
         self.assertEqual(self.request.response.getStatus(), 401)
         self.failUnless(
@@ -73,7 +71,6 @@
         error = MethodNotAllowed(object(), self.request)
         view = http.MethodNotAllowedView(error, self.request)
         self.failUnless(IHTTPException.providedBy(view))
-        self.assertEquals(str(view), '')
         self.assertEquals(view(), '')
         self.assertEquals(self.request.response.getStatus(), 405)
         self.assertEquals(self.request.response.getHeader('Allow'), '')
@@ -112,7 +109,6 @@
     def test_exceptionview(self):
         view = getMultiAdapter((Exception(), self.request), name='index.html')
         self.failUnless(IHTTPException.providedBy(view))
-        self.assertEquals(str(view), '')
         self.assertEquals(view(), '')
         self.assertEqual(self.request.response.getStatus(), 500)
 
@@ -120,7 +116,6 @@
         view = getMultiAdapter(
             (TraversalException(), self.request), name='index.html')
         self.failUnless(IHTTPException.providedBy(view))
-        self.assertEquals(str(view), '')
         self.assertEquals(view(), '')
         self.assertEqual(self.request.response.getStatus(), 404)
         # XXX test the MKCOL verb here too.
@@ -129,7 +124,6 @@
         view = getMultiAdapter(
             (Unauthorized(), self.request), name='index.html')
         self.failUnless(IHTTPException.providedBy(view))
-        self.assertEquals(str(view), '')
         self.assertEquals(view(), '')
         self.assertEqual(self.request.response.getStatus(), 401)
         self.failUnless(
@@ -140,7 +134,6 @@
         error = MethodNotAllowed(object(), self.request)
         view = getMultiAdapter((error, self.request), name='index.html')
         self.failUnless(IHTTPException.providedBy(view))
-        self.assertEquals(str(view), '')
         self.assertEquals(view(), '')
         self.assertEquals(self.request.response.getStatus(), 405)
         self.assertEquals(self.request.response.getHeader('Allow'), '')



More information about the checkins mailing list