--- a/devtools/testlib.py Thu Mar 15 17:42:31 2012 +0100
+++ b/devtools/testlib.py Thu Mar 15 17:48:20 2012 +0100
@@ -608,8 +608,8 @@
ctrl = self.vreg['controllers'].select('ajax', req)
return ctrl.publish(), req
- def app_publish(self, req, path='view'):
- return self.app.publish(path, req)
+ def app_handle_request(self, req, path='view'):
+ return self.app.core_handle(req, path)
def ctrl_publish(self, req, ctrl='edit'):
"""call the publish method of the edit controller"""
@@ -646,6 +646,20 @@
ctrlid, rset = self.app.url_resolver.process(req, req.relative_path(False))
return self.ctrl_publish(req, ctrlid)
+ @staticmethod
+ def _parse_location(req, location):
+ try:
+ path, params = location.split('?', 1)
+ except ValueError:
+ path = location
+ params = {}
+ else:
+ cleanup = lambda p: (p[0], unquote(p[1]))
+ params = dict(cleanup(p.split('=', 1)) for p in params.split('&') if p)
+ if path.startswith(req.base_url()): # may be relative
+ path = path[len(req.base_url()):]
+ return path, params
+
def expect_redirect(self, callback, req):
"""call the given callback with req as argument, expecting to get a
Redirect exception
@@ -653,25 +667,18 @@
try:
callback(req)
except Redirect, ex:
- try:
- path, params = ex.location.split('?', 1)
- except ValueError:
- path = ex.location
- params = {}
- else:
- cleanup = lambda p: (p[0], unquote(p[1]))
- params = dict(cleanup(p.split('=', 1)) for p in params.split('&') if p)
- if path.startswith(req.base_url()): # may be relative
- path = path[len(req.base_url()):]
- return path, params
+ return self._parse_location(req, ex.location)
else:
self.fail('expected a Redirect exception')
- def expect_redirect_publish(self, req, path='edit'):
+ def expect_redirect_handle_request(self, req, path='edit'):
"""call the publish method of the application publisher, expecting to
get a Redirect exception
"""
- return self.expect_redirect(lambda x: self.app_publish(x, path), req)
+ result = self.app_handle_request(req, path)
+ self.assertTrue(300 <= req.status_out <400, req.status_out)
+ location = req.get_response_header('location')
+ return self._parse_location(req, location)
def set_auth_mode(self, authmode, anonuser=None):
self.set_option('auth-mode', authmode)