summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--pyramid/tests/test_integration.py104
1 files changed, 68 insertions, 36 deletions
diff --git a/pyramid/tests/test_integration.py b/pyramid/tests/test_integration.py
index 01708eb1b..1bf2abb4f 100644
--- a/pyramid/tests/test_integration.py
+++ b/pyramid/tests/test_integration.py
@@ -16,6 +16,7 @@ from pyramid.compat import (
)
from zope.interface import Interface
+from webtest import TestApp
# 5 years from now (more or less)
fiveyrsfuture = datetime.datetime.utcnow() + datetime.timedelta(5*365)
@@ -65,7 +66,6 @@ class IntegrationBase(object):
package=self.package)
config.include(self.package)
app = config.make_wsgi_app()
- from webtest import TestApp
self.testapp = TestApp(app)
self.config = config
@@ -482,7 +482,6 @@ class TestConflictApp(unittest.TestCase):
config = self._makeConfig()
config.include(self.package)
app = config.make_wsgi_app()
- from webtest import TestApp
self.testapp = TestApp(app)
res = self.testapp.get('/')
self.assertTrue(b'a view' in res.body)
@@ -497,7 +496,6 @@ class TestConflictApp(unittest.TestCase):
return Response('this view')
config.add_view(thisview)
app = config.make_wsgi_app()
- from webtest import TestApp
self.testapp = TestApp(app)
res = self.testapp.get('/')
self.assertTrue(b'this view' in res.body)
@@ -510,7 +508,6 @@ class TestConflictApp(unittest.TestCase):
return Response('this view')
config.add_view(thisview, route_name='aroute')
app = config.make_wsgi_app()
- from webtest import TestApp
self.testapp = TestApp(app)
res = self.testapp.get('/route')
self.assertTrue(b'this view' in res.body)
@@ -519,7 +516,6 @@ class TestConflictApp(unittest.TestCase):
config = self._makeConfig()
config.include(self.package)
app = config.make_wsgi_app()
- from webtest import TestApp
self.testapp = TestApp(app)
res = self.testapp.get('/protected', status=403)
self.assertTrue(b'403 Forbidden' in res.body)
@@ -531,7 +527,6 @@ class TestConflictApp(unittest.TestCase):
config.set_authorization_policy(DummySecurityPolicy('fred'))
config.set_authentication_policy(DummySecurityPolicy(permissive=True))
app = config.make_wsgi_app()
- from webtest import TestApp
self.testapp = TestApp(app)
res = self.testapp.get('/protected', status=200)
self.assertTrue('protected view' in res)
@@ -543,7 +538,6 @@ class ImperativeIncludeConfigurationTest(unittest.TestCase):
from pyramid.tests.pkgs.includeapp1.root import configure
configure(config)
app = config.make_wsgi_app()
- from webtest import TestApp
self.testapp = TestApp(app)
self.config = config
@@ -567,7 +561,6 @@ class SelfScanAppTest(unittest.TestCase):
from pyramid.tests.test_config.pkgs.selfscan import main
config = main()
app = config.make_wsgi_app()
- from webtest import TestApp
self.testapp = TestApp(app)
self.config = config
@@ -587,7 +580,6 @@ class WSGIApp2AppTest(unittest.TestCase):
from pyramid.tests.pkgs.wsgiapp2app import main
config = main()
app = config.make_wsgi_app()
- from webtest import TestApp
self.testapp = TestApp(app)
self.config = config
@@ -603,7 +595,6 @@ class SubrequestAppTest(unittest.TestCase):
from pyramid.tests.pkgs.subrequestapp import main
config = main()
app = config.make_wsgi_app()
- from webtest import TestApp
self.testapp = TestApp(app)
self.config = config
@@ -635,7 +626,6 @@ class RendererScanAppTest(IntegrationBase, unittest.TestCase):
def test_rescan(self):
self.config.scan('pyramid.tests.pkgs.rendererscanapp')
app = self.config.make_wsgi_app()
- from webtest import TestApp
testapp = TestApp(app)
res = testapp.get('/one', status=200)
self.assertTrue(b'One!' in res.body)
@@ -649,7 +639,6 @@ class UnicodeInURLTest(unittest.TestCase):
return config
def _makeTestApp(self, config):
- from webtest import TestApp
app = config.make_wsgi_app()
return TestApp(app)
@@ -685,43 +674,90 @@ class UnicodeInURLTest(unittest.TestCase):
class AcceptContentTypeTest(unittest.TestCase):
- def setUp(self):
+ def _makeConfig(self):
def hello_view(request):
return {'message': 'Hello!'}
from pyramid.config import Configurator
config = Configurator()
config.add_route('hello', '/hello')
- config.add_view(hello_view, route_name='hello', accept='text/plain', renderer='string')
- config.add_view(hello_view, route_name='hello', accept='application/json', renderer='json')
+ config.add_view(hello_view, route_name='hello',
+ accept='text/plain', renderer='string')
+ config.add_view(hello_view, route_name='hello',
+ accept='application/json', renderer='json')
+ def hello_fallback_view(request):
+ request.response.content_type = 'text/x-fallback'
+ return 'hello fallback'
+ config.add_view(hello_fallback_view, route_name='hello',
+ renderer='string')
+ return config
+
+ def _makeTestApp(self, config):
app = config.make_wsgi_app()
- from webtest import TestApp
- self.testapp = TestApp(app)
+ return TestApp(app)
def tearDown(self):
import pyramid.config
- pyramid.config.global_registries.empty()
+ pyramid.config.global_registries.empty()
- def test_ordering(self):
- res = self.testapp.get('/hello', headers={'Accept': 'application/json; q=1.0, text/plain; q=0.9'}, status=200)
+ def test_client_side_ordering(self):
+ config = self._makeConfig()
+ app = self._makeTestApp(config)
+ res = app.get('/hello', headers={
+ 'Accept': 'application/json; q=1.0, text/plain; q=0.9',
+ }, status=200)
self.assertEqual(res.content_type, 'application/json')
- res = self.testapp.get('/hello', headers={'Accept': 'text/plain; q=0.9, application/json; q=1.0'}, status=200)
+ res = app.get('/hello', headers={
+ 'Accept': 'text/plain; q=0.9, application/json; q=1.0',
+ }, status=200)
self.assertEqual(res.content_type, 'application/json')
-
- def test_wildcards(self):
- res = self.testapp.get('/hello', headers={'Accept': 'application/*'}, status=200)
+ res = app.get('/hello', headers={'Accept': 'application/*'}, status=200)
self.assertEqual(res.content_type, 'application/json')
- res = self.testapp.get('/hello', headers={'Accept': 'text/*'}, status=200)
- self.assertEqual(res.content_type, 'text/plain')
- res = self.testapp.get('/hello', headers={'Accept': '*/*'}, status=200)
+ res = app.get('/hello', headers={'Accept': 'text/*'}, status=200)
self.assertEqual(res.content_type, 'text/plain')
+ res = app.get('/hello', headers={'Accept': 'something/else'}, status=200)
+ self.assertEqual(res.content_type, 'text/x-fallback')
- def test_no_accept(self):
- res = self.testapp.get('/hello', status=200)
+ def test_default_server_side_ordering(self):
+ config = self._makeConfig()
+ app = self._makeTestApp(config)
+ res = app.get('/hello', headers={
+ 'Accept': 'application/json, text/plain',
+ }, status=200)
self.assertEqual(res.content_type, 'text/plain')
-
- def test_invalid_accept(self):
- res = self.testapp.get('/hello', headers={'Accept': 'foo'}, status=200)
+ res = app.get('/hello', headers={
+ 'Accept': 'text/plain, application/json',
+ }, status=200)
+ self.assertEqual(res.content_type, 'text/plain')
+ res = app.get('/hello', headers={'Accept': '*/*'}, status=200)
self.assertEqual(res.content_type, 'text/plain')
+ res = app.get('/hello', status=200)
+ self.assertEqual(res.content_type, 'text/plain')
+ res = app.get('/hello', headers={'Accept': 'invalid'}, status=200)
+ self.assertEqual(res.content_type, 'text/plain')
+ res = app.get('/hello', headers={'Accept': 'something/else'}, status=200)
+ self.assertEqual(res.content_type, 'text/x-fallback')
+
+ def test_custom_server_side_ordering(self):
+ config = self._makeConfig()
+ config.add_accept_view_order(
+ 'application/json', weighs_more_than='text/plain')
+ app = self._makeTestApp(config)
+ res = app.get('/hello', headers={
+ 'Accept': 'application/json, text/plain',
+ }, status=200)
+ self.assertEqual(res.content_type, 'application/json')
+ res = app.get('/hello', headers={
+ 'Accept': 'text/plain, application/json',
+ }, status=200)
+ self.assertEqual(res.content_type, 'application/json')
+ res = app.get('/hello', headers={'Accept': '*/*'}, status=200)
+ self.assertEqual(res.content_type, 'application/json')
+ res = app.get('/hello', status=200)
+ self.assertEqual(res.content_type, 'application/json')
+ res = app.get('/hello', headers={'Accept': 'invalid'}, status=200)
+ self.assertEqual(res.content_type, 'application/json')
+ res = app.get('/hello', headers={'Accept': 'something/else'}, status=200)
+ self.assertEqual(res.content_type, 'text/x-fallback')
class AddViewAcceptArgMediaRangeAllTest(unittest.TestCase):
def setUp(self):
@@ -734,7 +770,6 @@ class AddViewAcceptArgMediaRangeAllTest(unittest.TestCase):
view, route_name='root', accept='*/*', renderer='string',
)
app = config.make_wsgi_app()
- from webtest import TestApp
self.testapp = TestApp(app)
def tearDown(self):
@@ -788,7 +823,6 @@ class AddViewAcceptArgMediaRangeAllSubtypesOfTypeTest(unittest.TestCase):
view, route_name='root', accept='text/*', renderer='string',
)
app = config.make_wsgi_app()
- from webtest import TestApp
self.testapp = TestApp(app)
def tearDown(self):
@@ -843,7 +877,6 @@ class AddRouteAcceptArgMediaRangeAllTest(unittest.TestCase):
config.add_route('root', '/', accept='*/*')
config.add_view(view, route_name='root', renderer='string')
app = config.make_wsgi_app()
- from webtest import TestApp
self.testapp = TestApp(app)
def tearDown(self):
@@ -895,7 +928,6 @@ class AddRouteAcceptArgMediaRangeAllSubtypesOfTypeTest(unittest.TestCase):
config.add_route('root', '/', accept='text/*')
config.add_view(view, route_name='root', renderer='string')
app = config.make_wsgi_app()
- from webtest import TestApp
self.testapp = TestApp(app)
def tearDown(self):