[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