summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Merickel <michael@merickel.org>2011-07-16 18:04:41 -0500
committerMichael Merickel <michael@merickel.org>2011-07-16 18:29:13 -0500
commit0e80413579435b29f3fc493d4af8742e22ff9ede (patch)
tree2d8ca3b515346a275016c3a81065332f5fe10f3a
parentbec6d110c2e996db4db0c683e53c0f3913371059 (diff)
downloadpyramid-0e80413579435b29f3fc493d4af8742e22ff9ede.tar.gz
pyramid-0e80413579435b29f3fc493d4af8742e22ff9ede.tar.bz2
pyramid-0e80413579435b29f3fc493d4af8742e22ff9ede.zip
Added test coverage for 'PShellCommand'.
-rw-r--r--pyramid/tests/test_paster.py377
1 files changed, 134 insertions, 243 deletions
diff --git a/pyramid/tests/test_paster.py b/pyramid/tests/test_paster.py
index 7785b006e..4a099bbdb 100644
--- a/pyramid/tests/test_paster.py
+++ b/pyramid/tests/test_paster.py
@@ -5,245 +5,117 @@ class TestPShellCommand(unittest.TestCase):
from pyramid.paster import PShellCommand
return PShellCommand
- def _makeOne(self):
- return self._getTargetClass()('pshell')
+ def _makeOne(self, patch_interact=True, patch_bootstrap=True,
+ patch_config=True, patch_args=True, patch_options=True):
+ cmd = self._getTargetClass()('pshell')
+ if patch_interact:
+ self.interact = DummyInteractor()
+ cmd.interact = (self.interact,)
+ if patch_bootstrap:
+ self.bootstrap = DummyBootstrap()
+ cmd.bootstrap = (self.bootstrap,)
+ if patch_config:
+ self.config_factory = DummyConfigParserFactory()
+ cmd.ConfigParser = self.config_factory
+ if patch_args:
+ self.args = ('/foo/bar/myapp.ini#myapp',)
+ cmd.args = self.args
+ if patch_options:
+ class Options(object): pass
+ self.options = Options()
+ self.options.disable_ipython = True
+ cmd.options = self.options
+ return cmd
def test_command_ipshell_is_None_ipython_enabled(self):
command = self._makeOne()
- interact = DummyInteractor()
- app = DummyApp()
- loadapp = DummyLoadApp(app)
- command.interact = (interact,)
- command.loadapp = (loadapp,)
- command.ConfigParser = makeDummyConfigParser({})
- command.args = ('/foo/bar/myapp.ini#myapp',)
- class Options(object): pass
- command.options = Options()
- command.options.disable_ipython = False
+ command.options.disable_ipython = True
command.command(IPShell=None)
- self.assertEqual(loadapp.config_name, 'config:/foo/bar/myapp.ini')
- self.assertEqual(loadapp.section_name, 'myapp')
- self.assertTrue(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'].registry, dummy_registry)
- self.assertEqual(interact.local, {'app':app,
- 'root':dummy_root,
- 'registry':dummy_registry,
- 'settings':dummy_registry.settings})
- self.assertTrue(interact.banner)
- self.assertEqual(len(app.threadlocal_manager.popped), 1)
+ self.assertTrue(self.config_factory.parser)
+ self.assertEqual(self.config_factory.parser.filename,
+ '/foo/bar/myapp.ini')
+ self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')
+ self.assertEqual(self.interact.local, {
+ 'app':self.bootstrap.app, 'root':self.bootstrap.root,
+ 'registry':self.bootstrap.registry,
+ 'request':self.bootstrap.request,
+ 'root_factory':self.bootstrap.root_factory,
+ })
+ self.assertTrue(self.bootstrap.closer.called)
+ self.assertTrue(self.interact.banner)
def test_command_ipshell_is_not_None_ipython_disabled(self):
command = self._makeOne()
- interact = DummyInteractor()
- app = DummyApp()
- loadapp = DummyLoadApp(app)
- command.interact = (interact,)
- command.loadapp = (loadapp,)
- command.ConfigParser = makeDummyConfigParser({})
- command.args = ('/foo/bar/myapp.ini#myapp',)
- class Options(object): pass
- command.options = Options()
command.options.disable_ipython = True
command.command(IPShell='notnone')
- self.assertEqual(loadapp.config_name, 'config:/foo/bar/myapp.ini')
- self.assertEqual(loadapp.section_name, 'myapp')
- self.assertTrue(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'].registry, dummy_registry)
- self.assertEqual(interact.local, {'app':app,
- 'root':dummy_root,
- 'registry':dummy_registry,
- 'settings':dummy_registry.settings})
- self.assertTrue(interact.banner)
- self.assertEqual(len(app.threadlocal_manager.popped), 1)
+ self.assertTrue(self.config_factory.parser)
+ self.assertEqual(self.config_factory.parser.filename,
+ '/foo/bar/myapp.ini')
+ self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')
+ self.assertEqual(self.interact.local, {
+ 'app':self.bootstrap.app, 'root':self.bootstrap.root,
+ 'registry':self.bootstrap.registry,
+ 'request':self.bootstrap.request,
+ 'root_factory':self.bootstrap.root_factory,
+ })
+ self.assertTrue(self.bootstrap.closer.called)
+ self.assertTrue(self.interact.banner)
def test_command_ipython_enabled(self):
- command = self._makeOne()
- app = DummyApp()
- loadapp = DummyLoadApp(app)
- command.loadapp = (loadapp,)
- command.ConfigParser = makeDummyConfigParser({})
- dummy_shell_factory = DummyIPShellFactory()
- command.args = ('/foo/bar/myapp.ini#myapp',)
- class Options(object): pass
- command.options = Options()
+ command = self._makeOne(patch_interact=False)
command.options.disable_ipython = False
+ dummy_shell_factory = DummyIPShellFactory()
command.command(IPShell=dummy_shell_factory)
- self.assertEqual(loadapp.config_name, 'config:/foo/bar/myapp.ini')
- self.assertEqual(loadapp.section_name, 'myapp')
- self.assertTrue(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'].registry, dummy_registry)
- self.assertEqual(dummy_shell_factory.shell.local_ns,
- {'app':app, 'root':dummy_root,
- 'registry':dummy_registry,
- 'settings':dummy_registry.settings})
+ self.assertTrue(self.config_factory.parser)
+ self.assertEqual(self.config_factory.parser.filename,
+ '/foo/bar/myapp.ini')
+ self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')
+ self.assertEqual(dummy_shell_factory.shell.local_ns, {
+ 'app':self.bootstrap.app, 'root':self.bootstrap.root,
+ 'registry':self.bootstrap.registry,
+ 'request':self.bootstrap.request,
+ 'root_factory':self.bootstrap.root_factory,
+ })
self.assertEqual(dummy_shell_factory.shell.global_ns, {})
- self.assertTrue('\n\n' in dummy_shell_factory.shell.IP.BANNER)
- self.assertEqual(len(app.threadlocal_manager.popped), 1)
-
- def test_command_get_app_hookable(self):
- from paste.deploy import loadapp
- command = self._makeOne()
- app = DummyApp()
- apped = []
- def get_app(*arg, **kw):
- apped.append((arg, kw))
- return app
- command.get_app = get_app
- interact = DummyInteractor()
- app = DummyApp()
- command.interact = (interact,)
- command.ConfigParser = makeDummyConfigParser({})
- command.args = ('/foo/bar/myapp.ini#myapp',)
- class Options(object): pass
- command.options = Options()
- command.options.disable_ipython =True
- command.command(IPShell=None)
- self.assertEqual(len(app.threadlocal_manager.pushed), 1)
- pushed = app.threadlocal_manager.pushed[0]
- self.assertEqual(pushed['registry'], dummy_registry)
- self.assertEqual(pushed['request'].registry, dummy_registry)
- self.assertEqual(interact.local, {'app': app,
- 'root':dummy_root,
- 'registry':dummy_registry,
- 'settings':dummy_registry.settings})
- self.assertTrue(interact.banner)
- self.assertEqual(len(app.threadlocal_manager.popped), 1)
- self.assertEqual(apped, [(('/foo/bar/myapp.ini#myapp',),
- {'loadapp': loadapp})])
-
- def test_command_get_root_hookable(self):
- command = self._makeOne()
- interact = DummyInteractor()
- app = DummyApp()
- loadapp = DummyLoadApp(app)
- command.interact = (interact,)
- command.loadapp = (loadapp,)
- command.ConfigParser = makeDummyConfigParser({})
- root = Dummy()
- apps = []
- def get_root(app):
- apps.append(app)
- return root, lambda *arg: None
- command.get_root =get_root
- command.args = ('/foo/bar/myapp.ini#myapp',)
- class Options(object): pass
- command.options = Options()
- command.options.disable_ipython =True
- command.command(IPShell=None)
- self.assertEqual(loadapp.config_name, 'config:/foo/bar/myapp.ini')
- self.assertEqual(loadapp.section_name, 'myapp')
- self.assertTrue(loadapp.relative_to)
- self.assertEqual(len(app.threadlocal_manager.pushed), 0)
- self.assertEqual(interact.local, {'app':app,
- 'root':root,
- 'registry':dummy_registry,
- 'settings':dummy_registry.settings})
- self.assertTrue(interact.banner)
- self.assertEqual(apps, [app])
+ self.assertTrue(self.bootstrap.closer.called)
def test_command_loads_custom_items(self):
command = self._makeOne()
- interact = DummyInteractor()
- app = DummyApp()
- loadapp = DummyLoadApp(app)
- command.interact = (interact,)
- command.loadapp = (loadapp,)
model = Dummy()
- command.ConfigParser = makeDummyConfigParser([('m', model)])
- command.args = ('/foo/bar/myapp.ini#myapp',)
- class Options(object): pass
- command.options = Options()
- command.options.disable_ipython = False
- command.command(IPShell=None)
- self.assertEqual(loadapp.config_name, 'config:/foo/bar/myapp.ini')
- self.assertEqual(loadapp.section_name, 'myapp')
- self.assertTrue(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'].registry, dummy_registry)
- self.assertEqual(interact.local, {'app':app,
- 'root':dummy_root,
- 'registry':dummy_registry,
- 'settings':dummy_registry.settings,
- 'm': model})
- self.assertTrue(interact.banner)
- self.assertEqual(len(app.threadlocal_manager.popped), 1)
-
- def test_command_no_custom_section(self):
- command = self._makeOne()
- interact = DummyInteractor()
- app = DummyApp()
- loadapp = DummyLoadApp(app)
- command.interact = (interact,)
- command.loadapp = (loadapp,)
- command.ConfigParser = makeDummyConfigParser(None)
- command.args = ('/foo/bar/myapp.ini#myapp',)
- class Options(object): pass
- command.options = Options()
- command.options.disable_ipython = False
+ self.config_factory.items = [('m', model)]
+ command.options.disable_ipython = True
command.command(IPShell=None)
- self.assertEqual(loadapp.config_name, 'config:/foo/bar/myapp.ini')
- self.assertEqual(loadapp.section_name, 'myapp')
- self.assertTrue(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'].registry, dummy_registry)
- self.assertEqual(interact.local, {'app':app,
- 'root':dummy_root,
- 'registry':dummy_registry,
- 'settings':dummy_registry.settings})
- self.assertTrue(interact.banner)
- self.assertEqual(len(app.threadlocal_manager.popped), 1)
+ self.assertTrue(self.config_factory.parser)
+ self.assertEqual(self.config_factory.parser.filename,
+ '/foo/bar/myapp.ini')
+ self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')
+ self.assertEqual(self.interact.local, {
+ 'app':self.bootstrap.app, 'root':self.bootstrap.root,
+ 'registry':self.bootstrap.registry,
+ 'request':self.bootstrap.request,
+ 'root_factory':self.bootstrap.root_factory,
+ 'm':model,
+ })
+ self.assertTrue(self.bootstrap.closer.called)
+ self.assertTrue(self.interact.banner)
def test_command_custom_section_override(self):
command = self._makeOne()
- interact = DummyInteractor()
- app = Dummy()
- loadapp = DummyLoadApp(app)
- command.interact = (interact,)
- command.loadapp = (loadapp,)
- model = Dummy()
- command.ConfigParser = makeDummyConfigParser([('app', model)])
- command.args = ('/foo/bar/myapp.ini#myapp',)
- class Options(object): pass
- command.options = Options()
- command.options.disable_ipython = False
- command.command(IPShell=None)
- self.assertEqual(loadapp.config_name, 'config:/foo/bar/myapp.ini')
- self.assertEqual(loadapp.section_name, 'myapp')
- self.assertTrue(loadapp.relative_to)
- self.assertEqual(interact.local, {'app':model})
- self.assertTrue(interact.banner)
-
- def test_command_generic_wsgi_app(self):
- command = self._makeOne()
- interact = DummyInteractor()
- app = Dummy()
- loadapp = DummyLoadApp(app)
- command.interact = (interact,)
- command.loadapp = (loadapp,)
- command.ConfigParser = makeDummyConfigParser(None)
- command.args = ('/foo/bar/myapp.ini#myapp',)
- class Options(object): pass
- command.options = Options()
- command.options.disable_ipython = False
+ dummy = Dummy()
+ self.config_factory.items = [('app', dummy), ('root', dummy),
+ ('registry', dummy), ('request', dummy)]
+ command.options.disable_ipython = True
command.command(IPShell=None)
- self.assertEqual(loadapp.config_name, 'config:/foo/bar/myapp.ini')
- self.assertEqual(loadapp.section_name, 'myapp')
- self.assertTrue(loadapp.relative_to)
- self.assertEqual(interact.local, {'app':app})
- self.assertTrue(interact.banner)
+ self.assertTrue(self.config_factory.parser)
+ self.assertEqual(self.config_factory.parser.filename,
+ '/foo/bar/myapp.ini')
+ self.assertEqual(self.bootstrap.a[0], '/foo/bar/myapp.ini#myapp')
+ self.assertEqual(self.interact.local, {
+ 'app':dummy, 'root':dummy, 'registry':dummy, 'request':dummy,
+ 'root_factory':self.bootstrap.root_factory,
+ })
+ self.assertTrue(self.bootstrap.closer.called)
+ self.assertTrue(self.interact.banner)
class TestPRoutesCommand(unittest.TestCase):
def _getTargetClass(self):
@@ -1015,22 +887,7 @@ class DummyLoadApp:
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)
-
class DummyMapper(object):
def __init__(self, *routes):
self.routes = routes
@@ -1073,15 +930,49 @@ class DummyMultiView(object):
self.views = [(None, view, None) for view in views]
self.__request_attrs__ = attrs
-def makeDummyConfigParser(items):
- class DummyConfigParser(object):
- def read(self, filename):
- self.filename = filename
-
- def items(self, section):
- self.section = section
- if items is None:
- from ConfigParser import NoSectionError
- raise NoSectionError, section
- return items
- return DummyConfigParser
+class DummyConfigParser(object):
+ def __init__(self, result):
+ self.result = result
+
+ def read(self, filename):
+ self.filename = filename
+
+ def items(self, section):
+ self.section = section
+ if self.result is None:
+ from ConfigParser import NoSectionError
+ raise NoSectionError, section
+ return self.result
+
+class DummyConfigParserFactory(object):
+ items = None
+
+ def __call__(self):
+ self.parser = DummyConfigParser(self.items)
+ return self.parser
+
+class DummyCloser(object):
+ def __call__(self):
+ self.called = True
+
+class DummyBootstrap(object):
+ def __init__(self, app=None, registry=None, request=None, root=None,
+ root_factory=None, closer=None):
+ self.app = app or DummyApp()
+ self.registry = registry or dummy_registry
+ self.request = request or DummyRequest({})
+ self.root = root or dummy_root
+ self.root_factory = root_factory or Dummy()
+ self.closer = closer or DummyCloser()
+
+ def __call__(self, *a, **kw):
+ self.a = a
+ self.kw = kw
+ return {
+ 'app': self.app,
+ 'registry': self.registry,
+ 'request': self.request,
+ 'root': self.root,
+ 'root_factory': self.root_factory,
+ 'closer': self.closer,
+ }