cubicweb/test/unittest_req.py
author Denis Laxalde <denis.laxalde@logilab.fr>
Fri, 04 Nov 2016 11:56:00 +0100
changeset 11797 6c036ac4c1c2
parent 11794 d8830e2bd2e0
child 11799 1bdfe9d4ab83
permissions -rw-r--r--
[test] Distinguish "request" tests from accept parser ones in unittest_request.py
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
9654
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
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: 4891
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: 4891
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: 4891
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: 4891
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: 4891
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: 4891
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: 4891
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: 4891
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: 4891
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: 4891
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: 4891
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: 4891
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: 4891
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: 4891
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: 4891
diff changeset
    17
# with CubicWeb.  If not, see <http://www.gnu.org/licenses/>.
7888
e257b4476454 [req] .view should not catch [Object|Registry]NotFound (which is a bug), only NoSelectableObject (closes #1973681)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6750
diff changeset
    18
4891
90203ec7b3e3 [url] new rebuild_url method on base request
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    19
from logilab.common.testlib import TestCase, unittest_main
7888
e257b4476454 [req] .view should not catch [Object|Registry]NotFound (which is a bug), only NoSelectableObject (closes #1973681)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6750
diff changeset
    20
from cubicweb import ObjectNotFound
9348
eacd02792332 [req] New method: RequestSessionBase.find().
Christophe de Vienne <cdevienne@gmail.com>
parents: 8309
diff changeset
    21
from cubicweb.req import RequestSessionBase, FindEntityError
11794
d8830e2bd2e0 [req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11057
diff changeset
    22
from cubicweb.devtools import ApptestConfiguration
6321
a8a33679f4dd [req] build_url: detect None values in arguments and raise ValueError
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 5424
diff changeset
    23
from cubicweb.devtools.testlib import CubicWebTC
6747
63bf61e4e130 [security] fix access control problem
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 6340
diff changeset
    24
from cubicweb import Unauthorized
4891
90203ec7b3e3 [url] new rebuild_url method on base request
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    25
7888
e257b4476454 [req] .view should not catch [Object|Registry]NotFound (which is a bug), only NoSelectableObject (closes #1973681)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6750
diff changeset
    26
class RequestTC(TestCase):
6321
a8a33679f4dd [req] build_url: detect None values in arguments and raise ValueError
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 5424
diff changeset
    27
    def test_rebuild_url(self):
4891
90203ec7b3e3 [url] new rebuild_url method on base request
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    28
        rebuild_url = RequestSessionBase(None).rebuild_url
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6321
diff changeset
    29
        self.assertEqual(rebuild_url('http://logilab.fr?__message=pouet', __message='hop'),
4891
90203ec7b3e3 [url] new rebuild_url method on base request
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    30
                          'http://logilab.fr?__message=hop')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6321
diff changeset
    31
        self.assertEqual(rebuild_url('http://logilab.fr', __message='hop'),
4891
90203ec7b3e3 [url] new rebuild_url method on base request
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    32
                          'http://logilab.fr?__message=hop')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6321
diff changeset
    33
        self.assertEqual(rebuild_url('http://logilab.fr?vid=index', __message='hop'),
4891
90203ec7b3e3 [url] new rebuild_url method on base request
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    34
                          'http://logilab.fr?__message=hop&vid=index')
90203ec7b3e3 [url] new rebuild_url method on base request
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    35
6321
a8a33679f4dd [req] build_url: detect None values in arguments and raise ValueError
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 5424
diff changeset
    36
    def test_build_url(self):
a8a33679f4dd [req] build_url: detect None values in arguments and raise ValueError
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 5424
diff changeset
    37
        req = RequestSessionBase(None)
a8a33679f4dd [req] build_url: detect None values in arguments and raise ValueError
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 5424
diff changeset
    38
        req.from_controller = lambda : 'view'
a8a33679f4dd [req] build_url: detect None values in arguments and raise ValueError
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 5424
diff changeset
    39
        req.relative_path = lambda includeparams=True: None
8309
48ef505aa9f9 [request] gather all base_url logic in a single place (closes #2200756)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8190
diff changeset
    40
        req.base_url = lambda secure=None: 'http://testing.fr/cubicweb/'
6321
a8a33679f4dd [req] build_url: detect None values in arguments and raise ValueError
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 5424
diff changeset
    41
        self.assertEqual(req.build_url(), u'http://testing.fr/cubicweb/view')
a8a33679f4dd [req] build_url: detect None values in arguments and raise ValueError
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 5424
diff changeset
    42
        self.assertEqual(req.build_url(None), u'http://testing.fr/cubicweb/view')
a8a33679f4dd [req] build_url: detect None values in arguments and raise ValueError
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 5424
diff changeset
    43
        self.assertEqual(req.build_url('one'), u'http://testing.fr/cubicweb/one')
a8a33679f4dd [req] build_url: detect None values in arguments and raise ValueError
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 5424
diff changeset
    44
        self.assertEqual(req.build_url(param='ok'), u'http://testing.fr/cubicweb/view?param=ok')
a8a33679f4dd [req] build_url: detect None values in arguments and raise ValueError
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 5424
diff changeset
    45
        self.assertRaises(AssertionError, req.build_url, 'one', 'two not allowed')
6595
00cd0b273cf5 [test] fix test to follow recent changes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6340
diff changeset
    46
        self.assertRaises(AssertionError, req.build_url, 'view', test=None)
6321
a8a33679f4dd [req] build_url: detect None values in arguments and raise ValueError
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 5424
diff changeset
    47
11794
d8830e2bd2e0 [req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11057
diff changeset
    48
    def test_build_url_language_from_url(self):
d8830e2bd2e0 [req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11057
diff changeset
    49
        # need req.vreg.config to exist because lang is read in it at set_language() call
d8830e2bd2e0 [req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11057
diff changeset
    50
        vreg = MockVReg()
d8830e2bd2e0 [req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11057
diff changeset
    51
        vreg.config.global_set_option('language-mode', 'url-prefix')
d8830e2bd2e0 [req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11057
diff changeset
    52
        req = RequestSessionBase(vreg)
d8830e2bd2e0 [req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11057
diff changeset
    53
        req.base_url = lambda secure=None: 'http://testing.fr/cubicweb/'
d8830e2bd2e0 [req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11057
diff changeset
    54
        self.assertIsNone(req.lang)  # language unset yet.
d8830e2bd2e0 [req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11057
diff changeset
    55
        self.assertEqual(req.build_url(), 'http://testing.fr/cubicweb/view')
d8830e2bd2e0 [req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11057
diff changeset
    56
        self.assertEqual(req.build_url('foo'), 'http://testing.fr/cubicweb/foo')
d8830e2bd2e0 [req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11057
diff changeset
    57
        req.set_language('fr')
d8830e2bd2e0 [req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11057
diff changeset
    58
        self.assertEqual(req.lang, 'fr')
d8830e2bd2e0 [req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11057
diff changeset
    59
        self.assertEqual(req.build_url(), 'http://testing.fr/cubicweb/fr/view')
d8830e2bd2e0 [req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11057
diff changeset
    60
        self.assertEqual(req.build_url('foo'), 'http://testing.fr/cubicweb/fr/foo')
d8830e2bd2e0 [req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11057
diff changeset
    61
        req.set_language('en')
d8830e2bd2e0 [req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11057
diff changeset
    62
        self.assertEqual(req.lang, 'en')
d8830e2bd2e0 [req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11057
diff changeset
    63
        self.assertEqual(req.build_url(), 'http://testing.fr/cubicweb/en/view')
d8830e2bd2e0 [req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11057
diff changeset
    64
        self.assertEqual(req.build_url('foo'), 'http://testing.fr/cubicweb/en/foo')
d8830e2bd2e0 [req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11057
diff changeset
    65
        # no language prefix in URL
d8830e2bd2e0 [req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11057
diff changeset
    66
        vreg.config.global_set_option('language-mode', '')
d8830e2bd2e0 [req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11057
diff changeset
    67
        self.assertEqual(req.build_url(), 'http://testing.fr/cubicweb/view')
d8830e2bd2e0 [req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11057
diff changeset
    68
        self.assertEqual(req.build_url('foo'), 'http://testing.fr/cubicweb/foo')
d8830e2bd2e0 [req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11057
diff changeset
    69
        req.set_language('fr')
d8830e2bd2e0 [req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11057
diff changeset
    70
        self.assertEqual(req.build_url(), 'http://testing.fr/cubicweb/view')
d8830e2bd2e0 [req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11057
diff changeset
    71
        self.assertEqual(req.build_url('foo'), 'http://testing.fr/cubicweb/foo')
d8830e2bd2e0 [req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11057
diff changeset
    72
6747
63bf61e4e130 [security] fix access control problem
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 6340
diff changeset
    73
    def test_ensure_no_rql(self):
63bf61e4e130 [security] fix access control problem
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 6340
diff changeset
    74
        req = RequestSessionBase(None)
63bf61e4e130 [security] fix access control problem
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 6340
diff changeset
    75
        self.assertEqual(req.ensure_ro_rql('Any X WHERE X is CWUser'), None)
63bf61e4e130 [security] fix access control problem
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 6340
diff changeset
    76
        self.assertEqual(req.ensure_ro_rql('  Any X WHERE X is CWUser  '), None)
63bf61e4e130 [security] fix access control problem
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 6340
diff changeset
    77
        self.assertRaises(Unauthorized, req.ensure_ro_rql, 'SET X login "toto" WHERE X is CWUser')
63bf61e4e130 [security] fix access control problem
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 6340
diff changeset
    78
        self.assertRaises(Unauthorized, req.ensure_ro_rql, '   SET X login "toto" WHERE X is CWUser   ')
4891
90203ec7b3e3 [url] new rebuild_url method on base request
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    79
7888
e257b4476454 [req] .view should not catch [Object|Registry]NotFound (which is a bug), only NoSelectableObject (closes #1973681)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6750
diff changeset
    80
11794
d8830e2bd2e0 [req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11057
diff changeset
    81
class MockVReg(object):
d8830e2bd2e0 [req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11057
diff changeset
    82
    """Fake VReg with just a basic config in it.
d8830e2bd2e0 [req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11057
diff changeset
    83
    """
d8830e2bd2e0 [req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11057
diff changeset
    84
    def __init__(self):
d8830e2bd2e0 [req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11057
diff changeset
    85
        self.config = ApptestConfiguration('data', __file__)
d8830e2bd2e0 [req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11057
diff changeset
    86
d8830e2bd2e0 [req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11057
diff changeset
    87
7888
e257b4476454 [req] .view should not catch [Object|Registry]NotFound (which is a bug), only NoSelectableObject (closes #1973681)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6750
diff changeset
    88
class RequestCWTC(CubicWebTC):
9386
a33da516028f [req] Return base-url in case https-url is None in base_url()
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 9348
diff changeset
    89
a33da516028f [req] Return base-url in case https-url is None in base_url()
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 9348
diff changeset
    90
    def test_base_url(self):
a33da516028f [req] Return base-url in case https-url is None in base_url()
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 9348
diff changeset
    91
        base_url = self.config['base-url']
9654
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
    92
        with self.admin_access.repo_cnx() as session:
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
    93
            self.assertEqual(session.base_url(), base_url)
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
    94
            assert 'https-url' not in self.config
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
    95
            self.assertEqual(session.base_url(secure=True), base_url)
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
    96
            secure_base_url = base_url.replace('http', 'https')
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
    97
            self.config.global_set_option('https-url', secure_base_url)
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
    98
            self.assertEqual(session.base_url(secure=True), secure_base_url)
9386
a33da516028f [req] Return base-url in case https-url is None in base_url()
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 9348
diff changeset
    99
7888
e257b4476454 [req] .view should not catch [Object|Registry]NotFound (which is a bug), only NoSelectableObject (closes #1973681)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6750
diff changeset
   100
    def test_view_catch_ex(self):
9654
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
   101
        with self.admin_access.web_request() as req:
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
   102
            rset = req.execute('CWUser X WHERE X login "hop"')
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
   103
            self.assertEqual(req.view('oneline', rset, 'null'), '')
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
   104
            self.assertRaises(ObjectNotFound, req.view, 'onelinee', rset, 'null')
7888
e257b4476454 [req] .view should not catch [Object|Registry]NotFound (which is a bug), only NoSelectableObject (closes #1973681)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6750
diff changeset
   105
9348
eacd02792332 [req] New method: RequestSessionBase.find().
Christophe de Vienne <cdevienne@gmail.com>
parents: 8309
diff changeset
   106
    def test_find_one_entity(self):
9654
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
   107
        with self.admin_access.web_request() as req:
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
   108
            req.create_entity(
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
   109
                'CWUser', login=u'cdevienne', upassword=u'cdevienne',
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
   110
                surname=u'de Vienne', firstname=u'Christophe',
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
   111
                in_group=req.find('CWGroup', name=u'users').one())
9348
eacd02792332 [req] New method: RequestSessionBase.find().
Christophe de Vienne <cdevienne@gmail.com>
parents: 8309
diff changeset
   112
9654
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
   113
            req.create_entity(
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
   114
                'CWUser', login=u'adim', upassword='adim', surname=u'di mascio',
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
   115
                firstname=u'adrien',
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
   116
                in_group=req.find('CWGroup', name=u'users').one())
9348
eacd02792332 [req] New method: RequestSessionBase.find().
Christophe de Vienne <cdevienne@gmail.com>
parents: 8309
diff changeset
   117
9654
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
   118
            u = req.find_one_entity('CWUser', login=u'cdevienne')
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
   119
            self.assertEqual(u.firstname, u"Christophe")
9348
eacd02792332 [req] New method: RequestSessionBase.find().
Christophe de Vienne <cdevienne@gmail.com>
parents: 8309
diff changeset
   120
9654
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
   121
            with self.assertRaises(FindEntityError):
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
   122
                req.find_one_entity('CWUser', login=u'patanok')
9348
eacd02792332 [req] New method: RequestSessionBase.find().
Christophe de Vienne <cdevienne@gmail.com>
parents: 8309
diff changeset
   123
9654
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
   124
            with self.assertRaises(FindEntityError):
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
   125
                req.find_one_entity('CWUser')
9348
eacd02792332 [req] New method: RequestSessionBase.find().
Christophe de Vienne <cdevienne@gmail.com>
parents: 8309
diff changeset
   126
eacd02792332 [req] New method: RequestSessionBase.find().
Christophe de Vienne <cdevienne@gmail.com>
parents: 8309
diff changeset
   127
    def test_find_entities(self):
9654
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
   128
        with self.admin_access.web_request() as req:
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
   129
            req.create_entity(
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
   130
                'CWUser', login=u'cdevienne', upassword=u'cdevienne',
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
   131
                surname=u'de Vienne', firstname=u'Christophe',
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
   132
                in_group=req.find('CWGroup', name=u'users').one())
9348
eacd02792332 [req] New method: RequestSessionBase.find().
Christophe de Vienne <cdevienne@gmail.com>
parents: 8309
diff changeset
   133
9654
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
   134
            req.create_entity(
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
   135
                'CWUser', login=u'adim', upassword='adim', surname=u'di mascio',
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
   136
                firstname=u'adrien',
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
   137
                in_group=req.find('CWGroup', name=u'users').one())
9348
eacd02792332 [req] New method: RequestSessionBase.find().
Christophe de Vienne <cdevienne@gmail.com>
parents: 8309
diff changeset
   138
9654
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
   139
            l = list(req.find_entities('CWUser', login=u'cdevienne'))
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
   140
            self.assertEqual(1, len(l))
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
   141
            self.assertEqual(l[0].firstname, u"Christophe")
9348
eacd02792332 [req] New method: RequestSessionBase.find().
Christophe de Vienne <cdevienne@gmail.com>
parents: 8309
diff changeset
   142
9654
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
   143
            l = list(req.find_entities('CWUser', login=u'patanok'))
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
   144
            self.assertEqual(0, len(l))
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
   145
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
   146
            l = list(req.find_entities('CWUser'))
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
   147
            self.assertEqual(4, len(l))
9348
eacd02792332 [req] New method: RequestSessionBase.find().
Christophe de Vienne <cdevienne@gmail.com>
parents: 8309
diff changeset
   148
eacd02792332 [req] New method: RequestSessionBase.find().
Christophe de Vienne <cdevienne@gmail.com>
parents: 8309
diff changeset
   149
    def test_find(self):
9654
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
   150
        with self.admin_access.web_request() as req:
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
   151
            req.create_entity(
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
   152
                'CWUser', login=u'cdevienne', upassword=u'cdevienne',
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
   153
                surname=u'de Vienne', firstname=u'Christophe',
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
   154
                in_group=req.find('CWGroup', name=u'users').one())
9348
eacd02792332 [req] New method: RequestSessionBase.find().
Christophe de Vienne <cdevienne@gmail.com>
parents: 8309
diff changeset
   155
9654
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
   156
            req.create_entity(
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
   157
                'CWUser', login=u'adim', upassword='adim', surname=u'di mascio',
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
   158
                firstname=u'adrien',
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
   159
                in_group=req.find('CWGroup', name=u'users').one())
9348
eacd02792332 [req] New method: RequestSessionBase.find().
Christophe de Vienne <cdevienne@gmail.com>
parents: 8309
diff changeset
   160
9654
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
   161
            u = req.find('CWUser', login=u'cdevienne').one()
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
   162
            self.assertEqual(u.firstname, u"Christophe")
9348
eacd02792332 [req] New method: RequestSessionBase.find().
Christophe de Vienne <cdevienne@gmail.com>
parents: 8309
diff changeset
   163
9654
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
   164
            users = list(req.find('CWUser').entities())
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
   165
            self.assertEqual(len(users), 4)
9348
eacd02792332 [req] New method: RequestSessionBase.find().
Christophe de Vienne <cdevienne@gmail.com>
parents: 8309
diff changeset
   166
9654
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
   167
            groups = list(
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
   168
                req.find('CWGroup', reverse_in_group=u).entities())
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
   169
            self.assertEqual(len(groups), 1)
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
   170
            self.assertEqual(groups[0].name, u'users')
9348
eacd02792332 [req] New method: RequestSessionBase.find().
Christophe de Vienne <cdevienne@gmail.com>
parents: 8309
diff changeset
   171
9654
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
   172
            users = req.find('CWUser', in_group=groups[0]).entities()
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
   173
            users = list(users)
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
   174
            self.assertEqual(len(users), 2)
9348
eacd02792332 [req] New method: RequestSessionBase.find().
Christophe de Vienne <cdevienne@gmail.com>
parents: 8309
diff changeset
   175
9654
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
   176
            with self.assertRaises(AssertionError):
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
   177
                req.find('CWUser', chapeau=u"melon")
9348
eacd02792332 [req] New method: RequestSessionBase.find().
Christophe de Vienne <cdevienne@gmail.com>
parents: 8309
diff changeset
   178
9654
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
   179
            with self.assertRaises(AssertionError):
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
   180
                req.find('CWUser', reverse_buddy=users[0])
9348
eacd02792332 [req] New method: RequestSessionBase.find().
Christophe de Vienne <cdevienne@gmail.com>
parents: 8309
diff changeset
   181
9654
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
   182
            with self.assertRaises(NotImplementedError):
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
   183
                req.find('CWUser', in_group=[1, 2])
9348
eacd02792332 [req] New method: RequestSessionBase.find().
Christophe de Vienne <cdevienne@gmail.com>
parents: 8309
diff changeset
   184
11794
d8830e2bd2e0 [req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11057
diff changeset
   185
4891
90203ec7b3e3 [url] new rebuild_url method on base request
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   186
if __name__ == '__main__':
90203ec7b3e3 [url] new rebuild_url method on base request
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   187
    unittest_main()