From 49bcc8e86ded6785c3bddd6972f870b2d2d858a8 Mon Sep 17 00:00:00 2001 From: Marc Abramowitz Date: Mon, 10 Mar 2014 09:15:08 -0700 Subject: Add integration tests for Unicode in URL --- pyramid/tests/test_integration.py | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/pyramid/tests/test_integration.py b/pyramid/tests/test_integration.py index 9d3a9e004..bc22c2e54 100644 --- a/pyramid/tests/test_integration.py +++ b/pyramid/tests/test_integration.py @@ -640,6 +640,44 @@ class RendererScanAppTest(IntegrationBase, unittest.TestCase): res = testapp.get('/two', status=200) self.assertTrue(b'Two!' in res.body) +class UnicodeInURLTest(unittest.TestCase): + def _makeConfig(self): + from pyramid.config import Configurator + config = Configurator() + return config + + def _makeTestApp(self, config): + from webtest import TestApp + app = config.make_wsgi_app() + return TestApp(app) + + def test_unicode_in_url_404(self): + request_path = b'/avalia%C3%A7%C3%A3o_participante/' + request_path_unicode = u'/avalia\xe7\xe3o_participante/' + + config = self._makeConfig() + testapp = self._makeTestApp(config) + + res = testapp.get(request_path, status=404) + self.assertTrue(request_path_unicode in res.text) + + def test_unicode_in_url_200(self): + request_path = b'/avalia%C3%A7%C3%A3o_participante' + request_path_unicode = u'/avalia\xe7\xe3o_participante' + + def myview(request): + return 'XXX' + + config = self._makeConfig() + config.add_route('myroute', request_path_unicode) + config.add_view(myview, route_name='myroute', renderer='json') + testapp = self._makeTestApp(config) + + res = testapp.get(request_path, status=200) + + self.assertEqual(res.text, '"XXX"') + + class AcceptContentTypeTest(unittest.TestCase): def setUp(self): def hello_view(request): -- cgit v1.2.3 From 0c425da09d966bafd2f4043fa8919f3da4d8abc4 Mon Sep 17 00:00:00 2001 From: Marc Abramowitz Date: Tue, 11 Mar 2014 08:27:56 -0700 Subject: Remove 'b'; WebTest or WebOb doesn't like Python 3 bytes for URLs --- pyramid/tests/test_integration.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyramid/tests/test_integration.py b/pyramid/tests/test_integration.py index bc22c2e54..48199c419 100644 --- a/pyramid/tests/test_integration.py +++ b/pyramid/tests/test_integration.py @@ -652,7 +652,7 @@ class UnicodeInURLTest(unittest.TestCase): return TestApp(app) def test_unicode_in_url_404(self): - request_path = b'/avalia%C3%A7%C3%A3o_participante/' + request_path = '/avalia%C3%A7%C3%A3o_participante/' request_path_unicode = u'/avalia\xe7\xe3o_participante/' config = self._makeConfig() @@ -662,7 +662,7 @@ class UnicodeInURLTest(unittest.TestCase): self.assertTrue(request_path_unicode in res.text) def test_unicode_in_url_200(self): - request_path = b'/avalia%C3%A7%C3%A3o_participante' + request_path = '/avalia%C3%A7%C3%A3o_participante' request_path_unicode = u'/avalia\xe7\xe3o_participante' def myview(request): -- cgit v1.2.3 From bc87edd3d8df7c5bd4c8d267c626f4fd22ef7443 Mon Sep 17 00:00:00 2001 From: Marc Abramowitz Date: Tue, 11 Mar 2014 10:10:10 -0700 Subject: Convert from u prefix to byte string and decode because the u prefix is not supported in Python 3.2 --- pyramid/tests/test_integration.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pyramid/tests/test_integration.py b/pyramid/tests/test_integration.py index 48199c419..0ab18de7a 100644 --- a/pyramid/tests/test_integration.py +++ b/pyramid/tests/test_integration.py @@ -652,8 +652,8 @@ class UnicodeInURLTest(unittest.TestCase): return TestApp(app) def test_unicode_in_url_404(self): - request_path = '/avalia%C3%A7%C3%A3o_participante/' - request_path_unicode = u'/avalia\xe7\xe3o_participante/' + request_path = '/avalia%C3%A7%C3%A3o_participante' + request_path_unicode = b'/avalia\xc3\xa7\xc3\xa3o_participante'.decode('utf-8') config = self._makeConfig() testapp = self._makeTestApp(config) @@ -663,7 +663,7 @@ class UnicodeInURLTest(unittest.TestCase): def test_unicode_in_url_200(self): request_path = '/avalia%C3%A7%C3%A3o_participante' - request_path_unicode = u'/avalia\xe7\xe3o_participante' + request_path_unicode = b'/avalia\xc3\xa7\xc3\xa3o_participante'.decode('utf-8') def myview(request): return 'XXX' -- cgit v1.2.3 From a99abf808a15fbc02da4c27ab7d46d03668b62ed Mon Sep 17 00:00:00 2001 From: Marc Abramowitz Date: Tue, 11 Mar 2014 11:12:13 -0700 Subject: test_unicode_in_url_404: Add comment to clarify why request_path_unicode is expected to be in res.txt --- pyramid/tests/test_integration.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pyramid/tests/test_integration.py b/pyramid/tests/test_integration.py index 0ab18de7a..35648ed38 100644 --- a/pyramid/tests/test_integration.py +++ b/pyramid/tests/test_integration.py @@ -659,6 +659,10 @@ class UnicodeInURLTest(unittest.TestCase): testapp = self._makeTestApp(config) res = testapp.get(request_path, status=404) + + # Pyramid default 404 handler outputs: + # u'404 Not Found\n\nThe resource could not be found.\n\n\n' + # u'/avalia\xe7\xe3o_participante\n\n' self.assertTrue(request_path_unicode in res.text) def test_unicode_in_url_200(self): -- cgit v1.2.3