cubicweb/web/test/unittest_views_searchrestriction.py
author Denis Laxalde <denis.laxalde@logilab.fr>
Fri, 01 Dec 2017 11:19:19 +0100
changeset 12244 6a71cb23f827
parent 12039 7514626e1dc5
permissions -rw-r--r--
Disable pytest's logs reporting CubicWeb already prints captured logs in stderr upon test failure, so we get them twice. Until we fix our logging management, disabling pytest capture and restore brings the output level back to sanity.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
8544
3d049071957e massive copyright update to avoid clutering later patches
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7605
diff changeset
     1
# copyright 2003-2012 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: 4252
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: 4252
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: 4252
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: 4252
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: 4252
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: 4252
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: 4252
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: 4252
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: 4252
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: 4252
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: 4252
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: 4252
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: 4252
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: 4252
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: 4252
diff changeset
    17
# with CubicWeb.  If not, see <http://www.gnu.org/licenses/>.
1977
606923dff11b big bunch of copyright / docstring update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 1802
diff changeset
    18
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
    19
from cubicweb.devtools.testlib import CubicWebTC
7605
48abeac162fd [facets] refactor / cleanup facet api: more consistent variable naming and easier to reuse function. Closes #1796804
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6340
diff changeset
    20
from cubicweb.web import facet
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    21
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    22
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
    23
class InsertAttrRelationTC(CubicWebTC):
16
a70ece4d9d1a fix tests in web/test
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 0
diff changeset
    24
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    25
    def parse(self, query):
12039
7514626e1dc5 [session+test] Stop storing / accessing session when it's not necessary
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11057
diff changeset
    26
        with self.admin_access.cnx() as cnx:
7514626e1dc5 [session+test] Stop storing / accessing session when it's not necessary
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11057
diff changeset
    27
            rqlst = self.vreg.parse(cnx, query)
7514626e1dc5 [session+test] Stop storing / accessing session when it's not necessary
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11057
diff changeset
    28
            rqlst.children[0]
408
a8814ff6824e reactivate tests and fix bug triggering removal of undesired relation (eg type restriction) in some cases
sylvain.thenault@logilab.fr
parents: 16
diff changeset
    29
        return rqlst
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    30
408
a8814ff6824e reactivate tests and fix bug triggering removal of undesired relation (eg type restriction) in some cases
sylvain.thenault@logilab.fr
parents: 16
diff changeset
    31
    def _generate(self, rqlst, rel, role, attr):
7605
48abeac162fd [facets] refactor / cleanup facet api: more consistent variable naming and easier to reuse function. Closes #1796804
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6340
diff changeset
    32
        select = rqlst.children[0]
48abeac162fd [facets] refactor / cleanup facet api: more consistent variable naming and easier to reuse function. Closes #1796804
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6340
diff changeset
    33
        filtered_variable = facet.get_filtered_variable(select)
48abeac162fd [facets] refactor / cleanup facet api: more consistent variable naming and easier to reuse function. Closes #1796804
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6340
diff changeset
    34
        facet.prepare_select(select, filtered_variable)
48abeac162fd [facets] refactor / cleanup facet api: more consistent variable naming and easier to reuse function. Closes #1796804
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6340
diff changeset
    35
        facet.insert_attr_select_relation(select, filtered_variable,
48abeac162fd [facets] refactor / cleanup facet api: more consistent variable naming and easier to reuse function. Closes #1796804
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6340
diff changeset
    36
                                          rel, role, attr)
408
a8814ff6824e reactivate tests and fix bug triggering removal of undesired relation (eg type restriction) in some cases
sylvain.thenault@logilab.fr
parents: 16
diff changeset
    37
        return rqlst.as_string()
1802
d628defebc17 delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 1398
diff changeset
    38
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    39
    @property
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    40
    def select(self):
10658
e73ce169762b [test] use unicode for rql queries (5/7)
Julien Cristau <julien.cristau@logilab.fr>
parents: 8696
diff changeset
    41
        return self.parse(u'Any B,(NOW - CD),S,V,U,GROUP_CONCAT(TN),VN,P,CD,BMD '
e73ce169762b [test] use unicode for rql queries (5/7)
Julien Cristau <julien.cristau@logilab.fr>
parents: 8696
diff changeset
    42
                           'GROUPBY B,CD,S,V,U,VN,P,BMD '
e73ce169762b [test] use unicode for rql queries (5/7)
Julien Cristau <julien.cristau@logilab.fr>
parents: 8696
diff changeset
    43
                           'WHERE B in_state S, B creation_date CD, '
e73ce169762b [test] use unicode for rql queries (5/7)
Julien Cristau <julien.cristau@logilab.fr>
parents: 8696
diff changeset
    44
                           'B modification_date BMD, T? tags B, T name TN, '
e73ce169762b [test] use unicode for rql queries (5/7)
Julien Cristau <julien.cristau@logilab.fr>
parents: 8696
diff changeset
    45
                           'V? bookmarked_by B, V title VN, B created_by U?, '
e73ce169762b [test] use unicode for rql queries (5/7)
Julien Cristau <julien.cristau@logilab.fr>
parents: 8696
diff changeset
    46
                           'B in_group P, P name "managers"')
1802
d628defebc17 delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 1398
diff changeset
    47
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    48
    def test_1(self):
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5623
diff changeset
    49
        self.assertEqual(self._generate(self.select, 'in_state', 'subject', 'name'),
10658
e73ce169762b [test] use unicode for rql queries (5/7)
Julien Cristau <julien.cristau@logilab.fr>
parents: 8696
diff changeset
    50
                         'DISTINCT Any A,C ORDERBY C WHERE B in_group P, P name "managers", '
e73ce169762b [test] use unicode for rql queries (5/7)
Julien Cristau <julien.cristau@logilab.fr>
parents: 8696
diff changeset
    51
                         'B in_state A, B is CWUser, A name C')
1802
d628defebc17 delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 1398
diff changeset
    52
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    53
    def test_2(self):
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5623
diff changeset
    54
        self.assertEqual(self._generate(self.select, 'tags', 'object', 'name'),
10658
e73ce169762b [test] use unicode for rql queries (5/7)
Julien Cristau <julien.cristau@logilab.fr>
parents: 8696
diff changeset
    55
                         'DISTINCT Any A,C ORDERBY C WHERE B in_group P, P name "managers", '
e73ce169762b [test] use unicode for rql queries (5/7)
Julien Cristau <julien.cristau@logilab.fr>
parents: 8696
diff changeset
    56
                         'A tags B, B is CWUser, A name C')
1802
d628defebc17 delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 1398
diff changeset
    57
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    58
    def test_3(self):
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5623
diff changeset
    59
        self.assertEqual(self._generate(self.select, 'created_by', 'subject', 'login'),
10658
e73ce169762b [test] use unicode for rql queries (5/7)
Julien Cristau <julien.cristau@logilab.fr>
parents: 8696
diff changeset
    60
                         'DISTINCT Any A,C ORDERBY C WHERE B in_group P, P name "managers", '
e73ce169762b [test] use unicode for rql queries (5/7)
Julien Cristau <julien.cristau@logilab.fr>
parents: 8696
diff changeset
    61
                         'B created_by A, B is CWUser, A login C')
1802
d628defebc17 delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 1398
diff changeset
    62
408
a8814ff6824e reactivate tests and fix bug triggering removal of undesired relation (eg type restriction) in some cases
sylvain.thenault@logilab.fr
parents: 16
diff changeset
    63
    def test_4(self):
10658
e73ce169762b [test] use unicode for rql queries (5/7)
Julien Cristau <julien.cristau@logilab.fr>
parents: 8696
diff changeset
    64
        self.assertEqual(self._generate(self.parse(u'Any X WHERE X is CWUser'), 'created_by', 'subject', 'login'),
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 408
diff changeset
    65
                          "DISTINCT Any A,B ORDERBY B WHERE X is CWUser, X created_by A, A login B")
1802
d628defebc17 delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 1398
diff changeset
    66
408
a8814ff6824e reactivate tests and fix bug triggering removal of undesired relation (eg type restriction) in some cases
sylvain.thenault@logilab.fr
parents: 16
diff changeset
    67
    def test_5(self):
10658
e73ce169762b [test] use unicode for rql queries (5/7)
Julien Cristau <julien.cristau@logilab.fr>
parents: 8696
diff changeset
    68
        self.assertEqual(self._generate(self.parse(u'Any X,L WHERE X is CWUser, X login L'), 'created_by', 'subject', 'login'),
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 408
diff changeset
    69
                          "DISTINCT Any A,B ORDERBY B WHERE X is CWUser, X created_by A, A login B")
1802
d628defebc17 delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 1398
diff changeset
    70
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    71
    def test_nonregr1(self):
10658
e73ce169762b [test] use unicode for rql queries (5/7)
Julien Cristau <julien.cristau@logilab.fr>
parents: 8696
diff changeset
    72
        select = self.parse(u'Any T,V WHERE T bookmarked_by V?, '
e73ce169762b [test] use unicode for rql queries (5/7)
Julien Cristau <julien.cristau@logilab.fr>
parents: 8696
diff changeset
    73
                             'V in_state VS, VS name "published", T created_by U')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5623
diff changeset
    74
        self.assertEqual(self._generate(select, 'created_by', 'subject', 'login'),
408
a8814ff6824e reactivate tests and fix bug triggering removal of undesired relation (eg type restriction) in some cases
sylvain.thenault@logilab.fr
parents: 16
diff changeset
    75
                          "DISTINCT Any A,B ORDERBY B WHERE T created_by U, "
5623
a01aa5b26e66 [test] update test to follow recent navigation/facets fixes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5582
diff changeset
    76
                          "T created_by A, T is Bookmark, A login B")
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    77
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    78
    def test_nonregr2(self):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    79
        #'DISTINCT Any X,TMP,N WHERE P name TMP, X version_of P, P is Project, X is Version, not X in_state S,S name "published", X num N ORDERBY TMP,N'
10658
e73ce169762b [test] use unicode for rql queries (5/7)
Julien Cristau <julien.cristau@logilab.fr>
parents: 8696
diff changeset
    80
        select = self.parse(u'DISTINCT Any V,TN,L ORDERBY TN,L WHERE T nom TN, V connait T, T is Personne, V is CWUser,'
e73ce169762b [test] use unicode for rql queries (5/7)
Julien Cristau <julien.cristau@logilab.fr>
parents: 8696
diff changeset
    81
                             'NOT V in_state VS, VS name "published", V login L')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    82
        rschema = self.schema['connait']
10663
54b8a1f249fb [py3k] dict.itervalues → dict.values
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10658
diff changeset
    83
        for rdefs in rschema.rdefs.values():
4072
ead446e70c28 some api update
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2773
diff changeset
    84
            rdefs.cardinality =  '++'
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    85
        try:
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5623
diff changeset
    86
            self.assertEqual(self._generate(select, 'in_state', 'subject', 'name'),
10658
e73ce169762b [test] use unicode for rql queries (5/7)
Julien Cristau <julien.cristau@logilab.fr>
parents: 8696
diff changeset
    87
                             'DISTINCT Any A,B ORDERBY B WHERE V is CWUser, '
e73ce169762b [test] use unicode for rql queries (5/7)
Julien Cristau <julien.cristau@logilab.fr>
parents: 8696
diff changeset
    88
                             'NOT EXISTS(V in_state VS), VS name "published", '
e73ce169762b [test] use unicode for rql queries (5/7)
Julien Cristau <julien.cristau@logilab.fr>
parents: 8696
diff changeset
    89
                             'V in_state A, A name B')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    90
        finally:
10663
54b8a1f249fb [py3k] dict.itervalues → dict.values
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10658
diff changeset
    91
            for rdefs in rschema.rdefs.values():
4072
ead446e70c28 some api update
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2773
diff changeset
    92
                rdefs.cardinality =  '**'
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    93
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    94
    def test_nonregr3(self):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    95
        #'DISTINCT Any X,TMP,N WHERE P name TMP, X version_of P, P is Project, X is Version, not X in_state S,S name "published", X num N ORDERBY TMP,N'
10658
e73ce169762b [test] use unicode for rql queries (5/7)
Julien Cristau <julien.cristau@logilab.fr>
parents: 8696
diff changeset
    96
        select = self.parse(u'DISTINCT Any X, MAX(Y) GROUPBY X WHERE X is CWUser, Y is Bookmark, X in_group A')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5623
diff changeset
    97
        self.assertEqual(self._generate(select, 'in_group', 'subject', 'name'),
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 408
diff changeset
    98
                          "DISTINCT Any B,C ORDERBY C WHERE X is CWUser, X in_group B, B name C")
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    99
1802
d628defebc17 delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 1398
diff changeset
   100
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   101
if __name__ == '__main__':
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   102
    from logilab.common.testlib import unittest_main
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   103
    unittest_main()