From 82fefc4220a26b37484d2c79db4fdaeb9aebf7e9 Mon Sep 17 00:00:00 2001 From: Chris McDonough Date: Thu, 28 May 2009 13:49:18 +0000 Subject: - Add a ``get_app`` API functions to the ``paster`` module. This obtains a WSGI application from a config file given a config file name and a section name. See the ``repoze.bfg.paster`` API docs for more information. - Add a new module named ``scripting``. It contains a ``get_root`` API function, which, provided a Router instance, returns a traversal root object and a "closer". See the ``repoze.bfg.scripting`` API docs for more info. --- repoze/bfg/tests/test_paster.py | 15 ++++++++++ repoze/bfg/tests/test_scripting.py | 56 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 71 insertions(+) create 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 index 3339fe498..0119e3313 100644 --- a/repoze/bfg/tests/test_paster.py +++ b/repoze/bfg/tests/test_paster.py @@ -28,6 +28,21 @@ class TestBFGShellCommand(unittest.TestCase): self.failUnless(interact.banner) self.assertEqual(len(app.threadlocal_manager.popped), 1) +class TestGetApp(unittest.TestCase): + def _callFUT(self, config_file, section_name, loadapp): + from repoze.bfg.paster import get_app + return get_app(config_file, section_name, loadapp) + + def test_it(self): + import os + app = DummyApp() + loadapp = DummyLoadApp(app) + result = self._callFUT('/foo/bar/myapp.ini', 'myapp', loadapp) + self.assertEqual(loadapp.config_name, 'config:/foo/bar/myapp.ini') + self.assertEqual(loadapp.section_name, 'myapp') + self.assertEqual(loadapp.relative_to, os.getcwd()) + self.assertEqual(result, app) + class Dummy: pass diff --git a/repoze/bfg/tests/test_scripting.py b/repoze/bfg/tests/test_scripting.py new file mode 100644 index 000000000..514b02dca --- /dev/null +++ b/repoze/bfg/tests/test_scripting.py @@ -0,0 +1,56 @@ +import unittest + +class TestGetRoot(unittest.TestCase): + def _callFUT(self, app, environ=None): + from repoze.bfg.paster import get_root + return get_root(app, environ) + + def test_it_noenviron(self): + app = DummyApp() + root, closer = self._callFUT(app) + 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(len(app.threadlocal_manager.popped), 0) + closer() + self.assertEqual(len(app.threadlocal_manager.popped), 1) + + def test_it_withenviron(self): + app = DummyApp() + environ = {} + root, closer = self._callFUT(app, environ) + 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(len(app.threadlocal_manager.popped), 0) + closer() + self.assertEqual(len(app.threadlocal_manager.popped), 1) + + +class Dummy: + pass + +dummy_root = Dummy() +dummy_registry = Dummy() + +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) + -- cgit v1.2.3