summaryrefslogtreecommitdiff
path: root/repoze/bfg/tests
diff options
context:
space:
mode:
authorChris McDonough <chrism@agendaless.com>2009-01-12 05:12:57 +0000
committerChris McDonough <chrism@agendaless.com>2009-01-12 05:12:57 +0000
commita0b40cc8aa58c557c30840c906fcba3401bb91cf (patch)
tree9c1b94a971f7394f42aed7e16b7ba49248bb7d47 /repoze/bfg/tests
parentb16527306a1ddd0ed5c0a9db78a8ffa64c42ae2e (diff)
downloadpyramid-a0b40cc8aa58c557c30840c906fcba3401bb91cf.tar.gz
pyramid-a0b40cc8aa58c557c30840c906fcba3401bb91cf.tar.bz2
pyramid-a0b40cc8aa58c557c30840c906fcba3401bb91cf.zip
- An interface specific to the HTTP verb (GET/PUT/POST/DELETE/HEAD) is
attached to each request object on ingress. The HTTP-verb-related interfaces are defined in ``repoze.bfg.interfaces`` and are ``IGETRequest``, ``IPOSTRequest``, ``IPUTRequest``, ``IDELETERequest`` and ``IHEADRequest``. These interfaces can be specified as the ``request_type`` attribute of a bfg view declaration. A view naming a specific HTTP-verb-matching interface will be found only if the view is defined with a request_type that matches the HTTP verb in the incoming request. The more general ``IRequest`` interface can be used as the request_type to catch all requests (and this is indeed the default). All requests implement ``IRequest``. The HTTP-verb-matching idea was pioneered by `repoze.bfg.restrequest <http://pypi.python.org/pypi/repoze.bfg.restrequest/1.0.1>`_ . That package is no longer required, but still functions fine.
Diffstat (limited to 'repoze/bfg/tests')
-rw-r--r--repoze/bfg/tests/test_router.py54
1 files changed, 54 insertions, 0 deletions
diff --git a/repoze/bfg/tests/test_router.py b/repoze/bfg/tests/test_router.py
index 35ab21f9c..298065d9b 100644
--- a/repoze/bfg/tests/test_router.py
+++ b/repoze/bfg/tests/test_router.py
@@ -440,6 +440,60 @@ class RouterTests(unittest.TestCase, PlacelessSetup):
self.assertEqual(request_events[0].request.environ, environ)
self.assertEqual(len(response_events), 1)
self.assertEqual(response_events[0].response, response)
+
+ def test_call_post_method(self):
+ from repoze.bfg.interfaces import INewRequest
+ from repoze.bfg.interfaces import IPOSTRequest
+ from repoze.bfg.interfaces import IPUTRequest
+ from repoze.bfg.interfaces import IRequest
+ rootfactory = make_rootfactory(None)
+ context = DummyContext()
+ traversalfactory = make_traversal_factory(context, '', [])
+ response = DummyResponse()
+ response.app_iter = ['Hello world']
+ view = make_view(response)
+ environ = self._makeEnviron(REQUEST_METHOD='POST')
+ self._registerTraverserFactory(traversalfactory, '', None)
+ self._registerView(view, '', None, None)
+ self._registerRootFactory(rootfactory)
+ router = self._makeOne(None)
+ start_response = DummyStartResponse()
+ request_events = []
+ def handle_request(event):
+ request_events.append(event)
+ self._registerEventListener(handle_request, INewRequest)
+ result = router(environ, start_response)
+ request = request_events[0].request
+ self.failUnless(IPOSTRequest.providedBy(request))
+ self.failIf(IPUTRequest.providedBy(request))
+ self.failUnless(IRequest.providedBy(request))
+
+ def test_call_put_method(self):
+ from repoze.bfg.interfaces import INewRequest
+ from repoze.bfg.interfaces import IPUTRequest
+ from repoze.bfg.interfaces import IPOSTRequest
+ from repoze.bfg.interfaces import IRequest
+ rootfactory = make_rootfactory(None)
+ context = DummyContext()
+ traversalfactory = make_traversal_factory(context, '', [])
+ response = DummyResponse()
+ response.app_iter = ['Hello world']
+ view = make_view(response)
+ environ = self._makeEnviron(REQUEST_METHOD='PUT')
+ self._registerTraverserFactory(traversalfactory, '', None)
+ self._registerView(view, '', None, None)
+ self._registerRootFactory(rootfactory)
+ router = self._makeOne(None)
+ start_response = DummyStartResponse()
+ request_events = []
+ def handle_request(event):
+ request_events.append(event)
+ self._registerEventListener(handle_request, INewRequest)
+ result = router(environ, start_response)
+ request = request_events[0].request
+ self.failUnless(IPUTRequest.providedBy(request))
+ self.failIf(IPOSTRequest.providedBy(request))
+ self.failUnless(IRequest.providedBy(request))
class MakeAppTests(unittest.TestCase, PlacelessSetup):
def setUp(self):