From 156375861f191f51f4e97ce25cd4d39f8025f90b Mon Sep 17 00:00:00 2001 From: Chris McDonough Date: Wed, 27 May 2009 15:47:11 +0000 Subject: - A paster command has been added named "bfgshell". This command can be used to get an interactive prompt with your BFG root object in the global namespace. E.g.:: bin/paster bfgshell /path/to/myapp.ini myapp See the ``Project`` chapter in the BFG documentation for more information. --- repoze/bfg/tests/test_paster.py | 71 ++++++++++++++++++++++++++++++++++++++ repoze/bfg/tests/test_scripting.py | 31 ----------------- 2 files changed, 71 insertions(+), 31 deletions(-) create mode 100644 repoze/bfg/tests/test_paster.py delete mode 100644 repoze/bfg/tests/test_scripting.py (limited to 'repoze/bfg/tests') diff --git a/repoze/bfg/tests/test_paster.py b/repoze/bfg/tests/test_paster.py new file mode 100644 index 000000000..3339fe498 --- /dev/null +++ b/repoze/bfg/tests/test_paster.py @@ -0,0 +1,71 @@ +import unittest + +class TestBFGShellCommand(unittest.TestCase): + def _getTargetClass(self): + from repoze.bfg.paster import BFGShellCommand + return BFGShellCommand + + def _makeOne(self): + return self._getTargetClass()('bfgshell') + + def test_command(self): + command = self._makeOne() + interact = DummyInteractor() + app = DummyApp() + loadapp = DummyLoadApp(app) + command.interact = (interact,) + command.loadapp = (loadapp,) + command.args = ('/foo/bar/myapp.ini', 'myapp') + command.command() + self.assertEqual(loadapp.config_name, 'config:/foo/bar/myapp.ini') + self.assertEqual(loadapp.section_name, 'myapp') + self.failUnless(loadapp.relative_to) + self.assertEqual(len(app.threadlocal_manager.pushed), 1) + pushed = app.threadlocal_manager.pushed[0] + self.assertEqual(pushed['registry'], dummy_registry) + self.assertEqual(pushed['request'], None) + self.assertEqual(interact.local, {'root':dummy_root}) + self.failUnless(interact.banner) + self.assertEqual(len(app.threadlocal_manager.popped), 1) + +class Dummy: + pass + +dummy_root = Dummy() + +dummy_registry = Dummy() + +class DummyInteractor: + def __call__(self, banner, local): + self.banner = banner + self.local = local + +class DummyLoadApp: + def __init__(self, app): + self.app = app + + def __call__(self, config_name, name=None, relative_to=None): + self.config_name = config_name + self.section_name = name + self.relative_to = relative_to + return self.app + +class DummyApp: + def __init__(self): + self.registry = dummy_registry + self.threadlocal_manager = DummyThreadLocalManager() + + def root_factory(self, environ): + return dummy_root + +class DummyThreadLocalManager: + def __init__(self): + self.pushed = [] + self.popped = [] + + def push(self, item): + self.pushed.append(item) + + def pop(self): + self.popped.append(True) + diff --git a/repoze/bfg/tests/test_scripting.py b/repoze/bfg/tests/test_scripting.py deleted file mode 100644 index a54b4b7d9..000000000 --- a/repoze/bfg/tests/test_scripting.py +++ /dev/null @@ -1,31 +0,0 @@ -import unittest - -class TestGetRoot(unittest.TestCase): - def _callFUT(self, router): - from repoze.bfg.scripting import get_root - return get_root(router) - - def test_it(self): - router = DummyRouter() - result = self._callFUT(router) - self.assertEqual(result, router) - self.assertEqual(len(router.threadlocal_manager.pushed), 1) - self.assertEqual(router.threadlocal_manager.pushed[0], - {'registry':None, 'request':None}) - - -class DummyThreadLocalManager: - def __init__(self): - self.pushed = [] - - def push(self, val): - self.pushed.append(val) - -class DummyRouter: - def __init__(self): - self.registry = None - self.threadlocal_manager = DummyThreadLocalManager() - - def root_factory(self, environ): - return self - -- cgit v1.2.3