cubicweb/web/test/unittest_web.py
author Julien Cristau <julien.cristau@logilab.fr>
Mon, 08 Feb 2016 15:37:52 +0100
changeset 11157 42fa15632493
parent 11156 36252a0c76ec
child 11159 b07406dae25e
permissions -rw-r--r--
[web/test] return the hash of uploaded files in FileUploadTC instead of their contents json must be unicode, which doesn't go well with arbitrary file contents. Compute the file hash instead, as we know the hexdigest is (ascii) text.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
9882
4db650d79e32 [test] Fix the query-log-file test
Julien Cristau <julien.cristau@logilab.fr>
parents: 9849
diff changeset
    21
import tempfile
11157
42fa15632493 [web/test] return the hash of uploaded files in FileUploadTC instead of their contents
Julien Cristau <julien.cristau@logilab.fr>
parents: 11156
diff changeset
    22
import hashlib
9147
01124cfd4b1f [etwist] fix handling of multiple files per field
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8728
diff changeset
    23
01124cfd4b1f [etwist] fix handling of multiple files per field
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8728
diff changeset
    24
try:
01124cfd4b1f [etwist] fix handling of multiple files per field
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8728
diff changeset
    25
    import requests
01124cfd4b1f [etwist] fix handling of multiple files per field
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8728
diff changeset
    26
    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
    27
except (ImportError, AssertionError):
01124cfd4b1f [etwist] fix handling of multiple files per field
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8728
diff changeset
    28
    requests = None
01124cfd4b1f [etwist] fix handling of multiple files per field
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8728
diff changeset
    29
1646
88182252fd11 fix tests, cleanup
sylvain.thenault@logilab.fr
parents:
diff changeset
    30
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
    31
from cubicweb.devtools.httptest import CubicWebServerTC
2643
9976f511003b web test update
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
    32
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
    33
1646
88182252fd11 fix tests, cleanup
sylvain.thenault@logilab.fr
parents:
diff changeset
    34
class AjaxReplaceUrlTC(TestCase):
88182252fd11 fix tests, cleanup
sylvain.thenault@logilab.fr
parents:
diff changeset
    35
6595
00cd0b273cf5 [test] fix test to follow recent changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6340
diff changeset
    36
    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
    37
        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
    38
                         rql='Person P', vid='list')
00cd0b273cf5 [test] fix test to follow recent changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6340
diff changeset
    39
00cd0b273cf5 [test] fix test to follow recent changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6340
diff changeset
    40
    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
    41
        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
    42
                         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
    43
00cd0b273cf5 [test] fix test to follow recent changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6340
diff changeset
    44
    def _test_arurl(self, qs, **kwargs):
2643
9976f511003b web test update
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
    45
        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
    46
        arurl = req.ajax_replace_url
1646
88182252fd11 fix tests, cleanup
sylvain.thenault@logilab.fr
parents:
diff changeset
    47
        # 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
    48
        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
    49
        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
    50
        self.assertTrue(url.endswith('()'))
6595
00cd0b273cf5 [test] fix test to follow recent changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6340
diff changeset
    51
        cbname = url.split()[1][:-2]
00cd0b273cf5 [test] fix test to follow recent changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6340
diff changeset
    52
        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
    53
            'function %s() { $("#foo").loadxhtml("http://testing.fr/cubicweb/ajax?%s",'
10332
da1cb2b12fe1 [uilib] `uilib.js` helper now honors explicit JSString (closes #4959538)
Alain Leufroy <alain@leufroy.fr>
parents: 10003
diff changeset
    54
            '{pageid: "%s"},"get","replace"); }' %
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
    55
            (cbname, qs, req.pageid),
6595
00cd0b273cf5 [test] fix test to follow recent changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6340
diff changeset
    56
            req.html_headers.post_inlined_scripts[0])
1646
88182252fd11 fix tests, cleanup
sylvain.thenault@logilab.fr
parents:
diff changeset
    57
9147
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
class FileUploadTC(CubicWebServerTC):
01124cfd4b1f [etwist] fix handling of multiple files per field
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8728
diff changeset
    60
01124cfd4b1f [etwist] fix handling of multiple files per field
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8728
diff changeset
    61
    def setUp(self):
01124cfd4b1f [etwist] fix handling of multiple files per field
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8728
diff changeset
    62
        "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
    63
        if requests is None:
01124cfd4b1f [etwist] fix handling of multiple files per field
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8728
diff changeset
    64
            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
    65
        super(FileUploadTC, self).setUp()
01124cfd4b1f [etwist] fix handling of multiple files per field
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8728
diff changeset
    66
01124cfd4b1f [etwist] fix handling of multiple files per field
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8728
diff changeset
    67
    @property
01124cfd4b1f [etwist] fix handling of multiple files per field
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8728
diff changeset
    68
    def _post_url(self):
9849
b18ef631e72c [webtests/web] use the new connection api
Julien Cristau <julien.cristau@logilab.fr>
parents: 9601
diff changeset
    69
        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
    70
            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
    71
01124cfd4b1f [etwist] fix handling of multiple files per field
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8728
diff changeset
    72
    def _fobject(self, fname):
01124cfd4b1f [etwist] fix handling of multiple files per field
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8728
diff changeset
    73
        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
    74
01124cfd4b1f [etwist] fix handling of multiple files per field
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8728
diff changeset
    75
    def _fcontent(self, fname):
11156
36252a0c76ec [web/test] open() as a context manager
Julien Cristau <julien.cristau@logilab.fr>
parents: 11155
diff changeset
    76
        with self._fobject(fname) as f:
36252a0c76ec [web/test] open() as a context manager
Julien Cristau <julien.cristau@logilab.fr>
parents: 11155
diff changeset
    77
            return f.read()
9147
01124cfd4b1f [etwist] fix handling of multiple files per field
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8728
diff changeset
    78
11157
42fa15632493 [web/test] return the hash of uploaded files in FileUploadTC instead of their contents
Julien Cristau <julien.cristau@logilab.fr>
parents: 11156
diff changeset
    79
    def _fhash(self, fname):
42fa15632493 [web/test] return the hash of uploaded files in FileUploadTC instead of their contents
Julien Cristau <julien.cristau@logilab.fr>
parents: 11156
diff changeset
    80
        content = self._fcontent(fname)
42fa15632493 [web/test] return the hash of uploaded files in FileUploadTC instead of their contents
Julien Cristau <julien.cristau@logilab.fr>
parents: 11156
diff changeset
    81
        return hashlib.md5(content).hexdigest()
42fa15632493 [web/test] return the hash of uploaded files in FileUploadTC instead of their contents
Julien Cristau <julien.cristau@logilab.fr>
parents: 11156
diff changeset
    82
9147
01124cfd4b1f [etwist] fix handling of multiple files per field
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8728
diff changeset
    83
    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
    84
        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
    85
        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
    86
        # 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
    87
        # 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
    88
        expect = {'fname': u'fileupload',
11157
42fa15632493 [web/test] return the hash of uploaded files in FileUploadTC instead of their contents
Julien Cristau <julien.cristau@logilab.fr>
parents: 11156
diff changeset
    89
                  'file': ['schema.py', self._fhash('schema.py')]}
9147
01124cfd4b1f [etwist] fix handling of multiple files per field
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8728
diff changeset
    90
        self.assertEqual(webreq.status_code, 200)
11155
3bc47295c262 [web/test] json.loads expects text, not bytes
Julien Cristau <julien.cristau@logilab.fr>
parents: 11057
diff changeset
    91
        self.assertDictEqual(expect, loads(webreq.text))
9147
01124cfd4b1f [etwist] fix handling of multiple files per field
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8728
diff changeset
    92
01124cfd4b1f [etwist] fix handling of multiple files per field
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8728
diff changeset
    93
    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
    94
        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
    95
                 ('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
    96
        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
    97
        expect = {'fname': u'fileupload',
11157
42fa15632493 [web/test] return the hash of uploaded files in FileUploadTC instead of their contents
Julien Cristau <julien.cristau@logilab.fr>
parents: 11156
diff changeset
    98
                  'files': [['schema.py', self._fhash('schema.py')],
42fa15632493 [web/test] return the hash of uploaded files in FileUploadTC instead of their contents
Julien Cristau <julien.cristau@logilab.fr>
parents: 11156
diff changeset
    99
                            ['views.py', self._fhash('views.py')]],}
9147
01124cfd4b1f [etwist] fix handling of multiple files per field
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8728
diff changeset
   100
        self.assertEqual(webreq.status_code, 200)
11155
3bc47295c262 [web/test] json.loads expects text, not bytes
Julien Cristau <julien.cristau@logilab.fr>
parents: 11057
diff changeset
   101
        self.assertDictEqual(expect, loads(webreq.text))
9147
01124cfd4b1f [etwist] fix handling of multiple files per field
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8728
diff changeset
   102
9897
fa44db7da2dc merge 3.19.3 into 3.20 branch
Julien Cristau <julien.cristau@logilab.fr>
parents: 9730 9882
diff changeset
   103
9601
e5a80bd337e8 [web] fix language negotiation
Julien Cristau <julien.cristau@logilab.fr>
parents: 9147
diff changeset
   104
class LanguageTC(CubicWebServerTC):
e5a80bd337e8 [web] fix language negotiation
Julien Cristau <julien.cristau@logilab.fr>
parents: 9147
diff changeset
   105
e5a80bd337e8 [web] fix language negotiation
Julien Cristau <julien.cristau@logilab.fr>
parents: 9147
diff changeset
   106
    def test_language_neg(self):
e5a80bd337e8 [web] fix language negotiation
Julien Cristau <julien.cristau@logilab.fr>
parents: 9147
diff changeset
   107
        headers = {'Accept-Language': 'fr'}
e5a80bd337e8 [web] fix language negotiation
Julien Cristau <julien.cristau@logilab.fr>
parents: 9147
diff changeset
   108
        webreq = self.web_request(headers=headers)
e5a80bd337e8 [web] fix language negotiation
Julien Cristau <julien.cristau@logilab.fr>
parents: 9147
diff changeset
   109
        self.assertIn('lang="fr"', webreq.read())
10003
6bcb460826cc [web] set Vary response header to "Accept-Language" when using content negotiation
Julien Cristau <julien.cristau@logilab.fr>
parents: 10001
diff changeset
   110
        vary = [h.lower().strip() for h in webreq.getheader('Vary').split(',')]
6bcb460826cc [web] set Vary response header to "Accept-Language" when using content negotiation
Julien Cristau <julien.cristau@logilab.fr>
parents: 10001
diff changeset
   111
        self.assertIn('accept-language', vary)
9601
e5a80bd337e8 [web] fix language negotiation
Julien Cristau <julien.cristau@logilab.fr>
parents: 9147
diff changeset
   112
        headers = {'Accept-Language': 'en'}
e5a80bd337e8 [web] fix language negotiation
Julien Cristau <julien.cristau@logilab.fr>
parents: 9147
diff changeset
   113
        webreq = self.web_request(headers=headers)
e5a80bd337e8 [web] fix language negotiation
Julien Cristau <julien.cristau@logilab.fr>
parents: 9147
diff changeset
   114
        self.assertIn('lang="en"', webreq.read())
10003
6bcb460826cc [web] set Vary response header to "Accept-Language" when using content negotiation
Julien Cristau <julien.cristau@logilab.fr>
parents: 10001
diff changeset
   115
        vary = [h.lower().strip() for h in webreq.getheader('Vary').split(',')]
6bcb460826cc [web] set Vary response header to "Accept-Language" when using content negotiation
Julien Cristau <julien.cristau@logilab.fr>
parents: 10001
diff changeset
   116
        self.assertIn('accept-language', vary)
9601
e5a80bd337e8 [web] fix language negotiation
Julien Cristau <julien.cristau@logilab.fr>
parents: 9147
diff changeset
   117
9730
8347e6d613c9 [web/test] add a test for some http response codes
Julien Cristau <julien.cristau@logilab.fr>
parents: 9601
diff changeset
   118
    def test_response_codes(self):
8347e6d613c9 [web/test] add a test for some http response codes
Julien Cristau <julien.cristau@logilab.fr>
parents: 9601
diff changeset
   119
        with self.admin_access.client_cnx() as cnx:
8347e6d613c9 [web/test] add a test for some http response codes
Julien Cristau <julien.cristau@logilab.fr>
parents: 9601
diff changeset
   120
            admin_eid = cnx.user.eid
8347e6d613c9 [web/test] add a test for some http response codes
Julien Cristau <julien.cristau@logilab.fr>
parents: 9601
diff changeset
   121
        # guest can't see admin
8347e6d613c9 [web/test] add a test for some http response codes
Julien Cristau <julien.cristau@logilab.fr>
parents: 9601
diff changeset
   122
        webreq = self.web_request('/%d' % admin_eid)
8347e6d613c9 [web/test] add a test for some http response codes
Julien Cristau <julien.cristau@logilab.fr>
parents: 9601
diff changeset
   123
        self.assertEqual(webreq.status, 403)
8347e6d613c9 [web/test] add a test for some http response codes
Julien Cristau <julien.cristau@logilab.fr>
parents: 9601
diff changeset
   124
8347e6d613c9 [web/test] add a test for some http response codes
Julien Cristau <julien.cristau@logilab.fr>
parents: 9601
diff changeset
   125
        # but admin can
8347e6d613c9 [web/test] add a test for some http response codes
Julien Cristau <julien.cristau@logilab.fr>
parents: 9601
diff changeset
   126
        self.web_login()
8347e6d613c9 [web/test] add a test for some http response codes
Julien Cristau <julien.cristau@logilab.fr>
parents: 9601
diff changeset
   127
        webreq = self.web_request('/%d' % admin_eid)
8347e6d613c9 [web/test] add a test for some http response codes
Julien Cristau <julien.cristau@logilab.fr>
parents: 9601
diff changeset
   128
        self.assertEqual(webreq.status, 200)
8347e6d613c9 [web/test] add a test for some http response codes
Julien Cristau <julien.cristau@logilab.fr>
parents: 9601
diff changeset
   129
10001
1245357b3b3e [web] add support for HttpOnly cookie flag
Julien Cristau <julien.cristau@logilab.fr>
parents: 9897
diff changeset
   130
    def test_session_cookie_httponly(self):
1245357b3b3e [web] add support for HttpOnly cookie flag
Julien Cristau <julien.cristau@logilab.fr>
parents: 9897
diff changeset
   131
        webreq = self.web_request()
1245357b3b3e [web] add support for HttpOnly cookie flag
Julien Cristau <julien.cristau@logilab.fr>
parents: 9897
diff changeset
   132
        self.assertIn('HttpOnly', webreq.getheader('set-cookie'))
1245357b3b3e [web] add support for HttpOnly cookie flag
Julien Cristau <julien.cristau@logilab.fr>
parents: 9897
diff changeset
   133
9147
01124cfd4b1f [etwist] fix handling of multiple files per field
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8728
diff changeset
   134
10324
6e44cc1d9c7e [web] add test for datadir-url option (related to #5204550)
Julien Cristau <julien.cristau@logilab.fr>
parents: 10003
diff changeset
   135
class MiscOptionsTC(CubicWebServerTC):
9882
4db650d79e32 [test] Fix the query-log-file test
Julien Cristau <julien.cristau@logilab.fr>
parents: 9849
diff changeset
   136
    @classmethod
11015
baf463175505 [devtools] Fix database creation issues for CubicWebServerTC tests
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10411
diff changeset
   137
    def setUpClass(cls):
baf463175505 [devtools] Fix database creation issues for CubicWebServerTC tests
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10411
diff changeset
   138
        super(MiscOptionsTC, cls).setUpClass()
9882
4db650d79e32 [test] Fix the query-log-file test
Julien Cristau <julien.cristau@logilab.fr>
parents: 9849
diff changeset
   139
        cls.logfile = tempfile.NamedTemporaryFile()
11015
baf463175505 [devtools] Fix database creation issues for CubicWebServerTC tests
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10411
diff changeset
   140
baf463175505 [devtools] Fix database creation issues for CubicWebServerTC tests
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10411
diff changeset
   141
    def setUp(self):
baf463175505 [devtools] Fix database creation issues for CubicWebServerTC tests
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10411
diff changeset
   142
        super(MiscOptionsTC, self).setUp()
baf463175505 [devtools] Fix database creation issues for CubicWebServerTC tests
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10411
diff changeset
   143
        self.config.global_set_option('query-log-file', self.logfile.name)
baf463175505 [devtools] Fix database creation issues for CubicWebServerTC tests
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10411
diff changeset
   144
        self.config.global_set_option('datadir-url', '//static.testing.fr/')
10324
6e44cc1d9c7e [web] add test for datadir-url option (related to #5204550)
Julien Cristau <julien.cristau@logilab.fr>
parents: 10003
diff changeset
   145
        # call load_configuration again to let the config reset its datadir_url
11015
baf463175505 [devtools] Fix database creation issues for CubicWebServerTC tests
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10411
diff changeset
   146
        self.config.load_configuration()
9882
4db650d79e32 [test] Fix the query-log-file test
Julien Cristau <julien.cristau@logilab.fr>
parents: 9849
diff changeset
   147
4db650d79e32 [test] Fix the query-log-file test
Julien Cristau <julien.cristau@logilab.fr>
parents: 9849
diff changeset
   148
    def test_log_queries(self):
4db650d79e32 [test] Fix the query-log-file test
Julien Cristau <julien.cristau@logilab.fr>
parents: 9849
diff changeset
   149
        self.web_request()
4db650d79e32 [test] Fix the query-log-file test
Julien Cristau <julien.cristau@logilab.fr>
parents: 9849
diff changeset
   150
        self.assertTrue(self.logfile.read())
4db650d79e32 [test] Fix the query-log-file test
Julien Cristau <julien.cristau@logilab.fr>
parents: 9849
diff changeset
   151
10324
6e44cc1d9c7e [web] add test for datadir-url option (related to #5204550)
Julien Cristau <julien.cristau@logilab.fr>
parents: 10003
diff changeset
   152
    def test_datadir_url(self):
6e44cc1d9c7e [web] add test for datadir-url option (related to #5204550)
Julien Cristau <julien.cristau@logilab.fr>
parents: 10003
diff changeset
   153
        webreq = self.web_request()
6e44cc1d9c7e [web] add test for datadir-url option (related to #5204550)
Julien Cristau <julien.cristau@logilab.fr>
parents: 10003
diff changeset
   154
        self.assertNotIn('/data/', webreq.read())
6e44cc1d9c7e [web] add test for datadir-url option (related to #5204550)
Julien Cristau <julien.cristau@logilab.fr>
parents: 10003
diff changeset
   155
9882
4db650d79e32 [test] Fix the query-log-file test
Julien Cristau <julien.cristau@logilab.fr>
parents: 9849
diff changeset
   156
    @classmethod
4db650d79e32 [test] Fix the query-log-file test
Julien Cristau <julien.cristau@logilab.fr>
parents: 9849
diff changeset
   157
    def tearDownClass(cls):
11015
baf463175505 [devtools] Fix database creation issues for CubicWebServerTC tests
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10411
diff changeset
   158
        super(MiscOptionsTC, cls).tearDownClass()
9882
4db650d79e32 [test] Fix the query-log-file test
Julien Cristau <julien.cristau@logilab.fr>
parents: 9849
diff changeset
   159
        cls.logfile.close()
4db650d79e32 [test] Fix the query-log-file test
Julien Cristau <julien.cristau@logilab.fr>
parents: 9849
diff changeset
   160
9147
01124cfd4b1f [etwist] fix handling of multiple files per field
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8728
diff changeset
   161
1646
88182252fd11 fix tests, cleanup
sylvain.thenault@logilab.fr
parents:
diff changeset
   162
if __name__ == '__main__':
88182252fd11 fix tests, cleanup
sylvain.thenault@logilab.fr
parents:
diff changeset
   163
    unittest_main()