~launchpad-pqm/launchpad/devel

« back to all changes in this revision

Viewing changes to lib/lp/testing/fixture.py

  • Committer: Launchpad Patch Queue Manager
  • Date: 2011-06-11 00:00:16 UTC
  • mfrom: (13195.1.4 bug553368)
  • Revision ID: launchpad@pqm.canonical.com-20110611000016-e58v55swx5u0upnv
[r=bac,lifeless][bug=553368] Make more friendly error page for when
        openid server is down; add view test fixture.

Show diffs side-by-side

added added

removed removed

Lines of Context:
13
13
    getGlobalSiteManager,
14
14
    provideHandler,
15
15
    )
 
16
from zope.interface import Interface
 
17
from zope.publisher.interfaces.browser import IDefaultBrowserLayer
 
18
from zope.security.checker import (
 
19
    defineChecker,
 
20
    getCheckerForInstancesOf,
 
21
    undefineChecker,
 
22
    )
16
23
 
17
24
 
18
25
class ZopeEventHandlerFixture(Fixture):
27
34
        gsm = getGlobalSiteManager()
28
35
        provideHandler(self._handler)
29
36
        self.addCleanup(gsm.unregisterHandler, self._handler)
 
37
 
 
38
 
 
39
class ZopeViewReplacementFixture(Fixture):
 
40
    """A fixture that allows you to temporarily replace one view with another.
 
41
 
 
42
    This will not work with the AppServerLayer.
 
43
    """
 
44
 
 
45
    def __init__(self, name, context_interface,
 
46
                 request_interface=IDefaultBrowserLayer,
 
47
                 replacement=None):
 
48
        super(ZopeViewReplacementFixture, self).__init__()
 
49
        self.name = name
 
50
        self.context_interface = context_interface
 
51
        self.request_interface = request_interface
 
52
        self.gsm = getGlobalSiteManager()
 
53
        # It can be convenient--bordering on necessary--to use this original
 
54
        # class as a base for the replacement.
 
55
        self.original = self.gsm.adapters.registered(
 
56
            (context_interface, request_interface), Interface, name)
 
57
        self.checker = getCheckerForInstancesOf(self.original)
 
58
        if self.original is None:
 
59
            # The adapter registry does not provide good methods to introspect
 
60
            # it. If it did, we might try harder here.
 
61
            raise ValueError(
 
62
                'No existing view to replace.  Wrong request interface?  '
 
63
                'Try a layer.')
 
64
        self.replacement = replacement
 
65
 
 
66
    def setUp(self):
 
67
        super(ZopeViewReplacementFixture, self).setUp()
 
68
        if self.replacement is None:
 
69
            raise ValueError('replacement is not set')
 
70
        self.gsm.adapters.register(
 
71
            (self.context_interface, self.request_interface), Interface,
 
72
             self.name, self.replacement)
 
73
        # The same checker should be sufficient.  If it ever isn't, we
 
74
        # can add more flexibility then.
 
75
        defineChecker(self.replacement, self.checker)
 
76
 
 
77
    def tearDown(self):
 
78
        super(ZopeViewReplacementFixture, self).tearDown()
 
79
        undefineChecker(self.replacement)
 
80
        self.gsm.adapters.register(
 
81
            (self.context_interface, self.request_interface), Interface,
 
82
             self.name, self.original)