summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Anderson <sontek@gmail.com>2015-02-05 15:40:52 -0800
committerJohn Anderson <sontek@gmail.com>2015-02-05 15:40:52 -0800
commit0b03c334dfb219738929d39d7dda4a84a30c251d (patch)
tree4bec1b2ef2ccfe567b92f95c1b55e4e54b6997ab
parent85d801817e2137848a3ccb4303b88ace063a81d5 (diff)
downloadpyramid-0b03c334dfb219738929d39d7dda4a84a30c251d.tar.gz
pyramid-0b03c334dfb219738929d39d7dda4a84a30c251d.tar.bz2
pyramid-0b03c334dfb219738929d39d7dda4a84a30c251d.zip
Add tests to verify view lookup with multiple inheritance
-rw-r--r--pyramid/tests/test_config/test_views.py72
1 files changed, 72 insertions, 0 deletions
diff --git a/pyramid/tests/test_config/test_views.py b/pyramid/tests/test_config/test_views.py
index b0d03fb72..a83a25e58 100644
--- a/pyramid/tests/test_config/test_views.py
+++ b/pyramid/tests/test_config/test_views.py
@@ -1007,6 +1007,78 @@ class TestViewsConfigurationMixin(unittest.TestCase):
request.params = {'param':'1'}
self.assertEqual(wrapper(ctx, request), 'view8')
+ def test_view_with_most_specific_predicate(self):
+ from pyramid.renderers import null_renderer as nr
+ from pyramid.router import Router
+
+ class OtherBase(object): pass
+ class Int1(object): pass
+ class Int2(object): pass
+
+ class Resource(OtherBase, Int1, Int2):
+ def __init__(self, request): pass
+
+ def unknown(context, request): return 'unknown'
+ def view(context, request): return 'hello'
+
+ config = self._makeOne(autocommit=True)
+ config.add_route('root', '/', factory=Resource)
+ config.add_view(unknown, route_name='root', renderer=nr)
+ config.add_view(
+ view, renderer=nr, route_name='root',
+ context=Int1, request_method='GET'
+ )
+ config.add_view(
+ view=view, renderer=nr, route_name='root',
+ context=Int2, request_method='POST'
+ )
+ request = self._makeRequest(config)
+ request.method = 'POST'
+ request.params = {}
+ router = Router(config.registry)
+ response = router.handle_request(request)
+ self.assertEqual(response, 'hello')
+
+ def test_view_with_most_specific_predicate_with_mismatch(self):
+ from pyramid.renderers import null_renderer as nr
+ from pyramid.router import Router
+
+ class OtherBase(object): pass
+ class Int1(object): pass
+ class Int2(object): pass
+
+ class Resource(OtherBase, Int1, Int2):
+ def __init__(self, request): pass
+
+ def unknown(context, request): return 'unknown'
+ def view(context, request): return 'hello'
+
+ config = self._makeOne(autocommit=True)
+ config.add_route('root', '/', factory=Resource)
+
+ config.add_view(
+ unknown,
+ route_name='root',
+ renderer=nr,
+ request_method=('POST',),
+ xhr=True,
+ )
+
+ config.add_view(
+ view, renderer=nr, route_name='root',
+ context=Int1, request_method='GET'
+ )
+ config.add_view(
+ view=view, renderer=nr, route_name='root',
+ context=Int2, request_method='POST'
+ )
+ request = self._makeRequest(config)
+ request.method = 'POST'
+ request.params = {}
+ router = Router(config.registry)
+ response = router.handle_request(request)
+ self.assertEqual(response, 'hello')
+
def test_add_view_multiview___discriminator__(self):
from pyramid.renderers import null_renderer
from zope.interface import Interface