cubicweb/wsgi/test/unittest_wsgi.py
changeset 11057 0b59724cb3f2
parent 11017 3dfed980071c
child 11913 4516c3956d46
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cubicweb/wsgi/test/unittest_wsgi.py	Sat Jan 16 13:48:51 2016 +0100
@@ -0,0 +1,116 @@
+# encoding=utf-8
+
+import webtest.app
+from io import BytesIO
+
+from cubicweb.devtools.webtest import CubicWebTestTC
+
+from cubicweb.wsgi.request import CubicWebWsgiRequest
+from cubicweb.multipart import MultipartError
+
+
+class WSGIAppTC(CubicWebTestTC):
+    def test_content_type(self):
+        r = webtest.app.TestRequest.blank('/', {'CONTENT_TYPE': 'text/plain'})
+
+        req = CubicWebWsgiRequest(r.environ, self.vreg)
+
+        self.assertEqual('text/plain', req.get_header('Content-Type'))
+
+    def test_content_body(self):
+        r = webtest.app.TestRequest.blank('/', {
+            'CONTENT_LENGTH': 12,
+            'CONTENT_TYPE': 'text/plain',
+            'wsgi.input': BytesIO(b'some content')})
+
+        req = CubicWebWsgiRequest(r.environ, self.vreg)
+
+        self.assertEqual(b'some content', req.content.read())
+
+    def test_http_scheme(self):
+        r = webtest.app.TestRequest.blank('/', {
+            'wsgi.url_scheme': 'http'})
+
+        req = CubicWebWsgiRequest(r.environ, self.vreg)
+
+        self.assertFalse(req.https)
+
+    def test_https_scheme(self):
+        r = webtest.app.TestRequest.blank('/', {
+            'wsgi.url_scheme': 'https'})
+
+        req = CubicWebWsgiRequest(r.environ, self.vreg)
+
+        self.assertTrue(req.https)
+
+    def test_https_prefix(self):
+        r = webtest.app.TestRequest.blank('/https/', {
+            'wsgi.url_scheme': 'http'})
+
+        req = CubicWebWsgiRequest(r.environ, self.vreg)
+
+        self.assertTrue(req.https)
+
+    def test_big_content(self):
+        content = b'x'*100001
+        r = webtest.app.TestRequest.blank('/', {
+            'CONTENT_LENGTH': len(content),
+            'CONTENT_TYPE': 'text/plain',
+            'wsgi.input': BytesIO(content)})
+
+        req = CubicWebWsgiRequest(r.environ, self.vreg)
+
+        self.assertEqual(content, req.content.read())
+
+    def test_post(self):
+        self.webapp.post(
+            '/',
+            params={'__login': self.admlogin, '__password': self.admpassword})
+
+    def test_post_bad_form(self):
+        with self.assertRaises(MultipartError):
+            self.webapp.post(
+                '/',
+                params='badcontent',
+                headers={'Content-Type': 'multipart/form-data'})
+
+    def test_post_non_form(self):
+        self.webapp.post(
+            '/',
+            params='{}',
+            headers={'Content-Type': 'application/json'})
+
+    def test_get_multiple_variables(self):
+        r = webtest.app.TestRequest.blank('/?arg=1&arg=2')
+        req = CubicWebWsgiRequest(r.environ, self.vreg)
+
+        self.assertEqual([u'1', u'2'], req.form['arg'])
+
+    def test_post_multiple_variables(self):
+        r = webtest.app.TestRequest.blank('/', POST='arg=1&arg=2')
+        req = CubicWebWsgiRequest(r.environ, self.vreg)
+
+        self.assertEqual([u'1', u'2'], req.form['arg'])
+
+    def test_post_files(self):
+        content_type, params = self.webapp.encode_multipart(
+            (), (('filefield', 'aname', b'acontent'),))
+        r = webtest.app.TestRequest.blank(
+            '/', POST=params, content_type=content_type)
+        req = CubicWebWsgiRequest(r.environ, self.vreg)
+        self.assertIn('filefield', req.form)
+        fieldvalue = req.form['filefield']
+        self.assertEqual(u'aname', fieldvalue[0])
+        self.assertEqual(b'acontent', fieldvalue[1].read())
+
+    def test_post_unicode_urlencoded(self):
+        params = 'arg=%C3%A9'
+        r = webtest.app.TestRequest.blank(
+            '/', POST=params, content_type='application/x-www-form-urlencoded')
+        req = CubicWebWsgiRequest(r.environ, self.vreg)
+        self.assertEqual(u"é", req.form['arg'])
+
+
+if __name__ == '__main__':
+    import unittest
+    unittest.main()