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): |