cubicweb/test/unittest_req.py
author Denis Laxalde <denis.laxalde@logilab.fr>
Fri, 04 Nov 2016 13:12:10 +0100
changeset 11799 1bdfe9d4ab83
parent 11794 d8830e2bd2e0
child 11870 3a84a79c4ed5
permissions -rw-r--r--
[req,web/request] Move language prefix handling into web request This changes part of d8830e2bd2e0 by unsetting "lang" attribute of RequestSessionBase in particular (because it appears to break many downstream applications). The new implementation relies on a new "build_url_path" method on RequestSessionBase that is overridden in _CubicWebRequestBase to handle the language prefix in URL. As a consequence build_url in RequestSessionBase is not aware of this prefix anymore (contrary previous implementation from d8830e2bd2e0). Move respected tests from unittest_req.py into unittest_request.py. Commenting out part of test_handle_request_no_lang_negotiation_fixed_language in unittest_application.py because it now fails because of some obscure bug that cannot be resolved at the moment. Related to #15743487.
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
6747
63bf61e4e130 [security] fix access control problem
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 6340
diff changeset
    48
    def test_ensure_no_rql(self):
63bf61e4e130 [security] fix access control problem
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 6340
diff changeset
    49
        req = RequestSessionBase(None)
63bf61e4e130 [security] fix access control problem
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 6340
diff changeset
    50
        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
    51
        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
    52
        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
    53
        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
    54
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
    55
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
    56
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
    57
a33da516028f [req] Return base-url in case https-url is None in base_url()
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 9348
diff changeset
    58
    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
    59
        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
    60
        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
    61
            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
    62
            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
    63
            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
    64
            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
    65
            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
    66
            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
    67
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
    68
    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
    69
        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
    70
            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
    71
            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
    72
            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
    73
9348
eacd02792332 [req] New method: RequestSessionBase.find().
Christophe de Vienne <cdevienne@gmail.com>
parents: 8309
diff changeset
    74
    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
    75
        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
    76
            req.create_entity(
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
    77
                '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
    78
                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
    79
                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
    80
9654
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
    81
            req.create_entity(
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
    82
                '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
    83
                firstname=u'adrien',
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
    84
                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
    85
9654
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
    86
            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
    87
            self.assertEqual(u.firstname, u"Christophe")
9348
eacd02792332 [req] New method: RequestSessionBase.find().
Christophe de Vienne <cdevienne@gmail.com>
parents: 8309
diff changeset
    88
9654
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
    89
            with self.assertRaises(FindEntityError):
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
    90
                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
    91
9654
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
    92
            with self.assertRaises(FindEntityError):
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
    93
                req.find_one_entity('CWUser')
9348
eacd02792332 [req] New method: RequestSessionBase.find().
Christophe de Vienne <cdevienne@gmail.com>
parents: 8309
diff changeset
    94
eacd02792332 [req] New method: RequestSessionBase.find().
Christophe de Vienne <cdevienne@gmail.com>
parents: 8309
diff changeset
    95
    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
    96
        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
    97
            req.create_entity(
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
    98
                '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
    99
                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
   100
                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
   101
9654
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
   102
            req.create_entity(
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
   103
                '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
   104
                firstname=u'adrien',
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
   105
                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
   106
9654
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
   107
            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
   108
            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
   109
            self.assertEqual(l[0].firstname, u"Christophe")
9348
eacd02792332 [req] New method: RequestSessionBase.find().
Christophe de Vienne <cdevienne@gmail.com>
parents: 8309
diff changeset
   110
9654
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
   111
            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
   112
            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
   113
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
   114
            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
   115
            self.assertEqual(4, len(l))
9348
eacd02792332 [req] New method: RequestSessionBase.find().
Christophe de Vienne <cdevienne@gmail.com>
parents: 8309
diff changeset
   116
eacd02792332 [req] New method: RequestSessionBase.find().
Christophe de Vienne <cdevienne@gmail.com>
parents: 8309
diff changeset
   117
    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
   118
        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
   119
            req.create_entity(
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
   120
                '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
   121
                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
   122
                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
   123
9654
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
   124
            req.create_entity(
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
   125
                '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
   126
                firstname=u'adrien',
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
   127
                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
   128
9654
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
   129
            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
   130
            self.assertEqual(u.firstname, u"Christophe")
9348
eacd02792332 [req] New method: RequestSessionBase.find().
Christophe de Vienne <cdevienne@gmail.com>
parents: 8309
diff changeset
   131
9654
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
   132
            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
   133
            self.assertEqual(len(users), 4)
9348
eacd02792332 [req] New method: RequestSessionBase.find().
Christophe de Vienne <cdevienne@gmail.com>
parents: 8309
diff changeset
   134
9654
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
   135
            groups = list(
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
   136
                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
   137
            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
   138
            self.assertEqual(groups[0].name, u'users')
9348
eacd02792332 [req] New method: RequestSessionBase.find().
Christophe de Vienne <cdevienne@gmail.com>
parents: 8309
diff changeset
   139
9654
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
   140
            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
   141
            users = list(users)
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
   142
            self.assertEqual(len(users), 2)
9348
eacd02792332 [req] New method: RequestSessionBase.find().
Christophe de Vienne <cdevienne@gmail.com>
parents: 8309
diff changeset
   143
9654
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
   144
            with self.assertRaises(AssertionError):
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
   145
                req.find('CWUser', chapeau=u"melon")
9348
eacd02792332 [req] New method: RequestSessionBase.find().
Christophe de Vienne <cdevienne@gmail.com>
parents: 8309
diff changeset
   146
9654
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
   147
            with self.assertRaises(AssertionError):
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
   148
                req.find('CWUser', reverse_buddy=users[0])
9348
eacd02792332 [req] New method: RequestSessionBase.find().
Christophe de Vienne <cdevienne@gmail.com>
parents: 8309
diff changeset
   149
9654
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
   150
            with self.assertRaises(NotImplementedError):
f788e5e7e6ea [test] update unittest_req to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9386
diff changeset
   151
                req.find('CWUser', in_group=[1, 2])
9348
eacd02792332 [req] New method: RequestSessionBase.find().
Christophe de Vienne <cdevienne@gmail.com>
parents: 8309
diff changeset
   152
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
   153
4891
90203ec7b3e3 [url] new rebuild_url method on base request
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   154
if __name__ == '__main__':
90203ec7b3e3 [url] new rebuild_url method on base request
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   155
    unittest_main()