author | Julien Cristau <julien.cristau@logilab.fr> |
Thu, 03 Jul 2014 12:18:34 +0200 | |
changeset 9867 | 7f36f31d8828 |
parent 9849 | b18ef631e72c |
child 9882 | 4db650d79e32 |
permissions | -rw-r--r-- |
9849
b18ef631e72c
[webtests/web] use the new connection api
Julien Cristau <julien.cristau@logilab.fr>
parents:
9601
diff
changeset
|
1 |
# copyright 2003-2014 LOGILAB S.A. (Paris, FRANCE), all rights reserved. |
5421
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4212
diff
changeset
|
2 |
# contact http://www.logilab.fr/ -- mailto:contact@logilab.fr |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4212
diff
changeset
|
3 |
# |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4212
diff
changeset
|
4 |
# This file is part of CubicWeb. |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4212
diff
changeset
|
5 |
# |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4212
diff
changeset
|
6 |
# CubicWeb is free software: you can redistribute it and/or modify it under the |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4212
diff
changeset
|
7 |
# terms of the GNU Lesser General Public License as published by the Free |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4212
diff
changeset
|
8 |
# Software Foundation, either version 2.1 of the License, or (at your option) |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4212
diff
changeset
|
9 |
# any later version. |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4212
diff
changeset
|
10 |
# |
5424
8ecbcbff9777
replace logilab-common by CubicWeb in disclaimer
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5421
diff
changeset
|
11 |
# CubicWeb is distributed in the hope that it will be useful, but WITHOUT |
5421
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4212
diff
changeset
|
12 |
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4212
diff
changeset
|
13 |
# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4212
diff
changeset
|
14 |
# details. |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4212
diff
changeset
|
15 |
# |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4212
diff
changeset
|
16 |
# You should have received a copy of the GNU Lesser General Public License along |
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
4212
diff
changeset
|
17 |
# with CubicWeb. If not, see <http://www.gnu.org/licenses/>. |
1977
606923dff11b
big bunch of copyright / docstring update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
1646
diff
changeset
|
18 |
|
9147
01124cfd4b1f
[etwist] fix handling of multiple files per field
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
8728
diff
changeset
|
19 |
from json import loads |
01124cfd4b1f
[etwist] fix handling of multiple files per field
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
8728
diff
changeset
|
20 |
from os.path import join |
01124cfd4b1f
[etwist] fix handling of multiple files per field
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
8728
diff
changeset
|
21 |
|
01124cfd4b1f
[etwist] fix handling of multiple files per field
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
8728
diff
changeset
|
22 |
try: |
01124cfd4b1f
[etwist] fix handling of multiple files per field
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
8728
diff
changeset
|
23 |
import requests |
01124cfd4b1f
[etwist] fix handling of multiple files per field
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
8728
diff
changeset
|
24 |
assert [int(n) for n in requests.__version__.split('.', 2)][:2] >= [1, 2] |
01124cfd4b1f
[etwist] fix handling of multiple files per field
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
8728
diff
changeset
|
25 |
except (ImportError, AssertionError): |
01124cfd4b1f
[etwist] fix handling of multiple files per field
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
8728
diff
changeset
|
26 |
requests = None |
01124cfd4b1f
[etwist] fix handling of multiple files per field
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
8728
diff
changeset
|
27 |
|
1646 | 28 |
from logilab.common.testlib import TestCase, unittest_main |
9147
01124cfd4b1f
[etwist] fix handling of multiple files per field
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
8728
diff
changeset
|
29 |
from cubicweb.devtools.httptest import CubicWebServerTC |
2643
9976f511003b
web test update
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
1977
diff
changeset
|
30 |
from cubicweb.devtools.fake import FakeRequest |
5713
605f571198eb
[web] ajax_replace_url superseed build_ajax_replace_url, more generic and relying on the json controller (closes #750090)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5424
diff
changeset
|
31 |
|
1646 | 32 |
class AjaxReplaceUrlTC(TestCase): |
33 |
||
6595
00cd0b273cf5
[test] fix test to follow recent changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6340
diff
changeset
|
34 |
def test_ajax_replace_url_1(self): |
00cd0b273cf5
[test] fix test to follow recent changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6340
diff
changeset
|
35 |
self._test_arurl("fname=view&rql=Person%20P&vid=list", |
00cd0b273cf5
[test] fix test to follow recent changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6340
diff
changeset
|
36 |
rql='Person P', vid='list') |
00cd0b273cf5
[test] fix test to follow recent changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6340
diff
changeset
|
37 |
|
00cd0b273cf5
[test] fix test to follow recent changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6340
diff
changeset
|
38 |
def test_ajax_replace_url_2(self): |
00cd0b273cf5
[test] fix test to follow recent changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6340
diff
changeset
|
39 |
self._test_arurl("age=12&fname=view&name=bar&rql=Person%20P&vid=oneline", |
00cd0b273cf5
[test] fix test to follow recent changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6340
diff
changeset
|
40 |
rql='Person P', vid='oneline', name='bar', age=12) |
00cd0b273cf5
[test] fix test to follow recent changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6340
diff
changeset
|
41 |
|
00cd0b273cf5
[test] fix test to follow recent changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6340
diff
changeset
|
42 |
def _test_arurl(self, qs, **kwargs): |
2643
9976f511003b
web test update
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
1977
diff
changeset
|
43 |
req = FakeRequest() |
5713
605f571198eb
[web] ajax_replace_url superseed build_ajax_replace_url, more generic and relying on the json controller (closes #750090)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5424
diff
changeset
|
44 |
arurl = req.ajax_replace_url |
1646 | 45 |
# NOTE: for the simplest use cases, we could use doctest |
6595
00cd0b273cf5
[test] fix test to follow recent changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6340
diff
changeset
|
46 |
url = arurl('foo', **kwargs) |
7791
31bb51ea5485
[deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7518
diff
changeset
|
47 |
self.assertTrue(url.startswith('javascript:')) |
31bb51ea5485
[deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7518
diff
changeset
|
48 |
self.assertTrue(url.endswith('()')) |
6595
00cd0b273cf5
[test] fix test to follow recent changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6340
diff
changeset
|
49 |
cbname = url.split()[1][:-2] |
00cd0b273cf5
[test] fix test to follow recent changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6340
diff
changeset
|
50 |
self.assertMultiLineEqual( |
8728
75be9de9d68e
[web] Use the new '/ajax' URL path to access the AjaxController (closes #2758254)
Rémi Cardona <remi.cardona@logilab.fr>
parents:
7791
diff
changeset
|
51 |
'function %s() { $("#foo").loadxhtml("http://testing.fr/cubicweb/ajax?%s",' |
75be9de9d68e
[web] Use the new '/ajax' URL path to access the AjaxController (closes #2758254)
Rémi Cardona <remi.cardona@logilab.fr>
parents:
7791
diff
changeset
|
52 |
'{"pageid": "%s"},"get","replace"); }' % |
75be9de9d68e
[web] Use the new '/ajax' URL path to access the AjaxController (closes #2758254)
Rémi Cardona <remi.cardona@logilab.fr>
parents:
7791
diff
changeset
|
53 |
(cbname, qs, req.pageid), |
6595
00cd0b273cf5
[test] fix test to follow recent changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6340
diff
changeset
|
54 |
req.html_headers.post_inlined_scripts[0]) |
1646 | 55 |
|
9147
01124cfd4b1f
[etwist] fix handling of multiple files per field
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
8728
diff
changeset
|
56 |
|
01124cfd4b1f
[etwist] fix handling of multiple files per field
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
8728
diff
changeset
|
57 |
class FileUploadTC(CubicWebServerTC): |
01124cfd4b1f
[etwist] fix handling of multiple files per field
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
8728
diff
changeset
|
58 |
|
01124cfd4b1f
[etwist] fix handling of multiple files per field
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
8728
diff
changeset
|
59 |
def setUp(self): |
01124cfd4b1f
[etwist] fix handling of multiple files per field
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
8728
diff
changeset
|
60 |
"Skip whole test class if a suitable requests module is not available" |
01124cfd4b1f
[etwist] fix handling of multiple files per field
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
8728
diff
changeset
|
61 |
if requests is None: |
01124cfd4b1f
[etwist] fix handling of multiple files per field
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
8728
diff
changeset
|
62 |
self.skipTest('Python ``requests`` module is not available') |
01124cfd4b1f
[etwist] fix handling of multiple files per field
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
8728
diff
changeset
|
63 |
super(FileUploadTC, self).setUp() |
01124cfd4b1f
[etwist] fix handling of multiple files per field
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
8728
diff
changeset
|
64 |
|
01124cfd4b1f
[etwist] fix handling of multiple files per field
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
8728
diff
changeset
|
65 |
@property |
01124cfd4b1f
[etwist] fix handling of multiple files per field
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
8728
diff
changeset
|
66 |
def _post_url(self): |
9849
b18ef631e72c
[webtests/web] use the new connection api
Julien Cristau <julien.cristau@logilab.fr>
parents:
9601
diff
changeset
|
67 |
with self.admin_access.web_request() as req: |
b18ef631e72c
[webtests/web] use the new connection api
Julien Cristau <julien.cristau@logilab.fr>
parents:
9601
diff
changeset
|
68 |
return req.build_url('ajax', fname='fileupload') |
9147
01124cfd4b1f
[etwist] fix handling of multiple files per field
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
8728
diff
changeset
|
69 |
|
01124cfd4b1f
[etwist] fix handling of multiple files per field
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
8728
diff
changeset
|
70 |
def _fobject(self, fname): |
01124cfd4b1f
[etwist] fix handling of multiple files per field
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
8728
diff
changeset
|
71 |
return open(join(self.datadir, fname), 'rb') |
01124cfd4b1f
[etwist] fix handling of multiple files per field
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
8728
diff
changeset
|
72 |
|
01124cfd4b1f
[etwist] fix handling of multiple files per field
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
8728
diff
changeset
|
73 |
def _fcontent(self, fname): |
01124cfd4b1f
[etwist] fix handling of multiple files per field
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
8728
diff
changeset
|
74 |
return self._fobject(fname).read() |
01124cfd4b1f
[etwist] fix handling of multiple files per field
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
8728
diff
changeset
|
75 |
|
01124cfd4b1f
[etwist] fix handling of multiple files per field
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
8728
diff
changeset
|
76 |
def test_single_file_upload(self): |
01124cfd4b1f
[etwist] fix handling of multiple files per field
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
8728
diff
changeset
|
77 |
files = {'file': ('schema.py', self._fobject('schema.py'))} |
01124cfd4b1f
[etwist] fix handling of multiple files per field
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
8728
diff
changeset
|
78 |
webreq = requests.post(self._post_url, files=files) |
01124cfd4b1f
[etwist] fix handling of multiple files per field
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
8728
diff
changeset
|
79 |
# check backward compat : a single uploaded file leads to a single |
01124cfd4b1f
[etwist] fix handling of multiple files per field
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
8728
diff
changeset
|
80 |
# 2-uple in the request form |
01124cfd4b1f
[etwist] fix handling of multiple files per field
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
8728
diff
changeset
|
81 |
expect = {'fname': u'fileupload', |
01124cfd4b1f
[etwist] fix handling of multiple files per field
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
8728
diff
changeset
|
82 |
'file': ['schema.py', self._fcontent('schema.py')]} |
01124cfd4b1f
[etwist] fix handling of multiple files per field
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
8728
diff
changeset
|
83 |
self.assertEqual(webreq.status_code, 200) |
01124cfd4b1f
[etwist] fix handling of multiple files per field
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
8728
diff
changeset
|
84 |
self.assertDictEqual(expect, loads(webreq.content)) |
01124cfd4b1f
[etwist] fix handling of multiple files per field
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
8728
diff
changeset
|
85 |
|
01124cfd4b1f
[etwist] fix handling of multiple files per field
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
8728
diff
changeset
|
86 |
def test_multiple_file_upload(self): |
01124cfd4b1f
[etwist] fix handling of multiple files per field
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
8728
diff
changeset
|
87 |
files = [('files', ('schema.py', self._fobject('schema.py'))), |
01124cfd4b1f
[etwist] fix handling of multiple files per field
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
8728
diff
changeset
|
88 |
('files', ('views.py', self._fobject('views.py')))] |
01124cfd4b1f
[etwist] fix handling of multiple files per field
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
8728
diff
changeset
|
89 |
webreq = requests.post(self._post_url, files=files,) |
01124cfd4b1f
[etwist] fix handling of multiple files per field
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
8728
diff
changeset
|
90 |
expect = {'fname': u'fileupload', |
01124cfd4b1f
[etwist] fix handling of multiple files per field
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
8728
diff
changeset
|
91 |
'files': [['schema.py', self._fcontent('schema.py')], |
01124cfd4b1f
[etwist] fix handling of multiple files per field
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
8728
diff
changeset
|
92 |
['views.py', self._fcontent('views.py')]],} |
01124cfd4b1f
[etwist] fix handling of multiple files per field
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
8728
diff
changeset
|
93 |
self.assertEqual(webreq.status_code, 200) |
01124cfd4b1f
[etwist] fix handling of multiple files per field
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
8728
diff
changeset
|
94 |
self.assertDictEqual(expect, loads(webreq.content)) |
01124cfd4b1f
[etwist] fix handling of multiple files per field
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
8728
diff
changeset
|
95 |
|
9601
e5a80bd337e8
[web] fix language negotiation
Julien Cristau <julien.cristau@logilab.fr>
parents:
9147
diff
changeset
|
96 |
class LanguageTC(CubicWebServerTC): |
e5a80bd337e8
[web] fix language negotiation
Julien Cristau <julien.cristau@logilab.fr>
parents:
9147
diff
changeset
|
97 |
|
e5a80bd337e8
[web] fix language negotiation
Julien Cristau <julien.cristau@logilab.fr>
parents:
9147
diff
changeset
|
98 |
def test_language_neg(self): |
e5a80bd337e8
[web] fix language negotiation
Julien Cristau <julien.cristau@logilab.fr>
parents:
9147
diff
changeset
|
99 |
headers = {'Accept-Language': 'fr'} |
e5a80bd337e8
[web] fix language negotiation
Julien Cristau <julien.cristau@logilab.fr>
parents:
9147
diff
changeset
|
100 |
webreq = self.web_request(headers=headers) |
e5a80bd337e8
[web] fix language negotiation
Julien Cristau <julien.cristau@logilab.fr>
parents:
9147
diff
changeset
|
101 |
self.assertIn('lang="fr"', webreq.read()) |
e5a80bd337e8
[web] fix language negotiation
Julien Cristau <julien.cristau@logilab.fr>
parents:
9147
diff
changeset
|
102 |
headers = {'Accept-Language': 'en'} |
e5a80bd337e8
[web] fix language negotiation
Julien Cristau <julien.cristau@logilab.fr>
parents:
9147
diff
changeset
|
103 |
webreq = self.web_request(headers=headers) |
e5a80bd337e8
[web] fix language negotiation
Julien Cristau <julien.cristau@logilab.fr>
parents:
9147
diff
changeset
|
104 |
self.assertIn('lang="en"', webreq.read()) |
e5a80bd337e8
[web] fix language negotiation
Julien Cristau <julien.cristau@logilab.fr>
parents:
9147
diff
changeset
|
105 |
|
9147
01124cfd4b1f
[etwist] fix handling of multiple files per field
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents:
8728
diff
changeset
|
106 |
|
1646 | 107 |
if __name__ == '__main__': |
108 |
unittest_main() |