From 588c64277429e144a531704833c40ef8c6bd0007 Mon Sep 17 00:00:00 2001 From: Chris McDonough Date: Sun, 21 Jun 2009 18:14:57 +0000 Subject: Make views that do not have a route_name match when any route is used. --- repoze/bfg/request.py | 14 +++---- repoze/bfg/tests/test_request.py | 82 ++++++++++++++++++++++++++++++++++++---- 2 files changed, 82 insertions(+), 14 deletions(-) (limited to 'repoze') diff --git a/repoze/bfg/request.py b/repoze/bfg/request.py index e26ed1b5f..8a07c6b75 100644 --- a/repoze/bfg/request.py +++ b/repoze/bfg/request.py @@ -54,13 +54,13 @@ def named_request_factories(name=None): delete_iface = IDELETERequest head_iface = IHEADRequest else: - default_iface = InterfaceClass('%s_IRequest' % name) - get_iface = InterfaceClass('%s_IGETRequest' % name, (default_iface,)) - post_iface = InterfaceClass('%s_IPOSTRequest' % name, (default_iface,)) - put_iface = InterfaceClass('%s_IPUTRequest' % name, (default_iface,)) - delete_iface = InterfaceClass('%s_IDELETERequest' % name, - (default_iface,)) - head_iface = InterfaceClass('%s_IHEADRequest' % name, (default_iface)) + IC = InterfaceClass + default_iface = IC('%s_IRequest' % name, (IRequest,)) + get_iface = IC('%s_IGETRequest' % name, (IGETRequest,)) + post_iface = IC('%s_IPOSTRequest' % name, (IPOSTRequest,)) + put_iface = IC('%s_IPUTRequest' % name, (IPUTRequest,)) + delete_iface = IC('%s_IDELETERequest' % name, (IDELETERequest,)) + head_iface = IC('%s_IHEADRequest' % name, (IHEADRequest,)) class Request(WebobRequest): implements(default_iface) diff --git a/repoze/bfg/tests/test_request.py b/repoze/bfg/tests/test_request.py index 557e1db71..6855018b8 100644 --- a/repoze/bfg/tests/test_request.py +++ b/repoze/bfg/tests/test_request.py @@ -11,11 +11,7 @@ class TestMakeRequestASCII(unittest.TestCase): self._callFUT(event) self.assertEqual(request.charset, None) -class TestSubclassedRequest(unittest.TestCase): - def _getTargetClass(self): - from repoze.bfg.request import DEFAULT_REQUEST_FACTORIES - return DEFAULT_REQUEST_FACTORIES[None]['factory'] - +class TestRequestSubclass(object): def _makeOne(self, environ): request = self._getTargetClass()(environ) return request @@ -37,6 +33,75 @@ class TestSubclassedRequest(unittest.TestCase): request.charset = None self.assertEqual(request.GET['la'], 'La Pe\xc3\xb1a') + def test_class_implements(self): + from repoze.bfg.interfaces import IRequest + klass = self._getTargetClass() + iface = self._getInterface() + self.assertTrue(iface.implementedBy(klass)) + self.assertTrue(IRequest.implementedBy(klass)) + + def test_instance_provides(self): + from repoze.bfg.interfaces import IRequest + inst = self._makeOne({}) + iface = self._getInterface() + self.assertTrue(iface.providedBy(inst)) + self.assertTrue(IRequest.providedBy(inst)) + + +class Test_Request(TestRequestSubclass, unittest.TestCase): + def _getTargetClass(self): + from repoze.bfg.request import DEFAULT_REQUEST_FACTORIES + return DEFAULT_REQUEST_FACTORIES[None]['factory'] + + def _getInterface(self): + from repoze.bfg.request import DEFAULT_REQUEST_FACTORIES + return DEFAULT_REQUEST_FACTORIES[None]['interface'] + +class Test_GETRequest(TestRequestSubclass, unittest.TestCase): + def _getTargetClass(self): + from repoze.bfg.request import DEFAULT_REQUEST_FACTORIES + return DEFAULT_REQUEST_FACTORIES['GET']['factory'] + + def _getInterface(self): + from repoze.bfg.request import DEFAULT_REQUEST_FACTORIES + return DEFAULT_REQUEST_FACTORIES['GET']['interface'] + +class Test_POSTRequest(TestRequestSubclass, unittest.TestCase): + def _getTargetClass(self): + from repoze.bfg.request import DEFAULT_REQUEST_FACTORIES + return DEFAULT_REQUEST_FACTORIES['POST']['factory'] + + def _getInterface(self): + from repoze.bfg.request import DEFAULT_REQUEST_FACTORIES + return DEFAULT_REQUEST_FACTORIES['POST']['interface'] + +class Test_PUTRequest(TestRequestSubclass, unittest.TestCase): + def _getTargetClass(self): + from repoze.bfg.request import DEFAULT_REQUEST_FACTORIES + return DEFAULT_REQUEST_FACTORIES['PUT']['factory'] + + def _getInterface(self): + from repoze.bfg.request import DEFAULT_REQUEST_FACTORIES + return DEFAULT_REQUEST_FACTORIES['PUT']['interface'] + +class Test_DELETERequest(TestRequestSubclass, unittest.TestCase): + def _getTargetClass(self): + from repoze.bfg.request import DEFAULT_REQUEST_FACTORIES + return DEFAULT_REQUEST_FACTORIES['DELETE']['factory'] + + def _getInterface(self): + from repoze.bfg.request import DEFAULT_REQUEST_FACTORIES + return DEFAULT_REQUEST_FACTORIES['DELETE']['interface'] + +class Test_HEADRequest(TestRequestSubclass, unittest.TestCase): + def _getTargetClass(self): + from repoze.bfg.request import DEFAULT_REQUEST_FACTORIES + return DEFAULT_REQUEST_FACTORIES['HEAD']['factory'] + + def _getInterface(self): + from repoze.bfg.request import DEFAULT_REQUEST_FACTORIES + return DEFAULT_REQUEST_FACTORIES['HEAD']['interface'] + class TestRequestFactory(unittest.TestCase): def _callFUT(self, environ): from repoze.bfg.request import request_factory @@ -142,14 +207,15 @@ class TestNamedRequestFactories(unittest.TestCase): 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') + self.failUnless(named_iface.implementedBy(named_factory)) + self.failUnless(iface.implementedBy(named_factory)) + self.failUnless(IRequest.implementedBy(named_factory)) 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 @@ -171,6 +237,8 @@ class TestNamedRequestFactories(unittest.TestCase): named_iface = factories[alias]['interface'] named_factory = factories[alias]['factory'] self.failUnless(named_iface.implementedBy(named_factory)) + self.failUnless(iface.implementedBy(named_factory)) + self.failUnless(IRequest.implementedBy(named_factory)) class TestDefaultRequestFactories(unittest.TestCase): def test_it(self): -- cgit v1.2.3