cubicweb/web/test/unittest_urlrewrite.py
author Denis Laxalde <denis.laxalde@logilab.fr>
Fri, 05 Apr 2019 17:58:19 +0200
changeset 12567 26744ad37953
parent 11057 0b59724cb3f2
permissions -rw-r--r--
Drop python2 support This mostly consists in removing the dependency on "six" and updating the code to use only Python3 idioms. Notice that we previously used TemporaryDirectory from cubicweb.devtools.testlib for compatibility with Python2. We now directly import it from tempfile.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
9840
92ea0a4746e2 [webtests/urlrewrite] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9359
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: 4715
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: 4715
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: 4715
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: 4715
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: 4715
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: 4715
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: 4715
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: 4715
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: 4715
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: 4715
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: 4715
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: 4715
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: 4715
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: 4715
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: 4715
diff changeset
    17
# with CubicWeb.  If not, see <http://www.gnu.org/licenses/>.
9359
31a1813d53f3 [entity/url publishing] fetch_rqlst should use 'is_instance_of' instead of 'is'
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8632
diff changeset
    18
31a1813d53f3 [entity/url publishing] fetch_rqlst should use 'is_instance_of' instead of 'is'
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8632
diff changeset
    19
from logilab.common import tempattr
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    20
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2439
diff changeset
    21
from cubicweb.devtools.testlib import CubicWebTC
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2439
diff changeset
    22
from cubicweb.devtools.fake import FakeRequest
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    23
9840
92ea0a4746e2 [webtests/urlrewrite] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9359
diff changeset
    24
from cubicweb.web.views.urlrewrite import (SimpleReqRewriter, SchemaBasedRewriter,
92ea0a4746e2 [webtests/urlrewrite] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9359
diff changeset
    25
                                           rgx, rgx_action)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    26
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    27
3465
01616e5fa590 [tests] make unittest_urlrewrite pass again
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3185
diff changeset
    28
class UrlRewriteTC(CubicWebTC):
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    29
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    30
    def test_auto_extend_rules(self):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    31
        class Rewriter(SimpleReqRewriter):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    32
            rules = [
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    33
                ('foo', dict(rql='Foo F')),
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    34
                ('/index', dict(vid='index2')),
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    35
                ]
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    36
        rules = []
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    37
        for pattern, values in Rewriter.rules:
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    38
            if hasattr(pattern, 'pattern'):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    39
                pattern = pattern.pattern
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    40
            rules.append((pattern, values))
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5424
diff changeset
    41
        self.assertListEqual(rules, [
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    42
            ('foo' , dict(rql='Foo F')),
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    43
            ('/index' , dict(vid='index2')),
2780
ad1dfc3855b0 B web/tests back to green
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 2439
diff changeset
    44
            ('/_', dict(vid='manage')),
ad1dfc3855b0 B web/tests back to green
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 2439
diff changeset
    45
            ('/_registry', dict(vid='registry')),
2439
77d8dd77acb3 [cleanup] fix tests
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 1977
diff changeset
    46
            ('/schema', dict(vid='schema')),
1900
8dd4bb69c73d [tests] fix test after eproperties got renamed to cwproperties
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 1802
diff changeset
    47
            ('/myprefs', dict(vid='propertiesform')),
8dd4bb69c73d [tests] fix test after eproperties got renamed to cwproperties
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 1802
diff changeset
    48
            ('/siteconfig', dict(vid='systempropertiesform')),
7017
cd2ea273007a [web test] fix some tests broken by recent (and various) changesets
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6340
diff changeset
    49
            ('/siteinfo', dict(vid='siteinfo')),
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    50
            ('/manage', dict(vid='manage')),
2439
77d8dd77acb3 [cleanup] fix tests
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 1977
diff changeset
    51
            ('/notfound', dict(vid='404')),
77d8dd77acb3 [cleanup] fix tests
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 1977
diff changeset
    52
            ('/error', dict(vid='error')),
77d8dd77acb3 [cleanup] fix tests
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 1977
diff changeset
    53
            ('/sparql', dict(vid='sparql')),
4715
d3f87ee74fe4 [test] fix test broken by arthur processinfo patch
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4390
diff changeset
    54
            ('/processinfo', dict(vid='processinfo')),
7802
d0bf71aff4a1 [web test] fix test broken by new users/groups management views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7244
diff changeset
    55
            ('/cwuser$', {'vid': 'cw.users-and-groups-management',
d0bf71aff4a1 [web test] fix test broken by new users/groups management views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7244
diff changeset
    56
                          'tab': 'cw_users_management'}),
d0bf71aff4a1 [web test] fix test broken by new users/groups management views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7244
diff changeset
    57
            ('/cwgroup$', {'vid': 'cw.users-and-groups-management',
d0bf71aff4a1 [web test] fix test broken by new users/groups management views
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7244
diff changeset
    58
                           'tab': 'cw_groups_management'}),
7992
4ff9f25cb06e [table views] closes #1986413: refactor TableView, EntityAttributesTableView, PyValTableView
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7803
diff changeset
    59
            ('/cwsource$', {'vid': 'cw.sources-management'}),
4390
0285c1fa1459 test fixes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
    60
            ('/schema/([^/]+?)/?$', {'rql': r'Any X WHERE X is CWEType, X name "\1"', 'vid': 'primary'}),
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    61
            ('/add/([^/]+?)/?$' , dict(vid='creation', etype=r'\1')),
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    62
            ('/doc/images/(.+?)/?$', dict(fid='\\1', vid='wdocimages')),
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    63
            ('/doc/?$', dict(fid='main', vid='wdoc')),
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    64
            ('/doc/(.+?)/?$', dict(fid='\\1', vid='wdoc')),
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    65
            # now in SchemaBasedRewriter
1802
d628defebc17 delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 1398
diff changeset
    66
            #('/search/(.+)$', dict(rql=r'Any X WHERE X has_text "\1"')),
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    67
            ])
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    68
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    69
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    70
    def test_no_extend_rules(self):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    71
        class Rewriter(SimpleReqRewriter):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    72
            ignore_baseclass_rules = True
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    73
            rules = [
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    74
                ('foo', dict(rql='Foo F')),
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    75
                ('/index', dict(vid='index2')),
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    76
                ]
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5424
diff changeset
    77
        self.assertListEqual(Rewriter.rules, [
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    78
            ('foo' , dict(rql='Foo F')),
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    79
            ('/index' , dict(vid='index2')),
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    80
            ])
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    81
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    82
    def test_basic_transformation(self):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    83
        """test simple string-based rewrite"""
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    84
        req = FakeRequest()
3465
01616e5fa590 [tests] make unittest_urlrewrite pass again
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3185
diff changeset
    85
        rewriter = SimpleReqRewriter(req)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    86
        self.assertRaises(KeyError, rewriter.rewrite, req, '/view?vid=whatever')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5424
diff changeset
    87
        self.assertEqual(req.form, {})
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    88
        rewriter.rewrite(req, '/index')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5424
diff changeset
    89
        self.assertEqual(req.form, {'vid' : "index"})
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    90
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    91
    def test_regexp_transformation(self):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    92
        """test regexp-based rewrite"""
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    93
        req = FakeRequest()
3465
01616e5fa590 [tests] make unittest_urlrewrite pass again
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 3185
diff changeset
    94
        rewriter = SimpleReqRewriter(req)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    95
        rewriter.rewrite(req, '/add/Task')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5424
diff changeset
    96
        self.assertEqual(req.form, {'vid' : "creation", 'etype' : "Task"})
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    97
        req = FakeRequest()
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    98
        rewriter.rewrite(req, '/add/Task/')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5424
diff changeset
    99
        self.assertEqual(req.form, {'vid' : "creation", 'etype' : "Task"})
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   100
9359
31a1813d53f3 [entity/url publishing] fetch_rqlst should use 'is_instance_of' instead of 'is'
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8632
diff changeset
   101
    def test_inheritance(self):
31a1813d53f3 [entity/url publishing] fetch_rqlst should use 'is_instance_of' instead of 'is'
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8632
diff changeset
   102
        BaseTransition = self.vreg['etypes'].etype_class('BaseTransition')
9840
92ea0a4746e2 [webtests/urlrewrite] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9359
diff changeset
   103
        with self.admin_access.web_request() as req:
92ea0a4746e2 [webtests/urlrewrite] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9359
diff changeset
   104
            x = req.create_entity('WorkflowTransition', name=u'test')
92ea0a4746e2 [webtests/urlrewrite] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9359
diff changeset
   105
            ctrlid, rset = self.app.url_resolver.process(req, 'basetransition/%s' % x.eid)
92ea0a4746e2 [webtests/urlrewrite] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9359
diff changeset
   106
            self.assertEqual(ctrlid, 'view')
92ea0a4746e2 [webtests/urlrewrite] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9359
diff changeset
   107
            self.assertEqual(x.eid, rset[0][0])
92ea0a4746e2 [webtests/urlrewrite] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9359
diff changeset
   108
            # cw_rest_attr_info is cached but clear_cache doesn't like cached class
92ea0a4746e2 [webtests/urlrewrite] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9359
diff changeset
   109
            # method
92ea0a4746e2 [webtests/urlrewrite] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9359
diff changeset
   110
            del BaseTransition._cw_rest_attr_info_cache_
92ea0a4746e2 [webtests/urlrewrite] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9359
diff changeset
   111
            try:
92ea0a4746e2 [webtests/urlrewrite] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9359
diff changeset
   112
                with tempattr(BaseTransition, 'rest_attr', 'name'):
9359
31a1813d53f3 [entity/url publishing] fetch_rqlst should use 'is_instance_of' instead of 'is'
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8632
diff changeset
   113
9840
92ea0a4746e2 [webtests/urlrewrite] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9359
diff changeset
   114
                    ctrlid, rset = self.app.url_resolver.process(req, 'basetransition/%s' % x.name)
92ea0a4746e2 [webtests/urlrewrite] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9359
diff changeset
   115
                    self.assertEqual(ctrlid, 'view')
92ea0a4746e2 [webtests/urlrewrite] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9359
diff changeset
   116
                    self.assertEqual(x.eid, rset[0][0])
92ea0a4746e2 [webtests/urlrewrite] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9359
diff changeset
   117
            finally:
92ea0a4746e2 [webtests/urlrewrite] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9359
diff changeset
   118
                del BaseTransition._cw_rest_attr_info_cache_
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   119
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   120
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   121
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2439
diff changeset
   122
class RgxActionRewriteTC(CubicWebTC):
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   123
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   124
    def setup_database(self):
9840
92ea0a4746e2 [webtests/urlrewrite] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9359
diff changeset
   125
        with self.admin_access.repo_cnx() as cnx:
9841
d2e196f12db4 [webtests/urlrewrite] do not store a plain entity on the test, only an eid
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9840
diff changeset
   126
            p1 = self.create_user(cnx, u'user1')
d2e196f12db4 [webtests/urlrewrite] do not store a plain entity on the test, only an eid
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9840
diff changeset
   127
            p1.cw_set(firstname=u'joe', surname=u'Dalton')
d2e196f12db4 [webtests/urlrewrite] do not store a plain entity on the test, only an eid
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9840
diff changeset
   128
            p2 = self.create_user(cnx, u'user2')
d2e196f12db4 [webtests/urlrewrite] do not store a plain entity on the test, only an eid
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9840
diff changeset
   129
            p2.cw_set(firstname=u'jack', surname=u'Dalton')
d2e196f12db4 [webtests/urlrewrite] do not store a plain entity on the test, only an eid
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9840
diff changeset
   130
            self.p1eid = p1.eid
9840
92ea0a4746e2 [webtests/urlrewrite] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9359
diff changeset
   131
            cnx.commit()
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   132
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   133
    def test_rgx_action_with_transforms(self):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   134
        class TestSchemaBasedRewriter(SchemaBasedRewriter):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   135
            rules = [
9840
92ea0a4746e2 [webtests/urlrewrite] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9359
diff changeset
   136
                (rgx('/(?P<sn>\w+)/(?P<fn>\w+)'),
92ea0a4746e2 [webtests/urlrewrite] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9359
diff changeset
   137
                 rgx_action(r'Any X WHERE X surname %(sn)s, '
92ea0a4746e2 [webtests/urlrewrite] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9359
diff changeset
   138
                            'X firstname %(fn)s',
92ea0a4746e2 [webtests/urlrewrite] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9359
diff changeset
   139
                            argsgroups=('sn', 'fn'),
12567
26744ad37953 Drop python2 support
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11057
diff changeset
   140
                            transforms={'sn' : str.capitalize,
26744ad37953 Drop python2 support
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11057
diff changeset
   141
                                        'fn' : str.lower,})),
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   142
                ]
9840
92ea0a4746e2 [webtests/urlrewrite] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9359
diff changeset
   143
        with self.admin_access.web_request() as req:
92ea0a4746e2 [webtests/urlrewrite] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9359
diff changeset
   144
            rewriter = TestSchemaBasedRewriter(req)
92ea0a4746e2 [webtests/urlrewrite] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9359
diff changeset
   145
            _pmid, rset = rewriter.rewrite(req, u'/DaLToN/JoE')
92ea0a4746e2 [webtests/urlrewrite] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9359
diff changeset
   146
            self.assertEqual(len(rset), 1)
9841
d2e196f12db4 [webtests/urlrewrite] do not store a plain entity on the test, only an eid
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9840
diff changeset
   147
            self.assertEqual(rset[0][0], self.p1eid)
10399
5234525560ac [web, urlrewrite] remove unused `cachekey` argument from `rgx_action` (closes #5355967)
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents: 9841
diff changeset
   148
            self.assertEqual(rset.description[0][0], 'CWUser')
1802
d628defebc17 delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 1398
diff changeset
   149
3168
1ecd1b6d6f1b [tests] inheritance_precedence in url rewrite
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 2780
diff changeset
   150
    def test_inheritance_precedence(self):
1ecd1b6d6f1b [tests] inheritance_precedence in url rewrite
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 2780
diff changeset
   151
        RQL1 = 'Any C WHERE C is CWEType'
1ecd1b6d6f1b [tests] inheritance_precedence in url rewrite
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 2780
diff changeset
   152
        RQL2 = 'Any C WHERE C is CWUser'
1ecd1b6d6f1b [tests] inheritance_precedence in url rewrite
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 2780
diff changeset
   153
1ecd1b6d6f1b [tests] inheritance_precedence in url rewrite
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 2780
diff changeset
   154
        class BaseRewriter(SchemaBasedRewriter):
1ecd1b6d6f1b [tests] inheritance_precedence in url rewrite
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 2780
diff changeset
   155
            rules = [
1ecd1b6d6f1b [tests] inheritance_precedence in url rewrite
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 2780
diff changeset
   156
               (rgx('/collector(.*)'),
1ecd1b6d6f1b [tests] inheritance_precedence in url rewrite
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 2780
diff changeset
   157
                rgx_action(rql=RQL1,
1ecd1b6d6f1b [tests] inheritance_precedence in url rewrite
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 2780
diff changeset
   158
                    form=dict(vid='baseindex')),
1ecd1b6d6f1b [tests] inheritance_precedence in url rewrite
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 2780
diff changeset
   159
                ),
1ecd1b6d6f1b [tests] inheritance_precedence in url rewrite
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 2780
diff changeset
   160
                ]
1ecd1b6d6f1b [tests] inheritance_precedence in url rewrite
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 2780
diff changeset
   161
        class Rewriter(BaseRewriter):
1ecd1b6d6f1b [tests] inheritance_precedence in url rewrite
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 2780
diff changeset
   162
            rules = [
1ecd1b6d6f1b [tests] inheritance_precedence in url rewrite
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 2780
diff changeset
   163
               (rgx('/collector/something(/?)'),
1ecd1b6d6f1b [tests] inheritance_precedence in url rewrite
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 2780
diff changeset
   164
                rgx_action(rql=RQL2,
1ecd1b6d6f1b [tests] inheritance_precedence in url rewrite
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 2780
diff changeset
   165
                    form=dict(vid='index')),
1ecd1b6d6f1b [tests] inheritance_precedence in url rewrite
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 2780
diff changeset
   166
                ),
1ecd1b6d6f1b [tests] inheritance_precedence in url rewrite
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 2780
diff changeset
   167
                ]
1ecd1b6d6f1b [tests] inheritance_precedence in url rewrite
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 2780
diff changeset
   168
9840
92ea0a4746e2 [webtests/urlrewrite] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9359
diff changeset
   169
        with self.admin_access.web_request() as req:
92ea0a4746e2 [webtests/urlrewrite] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9359
diff changeset
   170
            rewriter = Rewriter(req)
92ea0a4746e2 [webtests/urlrewrite] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9359
diff changeset
   171
            _pmid, rset = rewriter.rewrite(req, '/collector')
92ea0a4746e2 [webtests/urlrewrite] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9359
diff changeset
   172
            self.assertEqual(rset.rql, RQL1)
92ea0a4746e2 [webtests/urlrewrite] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9359
diff changeset
   173
            self.assertEqual(req.form, {'vid' : "baseindex"})
92ea0a4746e2 [webtests/urlrewrite] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9359
diff changeset
   174
            _pmid, rset = rewriter.rewrite(req, '/collector/something')
92ea0a4746e2 [webtests/urlrewrite] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9359
diff changeset
   175
            self.assertEqual(rset.rql, RQL2)
92ea0a4746e2 [webtests/urlrewrite] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9359
diff changeset
   176
            self.assertEqual(req.form, {'vid' : "index"})
92ea0a4746e2 [webtests/urlrewrite] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9359
diff changeset
   177
            _pmid, rset = rewriter.rewrite(req, '/collector/something/')
92ea0a4746e2 [webtests/urlrewrite] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9359
diff changeset
   178
            self.assertEqual(req.form, {'vid' : "index"})
92ea0a4746e2 [webtests/urlrewrite] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9359
diff changeset
   179
            self.assertEqual(rset.rql, RQL2)
92ea0a4746e2 [webtests/urlrewrite] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9359
diff changeset
   180
            _pmid, rset = rewriter.rewrite(req, '/collector/somethingelse/')
92ea0a4746e2 [webtests/urlrewrite] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9359
diff changeset
   181
            self.assertEqual(rset.rql, RQL1)
92ea0a4746e2 [webtests/urlrewrite] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9359
diff changeset
   182
            self.assertEqual(req.form, {'vid' : "baseindex"})
3168
1ecd1b6d6f1b [tests] inheritance_precedence in url rewrite
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 2780
diff changeset
   183
1ecd1b6d6f1b [tests] inheritance_precedence in url rewrite
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 2780
diff changeset
   184
    def test_inheritance_precedence_same_rgx(self):
1ecd1b6d6f1b [tests] inheritance_precedence in url rewrite
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 2780
diff changeset
   185
        RQL1 = 'Any C WHERE C is CWEType'
1ecd1b6d6f1b [tests] inheritance_precedence in url rewrite
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 2780
diff changeset
   186
        RQL2 = 'Any C WHERE C is CWUser'
1ecd1b6d6f1b [tests] inheritance_precedence in url rewrite
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 2780
diff changeset
   187
1ecd1b6d6f1b [tests] inheritance_precedence in url rewrite
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 2780
diff changeset
   188
        class BaseRewriter(SchemaBasedRewriter):
1ecd1b6d6f1b [tests] inheritance_precedence in url rewrite
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 2780
diff changeset
   189
            rules = [
1ecd1b6d6f1b [tests] inheritance_precedence in url rewrite
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 2780
diff changeset
   190
               (rgx('/collector(.*)'),
1ecd1b6d6f1b [tests] inheritance_precedence in url rewrite
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 2780
diff changeset
   191
                rgx_action(rql=RQL1,
1ecd1b6d6f1b [tests] inheritance_precedence in url rewrite
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 2780
diff changeset
   192
                    form=dict(vid='baseindex')),
1ecd1b6d6f1b [tests] inheritance_precedence in url rewrite
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 2780
diff changeset
   193
                ),
1ecd1b6d6f1b [tests] inheritance_precedence in url rewrite
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 2780
diff changeset
   194
                ]
1ecd1b6d6f1b [tests] inheritance_precedence in url rewrite
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 2780
diff changeset
   195
        class Rewriter(BaseRewriter):
1ecd1b6d6f1b [tests] inheritance_precedence in url rewrite
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 2780
diff changeset
   196
            rules = [
1ecd1b6d6f1b [tests] inheritance_precedence in url rewrite
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 2780
diff changeset
   197
               (rgx('/collector(.*)'),
1ecd1b6d6f1b [tests] inheritance_precedence in url rewrite
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 2780
diff changeset
   198
                rgx_action(rql=RQL2,
1ecd1b6d6f1b [tests] inheritance_precedence in url rewrite
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 2780
diff changeset
   199
                    form=dict(vid='index')),
1ecd1b6d6f1b [tests] inheritance_precedence in url rewrite
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 2780
diff changeset
   200
                ),
1ecd1b6d6f1b [tests] inheritance_precedence in url rewrite
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 2780
diff changeset
   201
                ]
1ecd1b6d6f1b [tests] inheritance_precedence in url rewrite
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 2780
diff changeset
   202
9840
92ea0a4746e2 [webtests/urlrewrite] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9359
diff changeset
   203
        with self.admin_access.web_request() as req:
92ea0a4746e2 [webtests/urlrewrite] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9359
diff changeset
   204
            rewriter = Rewriter(req)
92ea0a4746e2 [webtests/urlrewrite] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9359
diff changeset
   205
            _pmid, rset = rewriter.rewrite(req, '/collector')
92ea0a4746e2 [webtests/urlrewrite] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9359
diff changeset
   206
            self.assertEqual(rset.rql, RQL2)
92ea0a4746e2 [webtests/urlrewrite] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9359
diff changeset
   207
            self.assertEqual(req.form, {'vid' : "index"})
92ea0a4746e2 [webtests/urlrewrite] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9359
diff changeset
   208
            _pmid, rset = rewriter.rewrite(req, '/collector/something')
92ea0a4746e2 [webtests/urlrewrite] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9359
diff changeset
   209
            self.assertEqual(rset.rql, RQL2)
92ea0a4746e2 [webtests/urlrewrite] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9359
diff changeset
   210
            self.assertEqual(req.form, {'vid' : "index"})
92ea0a4746e2 [webtests/urlrewrite] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9359
diff changeset
   211
            _pmid, rset = rewriter.rewrite(req, '/collector/something/')
92ea0a4746e2 [webtests/urlrewrite] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9359
diff changeset
   212
            self.assertEqual(req.form, {'vid' : "index"})
92ea0a4746e2 [webtests/urlrewrite] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9359
diff changeset
   213
            self.assertEqual(rset.rql, RQL2)
92ea0a4746e2 [webtests/urlrewrite] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9359
diff changeset
   214
            _pmid, rset = rewriter.rewrite(req, '/collector/somethingelse/')
92ea0a4746e2 [webtests/urlrewrite] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9359
diff changeset
   215
            self.assertEqual(rset.rql, RQL2)
92ea0a4746e2 [webtests/urlrewrite] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9359
diff changeset
   216
            self.assertEqual(req.form, {'vid' : "index"})
1802
d628defebc17 delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 1398
diff changeset
   217
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   218
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   219
if __name__ == '__main__':
9359
31a1813d53f3 [entity/url publishing] fetch_rqlst should use 'is_instance_of' instead of 'is'
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8632
diff changeset
   220
    from logilab.common.testlib import unittest_main
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   221
    unittest_main()