diff options
| author | Chris McDonough <chrism@agendaless.com> | 2009-06-11 03:15:15 +0000 |
|---|---|---|
| committer | Chris McDonough <chrism@agendaless.com> | 2009-06-11 03:15:15 +0000 |
| commit | dfc2b65c1b6d2f938f68b7868a14d8f9a4faab9e (patch) | |
| tree | f3241401b7175a401e00286b11e3efe3c21f5093 /repoze/bfg/tests/test_request.py | |
| parent | f8b0065b6ede54424d7a7b49f9f113e87634b5ab (diff) | |
| download | pyramid-dfc2b65c1b6d2f938f68b7868a14d8f9a4faab9e.tar.gz pyramid-dfc2b65c1b6d2f938f68b7868a14d8f9a4faab9e.tar.bz2 pyramid-dfc2b65c1b6d2f938f68b7868a14d8f9a4faab9e.zip | |
Merge unifyroutesandtraversal branch into trunk
Diffstat (limited to 'repoze/bfg/tests/test_request.py')
| -rw-r--r-- | repoze/bfg/tests/test_request.py | 170 |
1 files changed, 168 insertions, 2 deletions
diff --git a/repoze/bfg/tests/test_request.py b/repoze/bfg/tests/test_request.py index 4771c3e1c..9cae6643a 100644 --- a/repoze/bfg/tests/test_request.py +++ b/repoze/bfg/tests/test_request.py @@ -13,8 +13,8 @@ class TestMakeRequestASCII(unittest.TestCase): class TestSubclassedRequest(unittest.TestCase): def _getTargetClass(self): - from repoze.bfg.request import Request - return Request + from repoze.bfg.request import DEFAULT_REQUEST_FACTORIES + return DEFAULT_REQUEST_FACTORIES[None]['factory'] def _makeOne(self, environ): request = self._getTargetClass()(environ) @@ -56,6 +56,172 @@ class TestCurrentRequest(unittest.TestCase): manager.pop() self.assertEqual(self._callFUT(), None) +class TestRequestFactory(unittest.TestCase): + def _callFUT(self, environ): + from repoze.bfg.request import request_factory + return request_factory(environ) + + def _getRequestFactory(self, name_or_iface=None): + from repoze.bfg.request import DEFAULT_REQUEST_FACTORIES + return DEFAULT_REQUEST_FACTORIES[name_or_iface]['factory'] + + def _makeRoute(self): + route = DummyRoute() + factories = {} + def factory(environ): + return environ + for name in (None, 'GET', 'POST', 'PUT', 'DELETE', 'HEAD'): + factories[name] = {'factory':factory} + route.request_factories = factories + return route + + def test_no_route_no_request_method(self): + from repoze.bfg.interfaces import IRequest + result = self._callFUT({}) + self.assertEqual(result.__class__, self._getRequestFactory()) + self.failUnless(IRequest.providedBy(result)) + + def test_no_route_unknown(self): + from repoze.bfg.interfaces import IRequest + result = self._callFUT({'REQUEST_METHOD':'UNKNOWN'}) + self.assertEqual(result.__class__, self._getRequestFactory()) + self.failUnless(IRequest.providedBy(result)) + + def test_no_route_get(self): + from repoze.bfg.interfaces import IGETRequest + result = self._callFUT({'REQUEST_METHOD':'GET'}) + self.assertEqual(result.__class__, self._getRequestFactory('GET')) + self.failUnless(IGETRequest.providedBy(result)) + + def test_no_route_post(self): + from repoze.bfg.interfaces import IPOSTRequest + result = self._callFUT({'REQUEST_METHOD':'POST'}) + self.assertEqual(result.__class__, self._getRequestFactory('POST')) + self.failUnless(IPOSTRequest.providedBy(result)) + + def test_no_route_put(self): + from repoze.bfg.interfaces import IPUTRequest + result = self._callFUT({'REQUEST_METHOD':'PUT'}) + self.assertEqual(result.__class__, self._getRequestFactory('PUT')) + self.failUnless(IPUTRequest.providedBy(result)) + + def test_no_route_delete(self): + from repoze.bfg.interfaces import IDELETERequest + result = self._callFUT({'REQUEST_METHOD':'DELETE'}) + self.assertEqual(result.__class__, self._getRequestFactory('DELETE')) + self.failUnless(IDELETERequest.providedBy(result)) + + def test_no_route_head(self): + from repoze.bfg.interfaces import IHEADRequest + result = self._callFUT({'REQUEST_METHOD':'HEAD'}) + self.assertEqual(result.__class__, self._getRequestFactory('HEAD')) + self.failUnless(IHEADRequest.providedBy(result)) + + def test_route_no_request_method(self): + route = self._makeRoute() + environ = {'bfg.routes.route':route} + result = self._callFUT(environ) + self.assertEqual(result, environ) + + def test_route_unknown(self): + route = self._makeRoute() + environ = {'bfg.routes.route':route, 'REQUEST_METHOD':'UNKNOWN'} + result = self._callFUT(environ) + self.assertEqual(result, environ) + + def test_route_known(self): + route = self._makeRoute() + environ = {'bfg.routes.route':route, 'REQUEST_METHOD':'GET'} + result = self._callFUT(environ) + self.assertEqual(result, environ) + +class TestNamedRequestFactories(unittest.TestCase): + def _callFUT(self, name): + from repoze.bfg.request import named_request_factories + return named_request_factories(name) + + def test_it_unnamed(self): + factories = self._callFUT(None) + from repoze.bfg.interfaces import IRequest + from repoze.bfg.interfaces import IGETRequest + from repoze.bfg.interfaces import IPOSTRequest + from repoze.bfg.interfaces import IPUTRequest + from repoze.bfg.interfaces import IDELETERequest + from repoze.bfg.interfaces import IHEADRequest + for alias, iface in ( + (None, IRequest), + ('GET', IGETRequest), + ('POST', IPOSTRequest), + ('PUT', IPUTRequest), + ('DELETE', IDELETERequest), + ('HEAD', IHEADRequest), + ): + self.failUnless(alias in factories) + self.failUnless(iface in factories) + self.assertEqual(factories[alias], factories[iface]) + named_iface = factories[alias]['interface'] + named_factory = factories[alias]['factory'] + self.failUnless(named_iface.implementedBy(named_factory)) + self.assertEqual(factories[alias]['interface'], iface) + self.assertEqual(factories[iface]['interface'], iface) + self.assertEqual(factories[alias]['factory'].charset, 'utf-8') + + def test_it_named(self): + factories = self._callFUT('name') + from zope.interface.interface import InterfaceClass + from repoze.bfg.interfaces import IRequest + from repoze.bfg.interfaces import IGETRequest + from repoze.bfg.interfaces import IPOSTRequest + from repoze.bfg.interfaces import IPUTRequest + from repoze.bfg.interfaces import IDELETERequest + from repoze.bfg.interfaces import IHEADRequest + for alias, iface in ( + (None, IRequest), + ('GET', IGETRequest), + ('POST', IPOSTRequest), + ('PUT', IPUTRequest), + ('DELETE', IDELETERequest), + ('HEAD', IHEADRequest), + ): + self.failUnless(alias in factories) + self.failUnless(iface in factories) + self.assertEqual(factories[alias], factories[iface]) + self.assertEqual(factories[alias]['factory'].charset, 'utf-8') + named_iface = factories[alias]['interface'] + named_factory = factories[alias]['factory'] + self.failUnless(named_iface.implementedBy(named_factory)) + +class TestDefaultRequestFactories(unittest.TestCase): + def test_it(self): + from repoze.bfg.request import DEFAULT_REQUEST_FACTORIES as factories + from repoze.bfg.interfaces import IRequest + from repoze.bfg.interfaces import IGETRequest + from repoze.bfg.interfaces import IPOSTRequest + from repoze.bfg.interfaces import IPUTRequest + from repoze.bfg.interfaces import IDELETERequest + from repoze.bfg.interfaces import IHEADRequest + for alias, iface in ( + (None, IRequest), + ('GET', IGETRequest), + ('POST', IPOSTRequest), + ('PUT', IPUTRequest), + ('DELETE', IDELETERequest), + ('HEAD', IHEADRequest), + ): + self.failUnless(alias in factories) + self.failUnless(iface in factories) + self.assertEqual(factories[alias], factories[iface]) + named_iface = factories[alias]['interface'] + named_factory = factories[alias]['factory'] + self.failUnless(named_iface.implementedBy(named_factory)) + self.assertEqual(factories[alias]['interface'], iface) + self.assertEqual(factories[iface]['interface'], iface) + self.assertEqual(factories[alias]['factory'].charset, 'utf-8') + + +class DummyRoute: + pass + class DummyRequest: pass |
