Skip to content

Commit

Permalink
Backported
Browse files Browse the repository at this point in the history
r26524 | srichter | 2004-07-14 03:45:38 -0400 (Wed, 14 Jul 2004) | 6 lines
r26551 | srichter | 2004-07-15 03:06:37 -0400 (Thu, 15 Jul 2004) | 6 lines
r26522 | pruggera | 2004-07-14 01:42:06 -0400 (Wed, 14 Jul 2004) | 1 line
r26531 | pruggera | 2004-07-14 13:00:15 -0400 (Wed, 14 Jul 2004) | 1 line
r26534 | pruggera | 2004-07-14 15:55:34 -0400 (Wed, 14 Jul 2004) | 1 line
r26540 | pruggera | 2004-07-14 18:14:25 -0400 (Wed, 14 Jul 2004) | 1 line
  • Loading branch information
strichter committed Aug 12, 2004
1 parent 3502414 commit edebdcb
Show file tree
Hide file tree
Showing 2 changed files with 120 additions and 0 deletions.
99 changes: 99 additions & 0 deletions browser/tests/test_unauthorized.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
##############################################################################
#
# Copyright (c) 2001, 2002 Zope Corporation and Contributors.
# All Rights Reserved.
#
# This software is subject to the provisions of the Zope Public License,
# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
# FOR A PARTICULAR PURPOSE.
#
##############################################################################
"""Test Unauthorized Exception Views
$Id$
"""
from unittest import TestCase, main, makeSuite
from zope.interface import implements
from zope.publisher.browser import TestRequest
from zope.app.security.interfaces import IAuthenticationService, IPrincipal
from zope.app.container.contained import contained
from zope.app.exception.browser.unauthorized import Unauthorized
from zope.app.event.tests.placelesssetup import PlacelessSetup

class Unauthorized(Unauthorized):
"""Unusually done by ZCML."""

def __init__(self, context, request):
self.context = context
self.request = request


class DummyPrincipal(object):
implements(IPrincipal) # this is a lie

def __init__(self, id):
self.id = id

def getId(self):
return self.id

class DummyAuthService(object):
implements(IAuthenticationService) # this is a lie

def unauthorized(self, principal_id, request):
self.principal_id = principal_id
self.request = request

class DummyPrincipalSource(object):
pass

class Test(TestCase, PlacelessSetup):

def test(self):
exception = Exception()
try:
raise exception
except:
pass
request = TestRequest('/')
authservice = DummyAuthService()
request.setPrincipal(contained(DummyPrincipal(23), authservice))
u = Unauthorized(exception, request)
u.issueChallenge()

# Make sure the response status was set
self.assertEqual(request.response.getStatus(), 403)

# Make sure the auth service was called
self.failUnless(authservice.request is request)
self.assertEqual(authservice.principal_id, 23)

def testPluggableAuthService(self):
exception = Exception()
try:
raise exception
except:
pass
request = TestRequest('/')
authservice = DummyAuthService()
psrc = DummyPrincipalSource()
psrc = contained(psrc, authservice)
request.setPrincipal(contained(DummyPrincipal(23), psrc))
u = Unauthorized(exception, request)
u.issueChallenge()

# Make sure the response status was set
self.assertEqual(request.response.getStatus(), 403)

# Make sure the auth service was called
self.failUnless(authservice.request is request)
self.assertEqual(authservice.principal_id, 23)

def test_suite():
return makeSuite(Test)

if __name__=='__main__':
main(defaultTest='test_suite')
21 changes: 21 additions & 0 deletions browser/user.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
##############################################################################
# Copyright (c) 2003 Zope Corporation and Contributors.
# All Rights Reserved.
#
# This software is subject to the provisions of the Zope Public License,
# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
# FOR A PARTICULAR PURPOSE.
##############################################################################
"""Support for user views
$Id$
"""
class UserErrorView(object):

def title(self):
return self.context.__class__.__name__


0 comments on commit edebdcb

Please sign in to comment.