--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pyramid_cubicweb/tests/test_bw_request.py Thu Sep 18 15:07:02 2014 +0200
@@ -0,0 +1,121 @@
+# -*- coding: utf8 -*-
+from StringIO import StringIO
+
+import webtest
+import pyramid.request
+
+from cubicweb.devtools.webtest import CubicWebTestTC
+
+from pyramid_cubicweb import make_cubicweb_application
+from pyramid_cubicweb.core import CubicWebPyramidRequest
+
+
+class PyramidCWTest(CubicWebTestTC):
+ @classmethod
+ def init_config(cls, config):
+ super(PyramidCWTest, cls).init_config(config)
+ config.global_set_option('https-url', 'https://localhost.local/')
+ config['pyramid-auth-secret'] = 'authsecret'
+ config['pyramid-session-secret'] = 'sessionsecret'
+
+ def setUp(self):
+ # Skip CubicWebTestTC setUp
+ super(CubicWebTestTC, self).setUp()
+ config = make_cubicweb_application(self.config)
+ self.pyr_registry = config.registry
+ self.webapp = webtest.TestApp(config.make_wsgi_app())
+
+
+class WSGIAppTest(PyramidCWTest):
+ def make_request(self, path, environ=None, **kw):
+ r = webtest.app.TestRequest.blank(path, environ, **kw)
+
+ request = pyramid.request.Request(r.environ)
+ request.registry = self.pyr_registry
+
+ return request
+
+ def test_content_type(self):
+ req = CubicWebPyramidRequest(
+ self.make_request('/', {'CONTENT_TYPE': 'text/plain'}))
+
+ self.assertEqual('text/plain', req.get_header('Content-Type'))
+
+ def test_content_body(self):
+ req = CubicWebPyramidRequest(
+ self.make_request('/', {
+ 'CONTENT_LENGTH': 12,
+ 'CONTENT_TYPE': 'text/plain',
+ 'wsgi.input': StringIO('some content')}))
+
+ self.assertEqual('some content', req.content.read())
+
+ def test_http_scheme(self):
+ req = CubicWebPyramidRequest(
+ self.make_request('/', {
+ 'wsgi.url_scheme': 'http'}))
+
+ self.assertFalse(req.https)
+
+ def test_https_scheme(self):
+ req = CubicWebPyramidRequest(
+ self.make_request('/', {
+ 'wsgi.url_scheme': 'https'}))
+
+ self.assertTrue(req.https)
+
+ def test_https_prefix(self):
+ r = self.webapp.get('/https/')
+ self.assertIn('https://', r.body)
+
+ def test_big_content(self):
+ content = 'x'*100001
+
+ req = CubicWebPyramidRequest(
+ self.make_request('/', {
+ 'CONTENT_LENGTH': len(content),
+ 'CONTENT_TYPE': 'text/plain',
+ 'wsgi.input': StringIO(content)}))
+
+ self.assertEqual(content, req.content.read())
+
+ def test_post(self):
+ self.webapp.post(
+ '/',
+ params={'__login': self.admlogin, '__password': self.admpassword})
+
+ def test_get_multiple_variables(self):
+ req = CubicWebPyramidRequest(
+ self.make_request('/?arg=1&arg=2'))
+
+ self.assertEqual([u'1', u'2'], req.form['arg'])
+
+ def test_post_multiple_variables(self):
+ req = CubicWebPyramidRequest(
+ self.make_request('/', POST='arg=1&arg=2'))
+
+ self.assertEqual([u'1', u'2'], req.form['arg'])
+
+ def test_post_files(self):
+ content_type, params = self.webapp.encode_multipart(
+ (), (('filefield', 'aname', 'acontent'),))
+ req = CubicWebPyramidRequest(
+ self.make_request('/', POST=params, content_type=content_type))
+ self.assertIn('filefield', req.form)
+ fieldvalue = req.form['filefield']
+ self.assertEqual(u'aname', fieldvalue[0])
+ self.assertEqual('acontent', fieldvalue[1].read())
+
+ def test_post_unicode_urlencoded(self):
+ params = 'arg=%C3%A9'
+ req = CubicWebPyramidRequest(
+ self.make_request(
+ '/', POST=params,
+ content_type='application/x-www-form-urlencoded'))
+ self.assertEqual(u"é", req.form['arg'])
+
+ @classmethod
+ def init_config(cls, config):
+ super(WSGIAppTest, cls).init_config(config)
+ config.https_uiprops = None
+ config.https_datadir_url = None