Merge lp:~lifeless/launchpad/fakelibrarian into lp:launchpad

Proposed by Robert Collins
Status: Merged
Approved by: Michael Hudson-Doyle
Approved revision: no longer in the source branch.
Merged at revision: 11575
Proposed branch: lp:~lifeless/launchpad/fakelibrarian
Merge into: lp:launchpad
Prerequisite: lp:~lifeless/launchpad/test
Diff against target: 132 lines (+16/-57)
3 files modified
lib/lp/testing/fakelibrarian.py (+13/-54)
lib/lp/testing/tests/test_fakelibrarian.py (+1/-1)
lib/lp/translations/utilities/tests/test_file_importer.py (+2/-2)
To merge this branch: bzr merge lp:~lifeless/launchpad/fakelibrarian
Reviewer Review Type Date Requested Status
Michael Hudson-Doyle Approve
Review via email: mp+35918@code.launchpad.net

Commit message

Port the fake librarian to fixtures.

Description of the change

Port the fake librarian to fixtures.

To post a comment you must log in.
Revision history for this message
Michael Hudson-Doyle (mwhudson) wrote :

Somehow I managed to convince myself that this branch was a bit complicated, but actually it seems to be a nice simplification. Cool :-)

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'lib/lp/testing/fakelibrarian.py'
2--- lib/lp/testing/fakelibrarian.py 2010-09-09 10:40:17 +0000
3+++ lib/lp/testing/fakelibrarian.py 2010-09-18 09:29:59 +0000
4@@ -19,6 +19,7 @@
5 from StringIO import StringIO
6 from urlparse import urljoin
7
8+from fixtures import Fixture
9 import transaction
10 from transaction.interfaces import ISynchronizer
11 import zope.component
12@@ -58,8 +59,8 @@
13 return self._datafile.read(chunksize)
14
15
16-class FakeLibrarian(object):
17- """A fake, in-process Librarian.
18+class FakeLibrarian(Fixture):
19+ """A test double Librarian which works in-process.
20
21 This takes the role of both the librarian client and the LibraryFileAlias
22 utility.
23@@ -67,65 +68,23 @@
24 provided_utilities = [ILibrarianClient, ILibraryFileAliasSet]
25 implements(ISynchronizer, *provided_utilities)
26
27- installed_as_librarian = False
28-
29- def installAsLibrarian(self):
30- """Install this `FakeLibrarian` as the default Librarian."""
31- if self.installed_as_librarian:
32- return
33-
34+ def setUp(self):
35+ """Fixture API: install as the librarian."""
36+ Fixture.setUp(self)
37+ self.aliases = {}
38+ self.download_url = config.librarian.download_url
39 transaction.manager.registerSynch(self)
40-
41- # Original utilities that need to be restored.
42- self.original_utilities = {}
43+ self.addCleanup(transaction.manager.unregisterSynch, self)
44
45 site_manager = zope.component.getGlobalSiteManager()
46 for utility in self.provided_utilities:
47 original = zope.component.getUtility(utility)
48 if site_manager.unregisterUtility(original, utility):
49- # We really disabled a utility, so remember to restore
50- # it later. (Alternatively, the utility object might
51- # implement an interface that extends the utility one,
52- # in which case we should not restore it.)
53- self.original_utilities[utility] = original
54+ # We really disabled a utility, restore it later.
55+ self.addCleanup(
56+ zope.component.provideUtility, original, utility)
57 zope.component.provideUtility(self, utility)
58-
59- self.installed_as_librarian = True
60-
61- def uninstall(self):
62- """Un-install this `FakeLibrarian` as the default Librarian."""
63- if not self.installed_as_librarian:
64- return
65-
66- transaction.manager.unregisterSynch(self)
67-
68- site_manager = zope.component.getGlobalSiteManager()
69- for utility in reversed(self.provided_utilities):
70- site_manager.unregisterUtility(self, utility)
71- original_utility = self.original_utilities.get(utility)
72- if original_utility is not None:
73- # We disabled a utility to get here; restore the
74- # original. We do not do this for utilities that were
75- # implemented through interface inheritance, because in
76- # that case we would never have unregistered anything in
77- # the first place. Re-registering would register the
78- # same object twice, for related but different
79- # interfaces.
80- zope.component.provideUtility(original_utility, utility)
81-
82- self.installed_as_librarian = False
83-
84- def setUp(self):
85- """Fixture API: install as the librarian."""
86- self.installAsLibrarian()
87-
88- def tearDown(self):
89- """Fixture API: uninstall."""
90- self.uninstall()
91-
92- def __init__(self):
93- self.aliases = {}
94- self.download_url = config.librarian.download_url
95+ self.addCleanup(site_manager.unregisterUtility, self, utility)
96
97 def addFile(self, name, size, file, contentType, expires=None):
98 """See `IFileUploadClient`."""
99
100=== modified file 'lib/lp/testing/tests/test_fakelibrarian.py'
101--- lib/lp/testing/tests/test_fakelibrarian.py 2010-09-09 10:04:28 +0000
102+++ lib/lp/testing/tests/test_fakelibrarian.py 2010-09-18 09:29:59 +0000
103@@ -143,7 +143,7 @@
104
105 def setUp(self):
106 super(TestFakeLibrarian, self).setUp()
107- self.fake_librarian = self.installFixture(FakeLibrarian())
108+ self.fake_librarian = self.useFixture(FakeLibrarian())
109
110 def test_fake(self):
111 self.assertTrue(verifyObject(ISynchronizer, self.fake_librarian))
112
113=== modified file 'lib/lp/translations/utilities/tests/test_file_importer.py'
114--- lib/lp/translations/utilities/tests/test_file_importer.py 2010-09-03 14:11:56 +0000
115+++ lib/lp/translations/utilities/tests/test_file_importer.py 2010-09-18 09:29:59 +0000
116@@ -169,7 +169,7 @@
117
118 def setUp(self):
119 super(FileImporterTestCase, self).setUp()
120- self.fake_librarian = self.installFixture(FakeLibrarian())
121+ self.fake_librarian = self.useFixture(FakeLibrarian())
122 self.translation_import_queue = getUtility(ITranslationImportQueue)
123 self.importer_person = self.factory.makePerson()
124
125@@ -526,7 +526,7 @@
126
127 def setUp(self):
128 super(CreateFileImporterTestCase, self).setUp()
129- self.fake_librarian = self.installFixture(FakeLibrarian())
130+ self.fake_librarian = self.useFixture(FakeLibrarian())
131 self.translation_import_queue = getUtility(ITranslationImportQueue)
132 self.importer_person = self.factory.makePerson()
133