[MERGE] xmo tests for the root dispatcher

bzr revid: al@openerp.com-20110322210844-luvsbs3up4lc2zqg
This commit is contained in:
Antony Lesuisse 2011-03-22 22:08:44 +01:00
commit 951f36130a
2 changed files with 63 additions and 2 deletions

View File

@ -255,7 +255,7 @@ class Root(object):
p = os.path.normpath(os.path.join(*l))
return cherrypy.lib.static.serve_file(os.path.join(path_addons, p))
elif len(l) > 1:
for i in range(1, len(l) + 1):
for i in range(len(l), 1, -1):
ps = "/" + "/".join(l[0:i])
if ps in controllers_path:
c = controllers_path[ps]
@ -265,7 +265,7 @@ class Root(object):
if getattr(m, 'exposed', 0):
print "Calling", ps, c, meth, m
return m(**kw)
raise cherrypy.NotFound('/' + '/'.join(l))
else:
raise cherrypy.HTTPRedirect('/base/static/openerp/base.html', 301)
default.exposed = True

View File

@ -1,4 +1,5 @@
# -*- coding: utf-8 -*-
import cherrypy
import mock
import unittest2
import openerpweb.openerpweb
@ -18,3 +19,63 @@ class OpenERPModelTest(unittest2.TestCase):
Model.read([42])
session.execute.assert_called_once_with(
'a.b', 'read', [42])
class FakeController(object):
pass
class DispatcherTest(unittest2.TestCase):
def setUp(self):
controller = FakeController()
self.mock_method = mock.Mock()
controller.method = self.mock_method
self.mock_method.exposed = True
self.mock_index = mock.Mock()
controller.index = self.mock_index
self.mock_index.exposed = True
self.patcher = mock.patch.dict(
openerpweb.openerpweb.controllers_path,
{'/some/controller/path': controller})
self.patcher.start()
controller2 = FakeController()
controller2.index = self.mock_index
self.patcher2 = mock.patch.dict(
openerpweb.openerpweb.controllers_path,
{'/some/other/controller': FakeController(),
'/some/other/controller/2': controller2})
self.patcher2.start()
def tearDown(self):
self.patcher2.stop()
self.patcher.stop()
def test_default_redirect(self):
self.assertRaises(
cherrypy.HTTPRedirect,
openerpweb.openerpweb.Root().default)
def test_serve_static_missing(self):
self.assertRaises(
cherrypy.NotFound,
openerpweb.openerpweb.Root().default,
'does-not-exist', 'static', 'bar')
def test_serve_controller_missing(self):
self.assertRaises(
cherrypy.NotFound,
openerpweb.openerpweb.Root().default,
'controller', 'does', 'not', 'exist')
def test_find_controller_method(self):
openerpweb.openerpweb.Root().default(
'some', 'controller', 'path', 'method')
self.mock_method.assert_called_once_with()
def test_find_controller_index(self):
openerpweb.openerpweb.Root().default(
'some', 'controller', 'path')
self.mock_index.assert_called_once_with()
def test_nested_paths(self):
openerpweb.openerpweb.Root().default(
'some', 'other', 'controller', '2')
self.mock_index.assert_called_once_with()