cubicweb/web/test/unittest_web.py
changeset 11157 42fa15632493
parent 11156 36252a0c76ec
child 11159 b07406dae25e
equal deleted inserted replaced
11156:36252a0c76ec 11157:42fa15632493
    17 # with CubicWeb.  If not, see <http://www.gnu.org/licenses/>.
    17 # with CubicWeb.  If not, see <http://www.gnu.org/licenses/>.
    18 
    18 
    19 from json import loads
    19 from json import loads
    20 from os.path import join
    20 from os.path import join
    21 import tempfile
    21 import tempfile
       
    22 import hashlib
    22 
    23 
    23 try:
    24 try:
    24     import requests
    25     import requests
    25     assert [int(n) for n in requests.__version__.split('.', 2)][:2] >= [1, 2]
    26     assert [int(n) for n in requests.__version__.split('.', 2)][:2] >= [1, 2]
    26 except (ImportError, AssertionError):
    27 except (ImportError, AssertionError):
    73 
    74 
    74     def _fcontent(self, fname):
    75     def _fcontent(self, fname):
    75         with self._fobject(fname) as f:
    76         with self._fobject(fname) as f:
    76             return f.read()
    77             return f.read()
    77 
    78 
       
    79     def _fhash(self, fname):
       
    80         content = self._fcontent(fname)
       
    81         return hashlib.md5(content).hexdigest()
       
    82 
    78     def test_single_file_upload(self):
    83     def test_single_file_upload(self):
    79         files = {'file': ('schema.py', self._fobject('schema.py'))}
    84         files = {'file': ('schema.py', self._fobject('schema.py'))}
    80         webreq = requests.post(self._post_url, files=files)
    85         webreq = requests.post(self._post_url, files=files)
    81         # check backward compat : a single uploaded file leads to a single
    86         # check backward compat : a single uploaded file leads to a single
    82         # 2-uple in the request form
    87         # 2-uple in the request form
    83         expect = {'fname': u'fileupload',
    88         expect = {'fname': u'fileupload',
    84                   'file': ['schema.py', self._fcontent('schema.py')]}
    89                   'file': ['schema.py', self._fhash('schema.py')]}
    85         self.assertEqual(webreq.status_code, 200)
    90         self.assertEqual(webreq.status_code, 200)
    86         self.assertDictEqual(expect, loads(webreq.text))
    91         self.assertDictEqual(expect, loads(webreq.text))
    87 
    92 
    88     def test_multiple_file_upload(self):
    93     def test_multiple_file_upload(self):
    89         files = [('files', ('schema.py', self._fobject('schema.py'))),
    94         files = [('files', ('schema.py', self._fobject('schema.py'))),
    90                  ('files', ('views.py',  self._fobject('views.py')))]
    95                  ('files', ('views.py',  self._fobject('views.py')))]
    91         webreq = requests.post(self._post_url, files=files,)
    96         webreq = requests.post(self._post_url, files=files,)
    92         expect = {'fname': u'fileupload',
    97         expect = {'fname': u'fileupload',
    93                   'files': [['schema.py', self._fcontent('schema.py')],
    98                   'files': [['schema.py', self._fhash('schema.py')],
    94                             ['views.py', self._fcontent('views.py')]],}
    99                             ['views.py', self._fhash('views.py')]],}
    95         self.assertEqual(webreq.status_code, 200)
   100         self.assertEqual(webreq.status_code, 200)
    96         self.assertDictEqual(expect, loads(webreq.text))
   101         self.assertDictEqual(expect, loads(webreq.text))
    97 
   102 
    98 
   103 
    99 class LanguageTC(CubicWebServerTC):
   104 class LanguageTC(CubicWebServerTC):