summaryrefslogtreecommitdiff
path: root/repoze/bfg/tests/test_view.py
diff options
context:
space:
mode:
authorChris McDonough <chrism@plope.com>2010-10-25 10:29:31 -0400
committerChris McDonough <chrism@plope.com>2010-10-25 10:29:31 -0400
commit64372401084889a440c9d990a0febc221e3e4b5c (patch)
treec8939a341505d19f19fa6918d264b4e1d95326f8 /repoze/bfg/tests/test_view.py
parentc8e78c2037806f3e5dab57de635bf80865b7061d (diff)
downloadpyramid-64372401084889a440c9d990a0febc221e3e4b5c.tar.gz
pyramid-64372401084889a440c9d990a0febc221e3e4b5c.tar.bz2
pyramid-64372401084889a440c9d990a0febc221e3e4b5c.zip
first pass at converting bfg to pyramid namespace
Diffstat (limited to 'repoze/bfg/tests/test_view.py')
-rw-r--r--repoze/bfg/tests/test_view.py499
1 files changed, 0 insertions, 499 deletions
diff --git a/repoze/bfg/tests/test_view.py b/repoze/bfg/tests/test_view.py
deleted file mode 100644
index e5adc8de1..000000000
--- a/repoze/bfg/tests/test_view.py
+++ /dev/null
@@ -1,499 +0,0 @@
-import unittest
-import sys
-
-from repoze.bfg.testing import cleanUp
-
-class BaseTest(object):
- def setUp(self):
- cleanUp()
-
- def tearDown(self):
- cleanUp()
-
- def _registerView(self, reg, app, name):
- from repoze.bfg.interfaces import IRequest
- from repoze.bfg.interfaces import IViewClassifier
- for_ = (IViewClassifier, IRequest, IContext)
- from repoze.bfg.interfaces import IView
- reg.registerAdapter(app, for_, IView, name)
-
- def _makeEnviron(self, **extras):
- environ = {
- 'wsgi.url_scheme':'http',
- 'wsgi.version':(1,0),
- 'SERVER_NAME':'localhost',
- 'SERVER_PORT':'8080',
- 'REQUEST_METHOD':'GET',
- }
- environ.update(extras)
- return environ
-
- def _makeRequest(self, **environ):
- from repoze.bfg.interfaces import IRequest
- from zope.interface import directlyProvides
- from webob import Request
- from repoze.bfg.registry import Registry
- environ = self._makeEnviron(**environ)
- request = Request(environ)
- request.registry = Registry()
- directlyProvides(request, IRequest)
- return request
-
- def _makeContext(self):
- from zope.interface import directlyProvides
- context = DummyContext()
- directlyProvides(context, IContext)
- return context
-
-
-class RenderViewToResponseTests(BaseTest, unittest.TestCase):
- def _callFUT(self, *arg, **kw):
- from repoze.bfg.view import render_view_to_response
- return render_view_to_response(*arg, **kw)
-
- def test_call_no_view_registered(self):
- request = self._makeRequest()
- context = self._makeContext()
- result = self._callFUT(context, request, name='notregistered')
- self.assertEqual(result, None)
-
- def test_call_no_registry_on_request(self):
- request = self._makeRequest()
- del request.registry
- context = self._makeContext()
- result = self._callFUT(context, request, name='notregistered')
- self.assertEqual(result, None)
-
- def test_call_view_registered_secure(self):
- request = self._makeRequest()
- context = self._makeContext()
- response = DummyResponse()
- view = make_view(response)
- self._registerView(request.registry, view, 'registered')
- response = self._callFUT(context, request, name='registered',
- secure=True)
- self.assertEqual(response.status, '200 OK')
-
- def test_call_view_registered_insecure_no_call_permissive(self):
- context = self._makeContext()
- request = self._makeRequest()
- response = DummyResponse()
- view = make_view(response)
- self._registerView(request.registry, view, 'registered')
- response = self._callFUT(context, request, name='registered',
- secure=False)
- self.assertEqual(response.status, '200 OK')
-
- def test_call_view_registered_insecure_with_call_permissive(self):
- context = self._makeContext()
- request = self._makeRequest()
- response = DummyResponse()
- view = make_view(response)
- def anotherview(context, request):
- return DummyResponse('anotherview')
- view.__call_permissive__ = anotherview
- self._registerView(request.registry, view, 'registered')
- response = self._callFUT(context, request, name='registered',
- secure=False)
- self.assertEqual(response.status, '200 OK')
- self.assertEqual(response.app_iter, ['anotherview'])
-
-class RenderViewToIterableTests(BaseTest, unittest.TestCase):
- def _callFUT(self, *arg, **kw):
- from repoze.bfg.view import render_view_to_iterable
- return render_view_to_iterable(*arg, **kw)
-
- def test_call_no_view_registered(self):
- request = self._makeRequest()
- context = self._makeContext()
- result = self._callFUT(context, request, name='notregistered')
- self.assertEqual(result, None)
-
- def test_call_view_registered_secure(self):
- request = self._makeRequest()
- context = self._makeContext()
- response = DummyResponse()
- view = make_view(response)
- self._registerView(request.registry, view, 'registered')
- iterable = self._callFUT(context, request, name='registered',
- secure=True)
- self.assertEqual(iterable, ())
-
- def test_call_view_registered_insecure_no_call_permissive(self):
- context = self._makeContext()
- request = self._makeRequest()
- response = DummyResponse()
- view = make_view(response)
- self._registerView(request.registry, view, 'registered')
- iterable = self._callFUT(context, request, name='registered',
- secure=False)
- self.assertEqual(iterable, ())
-
- def test_call_view_registered_insecure_with_call_permissive(self):
- context = self._makeContext()
- request = self._makeRequest()
- response = DummyResponse()
- view = make_view(response)
- def anotherview(context, request):
- return DummyResponse('anotherview')
- view.__call_permissive__ = anotherview
- self._registerView(request.registry, view, 'registered')
- iterable = self._callFUT(context, request, name='registered',
- secure=False)
- self.assertEqual(iterable, ['anotherview'])
-
-class RenderViewTests(BaseTest, unittest.TestCase):
- def _callFUT(self, *arg, **kw):
- from repoze.bfg.view import render_view
- return render_view(*arg, **kw)
-
- def test_call_no_view_registered(self):
- request = self._makeRequest()
- context = self._makeContext()
- result = self._callFUT(context, request, name='notregistered')
- self.assertEqual(result, None)
-
- def test_call_view_registered_secure(self):
- request = self._makeRequest()
- context = self._makeContext()
- response = DummyResponse()
- view = make_view(response)
- self._registerView(request.registry, view, 'registered')
- s = self._callFUT(context, request, name='registered', secure=True)
- self.assertEqual(s, '')
-
- def test_call_view_registered_insecure_no_call_permissive(self):
- context = self._makeContext()
- request = self._makeRequest()
- response = DummyResponse()
- view = make_view(response)
- self._registerView(request.registry, view, 'registered')
- s = self._callFUT(context, request, name='registered', secure=False)
- self.assertEqual(s, '')
-
- def test_call_view_registered_insecure_with_call_permissive(self):
- context = self._makeContext()
- request = self._makeRequest()
- response = DummyResponse()
- view = make_view(response)
- def anotherview(context, request):
- return DummyResponse('anotherview')
- view.__call_permissive__ = anotherview
- self._registerView(request.registry, view, 'registered')
- s = self._callFUT(context, request, name='registered', secure=False)
- self.assertEqual(s, 'anotherview')
-
-class TestIsResponse(unittest.TestCase):
- def _callFUT(self, *arg, **kw):
- from repoze.bfg.view import is_response
- return is_response(*arg, **kw)
-
- def test_is(self):
- response = DummyResponse()
- self.assertEqual(self._callFUT(response), True)
-
- def test_isnt(self):
- response = None
- self.assertEqual(self._callFUT(response), False)
-
- def test_partial_inst(self):
- response = DummyResponse()
- response.app_iter = None
- self.assertEqual(self._callFUT(response), False)
-
- def test_status_not_string(self):
- response = DummyResponse()
- response.status = None
- self.assertEqual(self._callFUT(response), False)
-
-class TestBFGViewDecorator(unittest.TestCase):
- def setUp(self):
- cleanUp()
-
- def tearDown(self):
- cleanUp()
-
- def _getTargetClass(self):
- from repoze.bfg.view import bfg_view
- return bfg_view
-
- def _makeOne(self, *arg, **kw):
- return self._getTargetClass()(*arg, **kw)
-
- def test_create_defaults(self):
- decorator = self._makeOne()
- self.assertEqual(decorator.name, '')
- self.assertEqual(decorator.request_type, None)
- self.assertEqual(decorator.context, None)
- self.assertEqual(decorator.permission, None)
-
- def test_create_nondefaults(self):
- decorator = self._makeOne(name=None, request_type=None, for_=None,
- permission='foo')
- self.assertEqual(decorator.name, None)
- self.assertEqual(decorator.request_type, None)
- self.assertEqual(decorator.context, None)
- self.assertEqual(decorator.permission, 'foo')
-
- def test_call_function(self):
- decorator = self._makeOne()
- venusian = DummyVenusian()
- decorator.venusian = venusian
- def foo(): pass
- wrapped = decorator(foo)
- self.failUnless(wrapped is foo)
- settings = call_venusian(venusian)
- self.assertEqual(len(settings), 1)
- self.assertEqual(settings[0]['permission'], None)
- self.assertEqual(settings[0]['context'], None)
- self.assertEqual(settings[0]['request_type'], None)
-
- def test_call_class(self):
- decorator = self._makeOne()
- venusian = DummyVenusian()
- decorator.venusian = venusian
- decorator.venusian.info.scope = 'class'
- class foo(object): pass
- wrapped = decorator(foo)
- self.failUnless(wrapped is foo)
- settings = call_venusian(venusian)
- self.assertEqual(len(settings), 1)
- self.assertEqual(settings[0]['permission'], None)
- self.assertEqual(settings[0]['context'], None)
- self.assertEqual(settings[0]['request_type'], None)
-
- def test_stacking(self):
- decorator1 = self._makeOne(name='1')
- venusian1 = DummyVenusian()
- decorator1.venusian = venusian1
- venusian2 = DummyVenusian()
- decorator2 = self._makeOne(name='2')
- decorator2.venusian = venusian2
- def foo(): pass
- wrapped1 = decorator1(foo)
- wrapped2 = decorator2(wrapped1)
- self.failUnless(wrapped1 is foo)
- self.failUnless(wrapped2 is foo)
- settings1 = call_venusian(venusian1)
- self.assertEqual(len(settings1), 1)
- self.assertEqual(settings1[0]['name'], '1')
- settings2 = call_venusian(venusian2)
- self.assertEqual(len(settings2), 1)
- self.assertEqual(settings2[0]['name'], '2')
-
- def test_call_as_method(self):
- decorator = self._makeOne()
- venusian = DummyVenusian()
- decorator.venusian = venusian
- decorator.venusian.info.scope = 'class'
- def foo(self): pass
- def bar(self): pass
- class foo(object):
- foomethod = decorator(foo)
- barmethod = decorator(bar)
- settings = call_venusian(venusian)
- self.assertEqual(len(settings), 2)
- self.assertEqual(settings[0]['attr'], 'foo')
- self.assertEqual(settings[1]['attr'], 'bar')
-
- def test_with_custom_predicates(self):
- decorator = self._makeOne(custom_predicates=(1,))
- venusian = DummyVenusian()
- decorator.venusian = venusian
- def foo(context, request): pass
- decorated = decorator(foo)
- self.failUnless(decorated is foo)
- settings = call_venusian(venusian)
- self.assertEqual(settings[0]['custom_predicates'], (1,))
-
- def test_call_with_renderer_nodot(self):
- decorator = self._makeOne(renderer='json')
- venusian = DummyVenusian()
- decorator.venusian = venusian
- def foo(): pass
- wrapped = decorator(foo)
- self.failUnless(wrapped is foo)
- settings = call_venusian(venusian)
- self.assertEqual(len(settings), 1)
- self.assertEqual(settings[0]['renderer'], 'json')
-
- def test_call_with_renderer_relpath(self):
- decorator = self._makeOne(renderer='fixtures/minimal.pt')
- venusian = DummyVenusian()
- decorator.venusian = venusian
- def foo(): pass
- wrapped = decorator(foo)
- self.failUnless(wrapped is foo)
- settings = call_venusian(venusian)
- self.assertEqual(len(settings), 1)
- self.assertEqual(settings[0]['renderer'],
- 'repoze.bfg.tests:fixtures/minimal.pt')
-
- def test_call_with_renderer_pkgpath(self):
- decorator = self._makeOne(
- renderer='repoze.bfg.tests:fixtures/minimal.pt')
- venusian = DummyVenusian()
- decorator.venusian = venusian
- def foo(): pass
- wrapped = decorator(foo)
- self.failUnless(wrapped is foo)
- settings = call_venusian(venusian)
- self.assertEqual(len(settings), 1)
- self.assertEqual(settings[0]['renderer'],
- 'repoze.bfg.tests:fixtures/minimal.pt')
-
-class Test_append_slash_notfound_view(BaseTest, unittest.TestCase):
- def _callFUT(self, context, request):
- from repoze.bfg.view import append_slash_notfound_view
- return append_slash_notfound_view(context, request)
-
- def _registerMapper(self, reg, match=True):
- from repoze.bfg.interfaces import IRoutesMapper
- class DummyRoute(object):
- def __init__(self, val):
- self.val = val
- def match(self, path):
- return self.val
- class DummyMapper(object):
- def __init__(self):
- self.routelist = [ DummyRoute(match) ]
- def get_routes(self):
- return self.routelist
- mapper = DummyMapper()
- reg.registerUtility(mapper, IRoutesMapper)
- return mapper
-
- def test_context_is_not_exception(self):
- request = self._makeRequest(PATH_INFO='/abc')
- request.exception = ExceptionResponse()
- context = DummyContext()
- response = self._callFUT(context, request)
- self.assertEqual(response.status, '404 Not Found')
- self.assertEqual(response.app_iter, ['Not Found'])
-
- def test_no_mapper(self):
- request = self._makeRequest(PATH_INFO='/abc')
- context = ExceptionResponse()
- response = self._callFUT(context, request)
- self.assertEqual(response.status, '404 Not Found')
-
- def test_no_path(self):
- request = self._makeRequest()
- context = ExceptionResponse()
- self._registerMapper(request.registry, True)
- response = self._callFUT(context, request)
- self.assertEqual(response.status, '404 Not Found')
-
- def test_mapper_path_already_slash_ending(self):
- request = self._makeRequest(PATH_INFO='/abc/')
- context = ExceptionResponse()
- self._registerMapper(request.registry, True)
- response = self._callFUT(context, request)
- self.assertEqual(response.status, '404 Not Found')
-
- def test_matches(self):
- request = self._makeRequest(PATH_INFO='/abc')
- context = ExceptionResponse()
- self._registerMapper(request.registry, True)
- response = self._callFUT(context, request)
- self.assertEqual(response.status, '302 Found')
- self.assertEqual(response.location, '/abc/')
-
-class TestAppendSlashNotFoundViewFactory(BaseTest, unittest.TestCase):
- def _makeOne(self, notfound_view):
- from repoze.bfg.view import AppendSlashNotFoundViewFactory
- return AppendSlashNotFoundViewFactory(notfound_view)
-
- def test_custom_notfound_view(self):
- request = self._makeRequest(PATH_INFO='/abc')
- context = ExceptionResponse()
- def custom_notfound(context, request):
- return 'OK'
- view = self._makeOne(custom_notfound)
- response = view(context, request)
- self.assertEqual(response, 'OK')
-
-class Test_default_exceptionresponse_view(unittest.TestCase):
- def _callFUT(self, context, request):
- from repoze.bfg.view import default_exceptionresponse_view
- return default_exceptionresponse_view(context, request)
-
- def test_is_exception(self):
- context = Exception()
- result = self._callFUT(context, None)
- self.failUnless(result is context)
-
- def test_is_not_exception_no_request_exception(self):
- context = object()
- request = DummyRequest()
- result = self._callFUT(context, request)
- self.failUnless(result is context)
-
- def test_is_not_exception_request_exception(self):
- context = object()
- request = DummyRequest()
- request.exception = 'abc'
- result = self._callFUT(context, request)
- self.assertEqual(result, 'abc')
-
-class ExceptionResponse(Exception):
- status = '404 Not Found'
- app_iter = ['Not Found']
- headerlist = []
-
-class DummyContext:
- pass
-
-def make_view(response):
- def view(context, request):
- return response
- return view
-
-class DummyRequest:
- exception = None
-
-class DummyResponse:
- status = '200 OK'
- headerlist = ()
- def __init__(self, body=None):
- if body is None:
- self.app_iter = ()
- else:
- self.app_iter = [body]
-
-from zope.interface import Interface
-class IContext(Interface):
- pass
-
-class DummyVenusianInfo(object):
- scope = 'notaclass'
- module = sys.modules['repoze.bfg.tests']
-
-class DummyVenusian(object):
- def __init__(self, info=None):
- if info is None:
- info = DummyVenusianInfo()
- self.info = info
- self.attachments = []
-
- def attach(self, wrapped, callback, category=None):
- self.attachments.append((wrapped, callback, category))
- return self.info
-
-class DummyConfig(object):
- def __init__(self):
- self.settings = []
-
- def add_view(self, **kw):
- self.settings.append(kw)
-
-class DummyVenusianContext(object):
- def __init__(self):
- self.config = DummyConfig()
-
-def call_venusian(venusian):
- context = DummyVenusianContext()
- for wrapped, callback, category in venusian.attachments:
- callback(context, None, None)
- return context.config.settings
-