test/unittest_rset.py
author Julien Cristau <julien.cristau@logilab.fr>
Thu, 10 Dec 2015 16:58:45 +0100
changeset 10997 da712d3f0601
parent 10722 1d0b5aef7523
permissions -rw-r--r--
Bring back the separate web-side entity cache Prior to changeset 635cfac73d28 "[repoapi] fold ClientConnection into Connection", we had two entity caches: one on the client/dbapi/web side, and one on the server/repo side. This is a waste, but it is actually needed as long as we have the magic _cw attribute on entities which must sometimes be a request and sometimes a cnx. Removing the duplication caused weird problems with entity._cw alternating between both types of objects, which is unexpected by both the repo and the web sides. We add an entity cache on ConnectionCubicWebRequestBase, separate from the Connection's, and bring back the _cw_update_attr_cache/dont-cache-attrs mechanism, to let the server/edition code let caches know which attributes have been modified Entity.as_rset can be cached again, as ResultSet no longer modifies the entity when fetching it from a cache. Contrary to the pre-3.21 code, _cw_update_attr_cache now handles web requests and connections in the same way (otherwise the cache ends up with wrong values if a hook modifies attributes), but dont-cache-attrs is never set for (inlined) relations. Closes #6863543
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
     1
# coding: utf-8
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
     2
# 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: 4951
diff changeset
     3
# 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: 4951
diff changeset
     4
#
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4951
diff changeset
     5
# 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: 4951
diff changeset
     6
#
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4951
diff changeset
     7
# 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: 4951
diff changeset
     8
# 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: 4951
diff changeset
     9
# 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: 4951
diff changeset
    10
# 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: 4951
diff changeset
    11
#
5424
8ecbcbff9777 replace logilab-common by CubicWeb in disclaimer
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5421
diff changeset
    12
# 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: 4951
diff changeset
    13
# 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: 4951
diff changeset
    14
# 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: 4951
diff changeset
    15
# details.
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4951
diff changeset
    16
#
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4951
diff changeset
    17
# 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: 4951
diff changeset
    18
# with CubicWeb.  If not, see <http://www.gnu.org/licenses/>.
6366
1806148d6ce8 backport stable
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6225 6340
diff changeset
    19
"""unit tests for module cubicweb.utils"""
4536
02d0803a60b8 cleanup 2.5 __future__ imports
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4461
diff changeset
    20
10612
84468b90e9c1 [py3k] basestring → six.string_types
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10603
diff changeset
    21
from six import string_types
10602
4845012cfc8e [py3k] import 'pickle' using six.moves
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10600
diff changeset
    22
from six.moves import cPickle as pickle
10603
65ad6980976e [py3k] import URL mangling functions using six.moves
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10602
diff changeset
    23
from six.moves.urllib.parse import urlsplit
4536
02d0803a60b8 cleanup 2.5 __future__ imports
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4461
diff changeset
    24
02d0803a60b8 cleanup 2.5 __future__ imports
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4461
diff changeset
    25
from rql import parse
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    26
4850
bd640b137f50 [refactor] drop rset.vreg attribute, vreg should be accessed through rset.req. Also kill decorate_rset, simply set rset.req where we were calling this method.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4536
diff changeset
    27
from logilab.common.testlib import TestCase, unittest_main, mock_object
631
99f5852f8604 major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents: 572
diff changeset
    28
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2635
diff changeset
    29
from cubicweb.devtools.testlib import CubicWebTC
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    30
from cubicweb.rset import NotAnEntity, ResultSet, attr_desc_iterator
9347
bd841d6ae723 [rset] New method: ResultSet.one()
Christophe de Vienne <cdevienne@gmail.com>
parents: 9331
diff changeset
    31
from cubicweb import NoResultError, MultipleResultsError
bd841d6ae723 [rset] New method: ResultSet.one()
Christophe de Vienne <cdevienne@gmail.com>
parents: 9331
diff changeset
    32
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
    33
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    34
def pprelcachedict(d):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    35
    res = {}
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    36
    for k, (rset, related) in d.items():
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    37
        res[k] = sorted(v.eid for v in related)
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    38
    return sorted(res.items())
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
    39
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    40
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    41
class AttrDescIteratorTC(TestCase):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    42
    """TestCase for cubicweb.rset.attr_desc_iterator"""
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
    43
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    44
    def test_relations_description(self):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    45
        """tests relations_description() function"""
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    46
        queries = {
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 692
diff changeset
    47
            'Any U,L,M where U is CWUser, U login L, U mail M' : [(1, 'login', 'subject'), (2, 'mail', 'subject')],
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 692
diff changeset
    48
            'Any U,L,M where U is CWUser, L is Foo, U mail M' : [(2, 'mail', 'subject')],
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    49
            'Any C,P where C is Company, C employs P' : [(1, 'employs', 'subject')],
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    50
            'Any C,P where C is Company, P employed_by P' : [],
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    51
            'Any C where C is Company, C employs P' : [],
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    52
            }
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    53
        for rql, relations in queries.items():
6915
99eb71b311e4 [rset] fix entity building for some result set with UNION and subqueries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6857
diff changeset
    54
            result = list(attr_desc_iterator(parse(rql).children[0], 0, 0))
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6195
diff changeset
    55
            self.assertEqual((rql, result), (rql, relations))
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
    56
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    57
    def test_relations_description_indexed(self):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    58
        """tests relations_description() function"""
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    59
        queries = {
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 692
diff changeset
    60
            'Any C,U,P,L,M where C is Company, C employs P, U is CWUser, U login L, U mail M' :
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    61
            {0: [(2,'employs', 'subject')], 1: [(3,'login', 'subject'), (4,'mail', 'subject')]},
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    62
            }
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    63
        for rql, results in queries.items():
6915
99eb71b311e4 [rset] fix entity building for some result set with UNION and subqueries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6857
diff changeset
    64
            for idx, relations in results.items():
99eb71b311e4 [rset] fix entity building for some result set with UNION and subqueries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6857
diff changeset
    65
                result = list(attr_desc_iterator(parse(rql).children[0], idx, idx))
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6195
diff changeset
    66
                self.assertEqual(result, relations)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    67
7395
09ffcc04bd21 [rset] close #1683703: rset.get_entity crash on rql query with subquery and aggregat
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7298
diff changeset
    68
    def test_subquery_callfunc(self):
09ffcc04bd21 [rset] close #1683703: rset.get_entity crash on rql query with subquery and aggregat
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7298
diff changeset
    69
        rql = ('Any A,B,C,COUNT(D) GROUPBY A,B,C WITH A,B,C,D BEING '
09ffcc04bd21 [rset] close #1683703: rset.get_entity crash on rql query with subquery and aggregat
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7298
diff changeset
    70
               '(Any YEAR(CD), MONTH(CD), S, X WHERE X is CWUser, X creation_date CD, X in_state S)')
09ffcc04bd21 [rset] close #1683703: rset.get_entity crash on rql query with subquery and aggregat
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7298
diff changeset
    71
        rqlst = parse(rql)
09ffcc04bd21 [rset] close #1683703: rset.get_entity crash on rql query with subquery and aggregat
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7298
diff changeset
    72
        select, col = rqlst.locate_subquery(2, 'CWUser', None)
09ffcc04bd21 [rset] close #1683703: rset.get_entity crash on rql query with subquery and aggregat
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7298
diff changeset
    73
        result = list(attr_desc_iterator(select, col, 2))
09ffcc04bd21 [rset] close #1683703: rset.get_entity crash on rql query with subquery and aggregat
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7298
diff changeset
    74
        self.assertEqual(result, [])
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    75
8085
51929d531aff [rset] fix crash while building entity from rset w/ some subquery. Closes #2089055
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8048
diff changeset
    76
    def test_subquery_callfunc_2(self):
51929d531aff [rset] fix crash while building entity from rset w/ some subquery. Closes #2089055
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8048
diff changeset
    77
        rql = ('Any X,S,L WHERE X in_state S WITH X, L BEING (Any X,MAX(L) GROUPBY X WHERE X is CWUser, T wf_info_for X, T creation_date L)')
51929d531aff [rset] fix crash while building entity from rset w/ some subquery. Closes #2089055
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8048
diff changeset
    78
        rqlst = parse(rql)
51929d531aff [rset] fix crash while building entity from rset w/ some subquery. Closes #2089055
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8048
diff changeset
    79
        select, col = rqlst.locate_subquery(0, 'CWUser', None)
51929d531aff [rset] fix crash while building entity from rset w/ some subquery. Closes #2089055
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8048
diff changeset
    80
        result = list(attr_desc_iterator(select, col, 0))
51929d531aff [rset] fix crash while building entity from rset w/ some subquery. Closes #2089055
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8048
diff changeset
    81
        self.assertEqual(result, [(1, 'in_state', 'subject')])
51929d531aff [rset] fix crash while building entity from rset w/ some subquery. Closes #2089055
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8048
diff changeset
    82
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    83
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2635
diff changeset
    84
class ResultSetTC(CubicWebTC):
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    85
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    86
    def setUp(self):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    87
        super(ResultSetTC, self).setUp()
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    88
        self.rset = ResultSet([[12, 'adim'], [13, 'syt']],
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 692
diff changeset
    89
                              'Any U,L where U is CWUser, U login L',
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 692
diff changeset
    90
                              description=[['CWUser', 'String'], ['Bar', 'String']])
4850
bd640b137f50 [refactor] drop rset.vreg attribute, vreg should be accessed through rset.req. Also kill decorate_rset, simply set rset.req where we were calling this method.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4536
diff changeset
    91
        self.rset.req = mock_object(vreg=self.vreg)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    92
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    93
    def compare_urls(self, url1, url2):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    94
        info1 = urlsplit(url1)
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    95
        info2 = urlsplit(url2)
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6195
diff changeset
    96
        self.assertEqual(info1[:3], info2[:3])
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    97
        if info1[3] != info2[3]:
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    98
            params1 = dict(pair.split('=') for pair in info1[3].split('&'))
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    99
            params2 = dict(pair.split('=') for pair in info1[3].split('&'))
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6195
diff changeset
   100
            self.assertDictEqual(params1, params2)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   101
5740
46207f491a51 [rset] make rsets picklable (again ?) #1056422
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 5667
diff changeset
   102
    def test_pickle(self):
5747
d6ac0cd30fde [rset] do not filter rsets with __getstate__, ensure whatever flies with pyro has no .req attribute, also set the ._rqlst to None since it will be reconstructed later on demand
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 5740
diff changeset
   103
        del self.rset.req
10722
1d0b5aef7523 [tests] Stop counting pickle bytes in ResultSet tests
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10691
diff changeset
   104
        rs2 = pickle.loads(pickle.dumps(self.rset))
1d0b5aef7523 [tests] Stop counting pickle bytes in ResultSet tests
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10691
diff changeset
   105
        self.assertEqual(self.rset.rows, rs2.rows)
1d0b5aef7523 [tests] Stop counting pickle bytes in ResultSet tests
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10691
diff changeset
   106
        self.assertEqual(self.rset.rowcount, rs2.rowcount)
1d0b5aef7523 [tests] Stop counting pickle bytes in ResultSet tests
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10691
diff changeset
   107
        self.assertEqual(self.rset.rql, rs2.rql)
1d0b5aef7523 [tests] Stop counting pickle bytes in ResultSet tests
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10691
diff changeset
   108
        self.assertEqual(self.rset.description, rs2.description)
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   109
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   110
    def test_build_url(self):
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   111
        with self.admin_access.web_request() as req:
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   112
            baseurl = req.base_url()
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   113
            self.compare_urls(req.build_url('view', vid='foo', rql='yo'),
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   114
                              '%sview?vid=foo&rql=yo' % baseurl)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   115
            self.compare_urls(req.build_url('view', _restpath='task/title/go'),
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   116
                              '%stask/title/go' % baseurl)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   117
            #self.compare_urls(req.build_url('view', _restpath='/task/title/go'),
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   118
            #                  '%stask/title/go' % baseurl)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   119
            # empty _restpath should not crash
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   120
            self.compare_urls(req.build_url('view', _restpath=''), baseurl)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   121
            self.assertNotIn('https', req.build_url('view', vid='foo', rql='yo',
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   122
                                                      __secure__=True))
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   123
            try:
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   124
                self.config.global_set_option('https-url', 'https://testing.fr/')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   125
                self.assertTrue('https', req.build_url('view', vid='foo', rql='yo',
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   126
                                                         __secure__=True))
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   127
                self.compare_urls(req.build_url('view', vid='foo', rql='yo',
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   128
                                                __secure__=True),
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   129
                                  '%sview?vid=foo&rql=yo' % req.base_url(secure=True))
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   130
            finally:
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   131
                self.config.global_set_option('https-url', None)
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   132
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   133
8048
10a0f73d834d [rset] replace entity cw_rset on .limit(inplace=True) will avoid pb if the entity is still referenced by some other entity relations cache. Closes #2065643
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7395
diff changeset
   134
    def test_build(self):
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   135
        """test basic build of a ResultSet"""
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 692
diff changeset
   136
        rs = ResultSet([1,2,3], 'CWGroup X', description=['CWGroup', 'CWGroup', 'CWGroup'])
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6195
diff changeset
   137
        self.assertEqual(rs.rowcount, 3)
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6195
diff changeset
   138
        self.assertEqual(rs.rows, [1,2,3])
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6195
diff changeset
   139
        self.assertEqual(rs.description, ['CWGroup', 'CWGroup', 'CWGroup'])
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   140
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   141
8048
10a0f73d834d [rset] replace entity cw_rset on .limit(inplace=True) will avoid pb if the entity is still referenced by some other entity relations cache. Closes #2065643
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7395
diff changeset
   142
    def test_limit(self):
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   143
        rs = ResultSet([[12000, 'adim'], [13000, 'syt'], [14000, 'nico']],
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 692
diff changeset
   144
                       'Any U,L where U is CWUser, U login L',
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 692
diff changeset
   145
                       description=[['CWUser', 'String']] * 3)
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   146
        with self.admin_access.web_request() as req:
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   147
            rs.req = req
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   148
            rs.vreg = self.vreg
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   149
            self.assertEqual(rs.limit(2).rows, [[12000, 'adim'], [13000, 'syt']])
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   150
            rs2 = rs.limit(2, offset=1)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   151
            self.assertEqual(rs2.rows, [[13000, 'syt'], [14000, 'nico']])
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   152
            self.assertEqual(rs2.get_entity(0, 0).cw_row, 0)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   153
            self.assertEqual(rs.limit(2, offset=2).rows, [[14000, 'nico']])
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   154
            self.assertEqual(rs.limit(2, offset=3).rows, [])
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   155
8048
10a0f73d834d [rset] replace entity cw_rset on .limit(inplace=True) will avoid pb if the entity is still referenced by some other entity relations cache. Closes #2065643
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7395
diff changeset
   156
    def test_limit_2(self):
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   157
        with self.admin_access.web_request() as req:
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   158
            # drop user from cache for the sake of this test
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   159
            req.drop_entity_cache(req.user.eid)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   160
            rs = req.execute('Any E,U WHERE E is CWEType, E created_by U')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   161
            # get entity on row 9. This will fill its created_by relation cache,
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   162
            # with cwuser on row 9 as well
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   163
            e1 = rs.get_entity(9, 0)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   164
            # get entity on row 10. This will fill its created_by relation cache,
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   165
            # with cwuser built on row 9
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   166
            e2 = rs.get_entity(10, 0)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   167
            # limit result set from row 10
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   168
            rs.limit(1, 10, inplace=True)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   169
            # get back eid
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   170
            e = rs.get_entity(0, 0)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   171
            self.assertTrue(e2 is e)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   172
            # rs.limit has properly removed cwuser for request cache, but it's
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   173
            # still referenced by e/e2 relation cache
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   174
            u = e.created_by[0]
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   175
            # now ensure this doesn't trigger IndexError because cwuser.cw_row is 9
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   176
            # while now rset has only one row
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   177
            u.cw_rset[u.cw_row]
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   178
8048
10a0f73d834d [rset] replace entity cw_rset on .limit(inplace=True) will avoid pb if the entity is still referenced by some other entity relations cache. Closes #2065643
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7395
diff changeset
   179
    def test_filter(self):
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   180
        rs = ResultSet([[12000, 'adim'], [13000, 'syt'], [14000, 'nico']],
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 692
diff changeset
   181
                       'Any U,L where U is CWUser, U login L',
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 692
diff changeset
   182
                       description=[['CWUser', 'String']] * 3)
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   183
        with self.admin_access.web_request() as req:
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   184
            rs.req = req
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   185
            rs.vreg = self.vreg
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   186
            def test_filter(entity):
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   187
                return entity.login != 'nico'
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   188
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   189
            rs2 = rs.filtered_rset(test_filter)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   190
            self.assertEqual(len(rs2), 2)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   191
            self.assertEqual([login for _, login in rs2], ['adim', 'syt'])
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   192
            self.assertEqual(rs2.description, rs.description[1:])
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   193
8048
10a0f73d834d [rset] replace entity cw_rset on .limit(inplace=True) will avoid pb if the entity is still referenced by some other entity relations cache. Closes #2065643
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7395
diff changeset
   194
    def test_transform(self):
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   195
        rs = ResultSet([[12, 'adim'], [13, 'syt'], [14, 'nico']],
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 692
diff changeset
   196
                       'Any U,L where U is CWUser, U login L',
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 692
diff changeset
   197
                       description=[['CWUser', 'String']] * 3)
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   198
        with self.admin_access.web_request() as req:
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   199
            rs.req = req
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   200
            def test_transform(row, desc):
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   201
                return row[1:], desc[1:]
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   202
            rs2 = rs.transformed_rset(test_transform)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   203
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   204
            self.assertEqual(len(rs2), 3)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   205
            self.assertEqual(list(rs2), [['adim'],['syt'],['nico']])
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   206
8048
10a0f73d834d [rset] replace entity cw_rset on .limit(inplace=True) will avoid pb if the entity is still referenced by some other entity relations cache. Closes #2065643
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7395
diff changeset
   207
    def test_sort(self):
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   208
        rs = ResultSet([[12000, 'adim'], [13000, 'syt'], [14000, 'nico']],
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 692
diff changeset
   209
                       'Any U,L where U is CWUser, U login L',
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 692
diff changeset
   210
                       description=[['CWUser', 'String']] * 3)
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   211
        with self.admin_access.web_request() as req:
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   212
            rs.req = req
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   213
            rs.vreg = self.vreg
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   214
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   215
            rs2 = rs.sorted_rset(lambda e:e.cw_attr_cache['login'])
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   216
            self.assertEqual(len(rs2), 3)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   217
            self.assertEqual([login for _, login in rs2], ['adim', 'nico', 'syt'])
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   218
            # make sure rs is unchanged
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   219
            self.assertEqual([login for _, login in rs], ['adim', 'syt', 'nico'])
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   220
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   221
            rs2 = rs.sorted_rset(lambda e:e.cw_attr_cache['login'], reverse=True)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   222
            self.assertEqual(len(rs2), 3)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   223
            self.assertEqual([login for _, login in rs2], ['syt', 'nico', 'adim'])
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   224
            # make sure rs is unchanged
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   225
            self.assertEqual([login for _, login in rs], ['adim', 'syt', 'nico'])
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   226
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   227
            rs3 = rs.sorted_rset(lambda row: row[1], col=-1)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   228
            self.assertEqual(len(rs3), 3)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   229
            self.assertEqual([login for _, login in rs3], ['adim', 'nico', 'syt'])
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   230
            # make sure rs is unchanged
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   231
            self.assertEqual([login for _, login in rs], ['adim', 'syt', 'nico'])
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   232
8048
10a0f73d834d [rset] replace entity cw_rset on .limit(inplace=True) will avoid pb if the entity is still referenced by some other entity relations cache. Closes #2065643
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7395
diff changeset
   233
    def test_split(self):
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   234
        rs = ResultSet([[12000, 'adim', u'Adim chez les pinguins'],
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   235
                        [12000, 'adim', u'Jardiner facile'],
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   236
                        [13000, 'syt',  u'Le carrelage en 42 leçons'],
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   237
                        [14000, 'nico', u'La tarte tatin en 15 minutes'],
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   238
                        [14000, 'nico', u"L'épluchage du castor commun"]],
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 692
diff changeset
   239
                       'Any U, L, T WHERE U is CWUser, U login L,'\
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   240
                       'D created_by U, D title T',
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 692
diff changeset
   241
                       description=[['CWUser', 'String', 'String']] * 5)
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   242
        with self.admin_access.web_request() as req:
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   243
            rs.req = req
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   244
            rs.vreg = self.vreg
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   245
            rsets = rs.split_rset(lambda e:e.cw_attr_cache['login'])
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   246
            self.assertEqual(len(rsets), 3)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   247
            self.assertEqual([login for _, login,_ in rsets[0]], ['adim', 'adim'])
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   248
            self.assertEqual([login for _, login,_ in rsets[1]], ['syt'])
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   249
            self.assertEqual([login for _, login,_ in rsets[2]], ['nico', 'nico'])
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   250
            # make sure rs is unchanged
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   251
            self.assertEqual([login for _, login,_ in rs], ['adim', 'adim', 'syt', 'nico', 'nico'])
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   252
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   253
            rsets = rs.split_rset(lambda e:e.cw_attr_cache['login'], return_dict=True)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   254
            self.assertEqual(len(rsets), 3)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   255
            self.assertEqual([login for _, login,_ in rsets['nico']], ['nico', 'nico'])
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   256
            self.assertEqual([login for _, login,_ in rsets['adim']], ['adim', 'adim'])
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   257
            self.assertEqual([login for _, login,_ in rsets['syt']], ['syt'])
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   258
            # make sure rs is unchanged
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   259
            self.assertEqual([login for _, login,_ in rs], ['adim', 'adim', 'syt', 'nico', 'nico'])
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   260
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   261
            rsets = rs.split_rset(lambda s: s.count('d'), col=2)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   262
            self.assertEqual(len(rsets), 2)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   263
            self.assertEqual([title for _, _, title in rsets[0]],
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   264
                              [u"Adim chez les pinguins",
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   265
                               u"Jardiner facile",
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   266
                               u"L'épluchage du castor commun",])
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   267
            self.assertEqual([title for _, _, title in rsets[1]],
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   268
                              [u"Le carrelage en 42 leçons",
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   269
                               u"La tarte tatin en 15 minutes",])
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   270
            # make sure rs is unchanged
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   271
            self.assertEqual([title for _, _, title in rs],
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   272
                              [u'Adim chez les pinguins',
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   273
                               u'Jardiner facile',
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   274
                               u'Le carrelage en 42 leçons',
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   275
                               u'La tarte tatin en 15 minutes',
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   276
                               u"L'épluchage du castor commun"])
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   277
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   278
    def test_cached_syntax_tree(self):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   279
        """make sure syntax tree is cached"""
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   280
        rqlst1 = self.rset.syntax_tree()
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   281
        rqlst2 = self.rset.syntax_tree()
10600
180aa08cad48 [tests] Replace use of deprecated TestCase.assert_
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10187
diff changeset
   282
        self.assertIs(rqlst1, rqlst2)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   283
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   284
    def test_get_entity_simple(self):
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   285
        with self.admin_access.web_request() as req:
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   286
            req.create_entity('CWUser', login=u'adim', upassword='adim',
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   287
                                         surname=u'di mascio', firstname=u'adrien')
10997
da712d3f0601 Bring back the separate web-side entity cache
Julien Cristau <julien.cristau@logilab.fr>
parents: 10722
diff changeset
   288
            req.drop_entity_cache()
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   289
            e = req.execute('Any X,T WHERE X login "adim", X surname T').get_entity(0, 0)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   290
            self.assertEqual(e.cw_attr_cache['surname'], 'di mascio')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   291
            self.assertRaises(KeyError, e.cw_attr_cache.__getitem__, 'firstname')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   292
            self.assertRaises(KeyError, e.cw_attr_cache.__getitem__, 'creation_date')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   293
            self.assertEqual(pprelcachedict(e._cw_related_cache), [])
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   294
            e.complete()
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   295
            self.assertEqual(e.cw_attr_cache['firstname'], 'adrien')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   296
            self.assertEqual(pprelcachedict(e._cw_related_cache), [])
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   297
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   298
    def test_get_entity_advanced(self):
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   299
        with self.admin_access.web_request() as req:
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   300
            req.create_entity('Bookmark', title=u'zou', path=u'/view')
10997
da712d3f0601 Bring back the separate web-side entity cache
Julien Cristau <julien.cristau@logilab.fr>
parents: 10722
diff changeset
   301
            req.drop_entity_cache()
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   302
            req.execute('SET X bookmarked_by Y WHERE X is Bookmark, Y login "anon"')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   303
            rset = req.execute('Any X,Y,XT,YN WHERE X bookmarked_by Y, X title XT, Y login YN')
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   304
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   305
            e = rset.get_entity(0, 0)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   306
            self.assertEqual(e.cw_row, 0)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   307
            self.assertEqual(e.cw_col, 0)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   308
            self.assertEqual(e.cw_attr_cache['title'], 'zou')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   309
            self.assertRaises(KeyError, e.cw_attr_cache.__getitem__, 'path')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   310
            self.assertEqual(e.view('text'), 'zou')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   311
            self.assertEqual(pprelcachedict(e._cw_related_cache), [])
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   312
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   313
            e = rset.get_entity(0, 1)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   314
            self.assertEqual(e.cw_row, 0)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   315
            self.assertEqual(e.cw_col, 1)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   316
            self.assertEqual(e.cw_attr_cache['login'], 'anon')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   317
            self.assertRaises(KeyError, e.cw_attr_cache.__getitem__, 'firstname')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   318
            self.assertEqual(pprelcachedict(e._cw_related_cache),
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   319
                              [])
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   320
            e.complete()
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   321
            self.assertEqual(e.cw_attr_cache['firstname'], None)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   322
            self.assertEqual(e.view('text'), 'anon')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   323
            self.assertEqual(pprelcachedict(e._cw_related_cache),
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   324
                              [])
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   325
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   326
            self.assertRaises(NotAnEntity, rset.get_entity, 0, 2)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   327
            self.assertRaises(NotAnEntity, rset.get_entity, 0, 3)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   328
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   329
    def test_get_entity_relation_cache_compt(self):
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   330
        with self.admin_access.web_request() as req:
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   331
            rset = req.execute('Any X,S WHERE X in_state S, X login "anon"')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   332
            e = rset.get_entity(0, 0)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   333
            seid = req.execute('State X WHERE X name "activated"')[0][0]
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   334
            # for_user / in_group are prefetched in CWUser __init__, in_state should
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   335
            # be filed from our query rset
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   336
            self.assertEqual(pprelcachedict(e._cw_related_cache),
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   337
                              [('in_state_subject', [seid])])
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   338
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   339
    def test_get_entity_advanced_prefilled_cache(self):
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   340
        with self.admin_access.web_request() as req:
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   341
            e = req.create_entity('Bookmark', title=u'zou', path=u'path')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   342
            req.cnx.commit()
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   343
            rset = req.execute('Any X,U,S,XT,UL,SN WHERE X created_by U, U in_state S, '
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   344
                                'X title XT, S name SN, U login UL, X eid %s' % e.eid)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   345
            e = rset.get_entity(0, 0)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   346
            self.assertEqual(e.cw_attr_cache['title'], 'zou')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   347
            self.assertEqual(pprelcachedict(e._cw_related_cache),
10997
da712d3f0601 Bring back the separate web-side entity cache
Julien Cristau <julien.cristau@logilab.fr>
parents: 10722
diff changeset
   348
                             [('created_by_subject', [req.user.eid])])
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   349
            # first level of recursion
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   350
            u = e.created_by[0]
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   351
            self.assertEqual(u.cw_attr_cache['login'], 'admin')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   352
            self.assertRaises(KeyError, u.cw_attr_cache.__getitem__, 'firstname')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   353
            # second level of recursion
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   354
            s = u.in_state[0]
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   355
            self.assertEqual(s.cw_attr_cache['name'], 'activated')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   356
            self.assertRaises(KeyError, s.cw_attr_cache.__getitem__, 'description')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   357
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   358
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   359
    def test_get_entity_cache_with_left_outer_join(self):
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   360
        with self.admin_access.web_request() as req:
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   361
            eid = req.execute('INSERT CWUser E: E login "joe", E upassword "joe", E in_group G '
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   362
                               'WHERE G name "users"')[0][0]
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   363
            rset = req.execute('Any X,E WHERE X eid %(x)s, X primary_email E?', {'x': eid})
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   364
            e = rset.get_entity(0, 0)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   365
            # if any of the assertion below fails with a KeyError, the relation is not cached
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   366
            # related entities should be an empty list
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   367
            self.assertEqual(e._cw_related_cache['primary_email_subject'][True], ())
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   368
            # related rset should be an empty rset
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   369
            cached = e._cw_related_cache['primary_email_subject'][False]
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   370
            self.assertIsInstance(cached, ResultSet)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   371
            self.assertEqual(cached.rowcount, 0)
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   372
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   373
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   374
    def test_get_entity_union(self):
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   375
        with self.admin_access.web_request() as req:
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   376
            e = req.create_entity('Bookmark', title=u'manger', path=u'path')
10997
da712d3f0601 Bring back the separate web-side entity cache
Julien Cristau <julien.cristau@logilab.fr>
parents: 10722
diff changeset
   377
            req.drop_entity_cache()
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   378
            rset = req.execute('Any X,N ORDERBY N WITH X,N BEING '
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   379
                                '((Any X,N WHERE X is Bookmark, X title N)'
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   380
                                ' UNION '
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   381
                                ' (Any X,N WHERE X is CWGroup, X name N))')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   382
            expected = (('CWGroup', 'guests'), ('CWGroup', 'managers'),
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   383
                        ('Bookmark', 'manger'), ('CWGroup', 'owners'),
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   384
                        ('CWGroup', 'users'))
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   385
            for entity in rset.entities(): # test get_entity for each row actually
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   386
                etype, n = expected[entity.cw_row]
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   387
                self.assertEqual(entity.cw_etype, etype)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   388
                attr = etype == 'Bookmark' and 'title' or 'name'
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   389
                self.assertEqual(entity.cw_attr_cache[attr], n)
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   390
9347
bd841d6ae723 [rset] New method: ResultSet.one()
Christophe de Vienne <cdevienne@gmail.com>
parents: 9331
diff changeset
   391
    def test_one(self):
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   392
        with self.admin_access.web_request() as req:
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   393
            req.create_entity('CWUser', login=u'cdevienne',
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   394
                                         upassword=u'cdevienne',
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   395
                                         surname=u'de Vienne',
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   396
                                         firstname=u'Christophe')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   397
            e = req.execute('Any X WHERE X login "cdevienne"').one()
9347
bd841d6ae723 [rset] New method: ResultSet.one()
Christophe de Vienne <cdevienne@gmail.com>
parents: 9331
diff changeset
   398
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   399
            self.assertEqual(e.surname, u'de Vienne')
9347
bd841d6ae723 [rset] New method: ResultSet.one()
Christophe de Vienne <cdevienne@gmail.com>
parents: 9331
diff changeset
   400
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   401
            e = req.execute(
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   402
                'Any X, N WHERE X login "cdevienne", X surname N').one()
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   403
            self.assertEqual(e.surname, u'de Vienne')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   404
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   405
            e = req.execute(
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   406
                'Any N, X WHERE X login "cdevienne", X surname N').one(col=1)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   407
            self.assertEqual(e.surname, u'de Vienne')
9347
bd841d6ae723 [rset] New method: ResultSet.one()
Christophe de Vienne <cdevienne@gmail.com>
parents: 9331
diff changeset
   408
bd841d6ae723 [rset] New method: ResultSet.one()
Christophe de Vienne <cdevienne@gmail.com>
parents: 9331
diff changeset
   409
    def test_one_no_rows(self):
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   410
        with self.admin_access.web_request() as req:
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   411
            with self.assertRaises(NoResultError):
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   412
                req.execute('Any X WHERE X login "patanok"').one()
9347
bd841d6ae723 [rset] New method: ResultSet.one()
Christophe de Vienne <cdevienne@gmail.com>
parents: 9331
diff changeset
   413
bd841d6ae723 [rset] New method: ResultSet.one()
Christophe de Vienne <cdevienne@gmail.com>
parents: 9331
diff changeset
   414
    def test_one_multiple_rows(self):
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   415
        with self.admin_access.web_request() as req:
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   416
            req.create_entity(
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   417
                'CWUser', login=u'cdevienne', upassword=u'cdevienne',
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   418
                surname=u'de Vienne', firstname=u'Christophe')
9347
bd841d6ae723 [rset] New method: ResultSet.one()
Christophe de Vienne <cdevienne@gmail.com>
parents: 9331
diff changeset
   419
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   420
            req.create_entity(
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   421
                'CWUser', login=u'adim', upassword='adim', surname=u'di mascio',
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   422
                firstname=u'adrien')
9347
bd841d6ae723 [rset] New method: ResultSet.one()
Christophe de Vienne <cdevienne@gmail.com>
parents: 9331
diff changeset
   423
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   424
            with self.assertRaises(MultipleResultsError):
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   425
                req.execute('Any X WHERE X is CWUser').one()
9347
bd841d6ae723 [rset] New method: ResultSet.one()
Christophe de Vienne <cdevienne@gmail.com>
parents: 9331
diff changeset
   426
572
9849fed789c9 test and fix potential error with None optional relation
sylvain.thenault@logilab.fr
parents: 0
diff changeset
   427
    def test_related_entity_optional(self):
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   428
        with self.admin_access.web_request() as req:
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   429
            e = req.create_entity('Bookmark', title=u'aaaa', path=u'path')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   430
            rset = req.execute('Any B,U,L WHERE B bookmarked_by U?, U login L')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   431
            entity, rtype = rset.related_entity(0, 2)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   432
            self.assertEqual(entity, None)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   433
            self.assertEqual(rtype, None)
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   434
6915
99eb71b311e4 [rset] fix entity building for some result set with UNION and subqueries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6857
diff changeset
   435
    def test_related_entity_union_subquery_1(self):
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   436
        with self.admin_access.web_request() as req:
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   437
            e = req.create_entity('Bookmark', title=u'aaaa', path=u'path')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   438
            rset = req.execute('Any X,N ORDERBY N WITH X,N BEING '
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   439
                                '((Any X,N WHERE X is CWGroup, X name N)'
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   440
                                ' UNION '
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   441
                                ' (Any X,N WHERE X is Bookmark, X title N))')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   442
            entity, rtype = rset.related_entity(0, 1)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   443
            self.assertEqual(entity.eid, e.eid)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   444
            self.assertEqual(rtype, 'title')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   445
            self.assertEqual(entity.title, 'aaaa')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   446
            entity, rtype = rset.related_entity(1, 1)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   447
            self.assertEqual(entity.cw_etype, 'CWGroup')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   448
            self.assertEqual(rtype, 'name')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   449
            self.assertEqual(entity.name, 'guests')
6915
99eb71b311e4 [rset] fix entity building for some result set with UNION and subqueries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6857
diff changeset
   450
99eb71b311e4 [rset] fix entity building for some result set with UNION and subqueries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6857
diff changeset
   451
    def test_related_entity_union_subquery_2(self):
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   452
        with self.admin_access.web_request() as req:
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   453
            e = req.create_entity('Bookmark', title=u'aaaa', path=u'path')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   454
            rset = req.execute('Any X,N ORDERBY N WHERE X is Bookmark WITH X,N BEING '
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   455
                                '((Any X,N WHERE X is CWGroup, X name N)'
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   456
                                ' UNION '
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   457
                                ' (Any X,N WHERE X is Bookmark, X title N))')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   458
            entity, rtype = rset.related_entity(0, 1)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   459
            self.assertEqual(entity.eid, e.eid)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   460
            self.assertEqual(rtype, 'title')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   461
            self.assertEqual(entity.title, 'aaaa')
6915
99eb71b311e4 [rset] fix entity building for some result set with UNION and subqueries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6857
diff changeset
   462
99eb71b311e4 [rset] fix entity building for some result set with UNION and subqueries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6857
diff changeset
   463
    def test_related_entity_union_subquery_3(self):
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   464
        with self.admin_access.web_request() as req:
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   465
            e = req.create_entity('Bookmark', title=u'aaaa', path=u'path')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   466
            rset = req.execute('Any X,N ORDERBY N WITH N,X BEING '
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   467
                                '((Any N,X WHERE X is CWGroup, X name N)'
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   468
                                ' UNION '
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   469
                                ' (Any N,X WHERE X is Bookmark, X title N))')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   470
            entity, rtype = rset.related_entity(0, 1)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   471
            self.assertEqual(entity.eid, e.eid)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   472
            self.assertEqual(rtype, 'title')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   473
            self.assertEqual(entity.title, 'aaaa')
6915
99eb71b311e4 [rset] fix entity building for some result set with UNION and subqueries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6857
diff changeset
   474
99eb71b311e4 [rset] fix entity building for some result set with UNION and subqueries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6857
diff changeset
   475
    def test_related_entity_union_subquery_4(self):
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   476
        with self.admin_access.web_request() as req:
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   477
            e = req.create_entity('Bookmark', title=u'aaaa', path=u'path')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   478
            rset = req.execute('Any X,X, N ORDERBY N WITH X,N BEING '
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   479
                                '((Any X,N WHERE X is CWGroup, X name N)'
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   480
                                ' UNION '
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   481
                                ' (Any X,N WHERE X is Bookmark, X title N))')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   482
            entity, rtype = rset.related_entity(0, 2)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   483
            self.assertEqual(entity.eid, e.eid)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   484
            self.assertEqual(rtype, 'title')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   485
            self.assertEqual(entity.title, 'aaaa')
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   486
4427
410c99a917fa fix rset.related_entity with variables coming from subquery while some others not
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
   487
    def test_related_entity_trap_subquery(self):
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   488
        with self.admin_access.web_request() as req:
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   489
            req.create_entity('Bookmark', title=u'test bookmark', path=u'')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   490
            req.execute('SET B bookmarked_by U WHERE U login "admin"')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   491
            rset = req.execute('Any B,T,L WHERE B bookmarked_by U, U login L '
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   492
                                'WITH B,T BEING (Any B,T WHERE B is Bookmark, B title T)')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   493
            rset.related_entity(0, 2)
4427
410c99a917fa fix rset.related_entity with variables coming from subquery while some others not
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
   494
6195
a0c4441e6ddf [rset] add test for #1251252, actually fixed in rql; fix docstring and add comments in rset.related_entity to make things clearer
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5752
diff changeset
   495
    def test_related_entity_subquery_outerjoin(self):
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   496
        with self.admin_access.web_request() as req:
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   497
            rset = req.execute('Any X,S,L WHERE X in_state S '
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   498
                                'WITH X, L BEING (Any X,MAX(L) GROUPBY X '
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   499
                                'WHERE X is CWUser, T? wf_info_for X, T creation_date L)')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   500
            self.assertEqual(len(rset), 2)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   501
            rset.related_entity(0, 1)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   502
            rset.related_entity(0, 2)
6195
a0c4441e6ddf [rset] add test for #1251252, actually fixed in rql; fix docstring and add comments in rset.related_entity to make things clearer
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5752
diff changeset
   503
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   504
    def test_entities(self):
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   505
        with self.admin_access.web_request() as req:
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   506
            rset = req.execute('Any U,G WHERE U in_group G')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   507
            # make sure we have at least one element
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   508
            self.assertTrue(rset)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   509
            self.assertEqual(set(e.e_schema.type for e in rset.entities(0)),
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   510
                              set(['CWUser',]))
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   511
            self.assertEqual(set(e.e_schema.type for e in rset.entities(1)),
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   512
                              set(['CWGroup',]))
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   513
6857
8d2062387134 [rset] add utility method to get entities and attributes from any rset
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 6415
diff changeset
   514
    def test_iter_rows_with_entities(self):
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   515
        with self.admin_access.web_request() as req:
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   516
            rset = req.execute('Any U,UN,G,GN WHERE U in_group G, U login UN, G name GN')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   517
            # make sure we have at least one element
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   518
            self.assertTrue(rset)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   519
            out = list(rset.iter_rows_with_entities())[0]
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   520
            self.assertEqual( out[0].login, out[1] )
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   521
            self.assertEqual( out[2].name, out[3] )
6857
8d2062387134 [rset] add utility method to get entities and attributes from any rset
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 6415
diff changeset
   522
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   523
    def test_printable_rql(self):
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   524
        with self.admin_access.web_request() as req:
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   525
            rset = req.execute(u'CWEType X WHERE X final FALSE')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   526
            self.assertEqual(rset.printable_rql(),
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   527
                              'Any X WHERE X final FALSE, X is CWEType')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   528
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   529
    def test_searched_text(self):
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   530
        with self.admin_access.web_request() as req:
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   531
            rset = req.execute(u'Any X WHERE X has_text "foobar"')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   532
            self.assertEqual(rset.searched_text(), 'foobar')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   533
            rset = req.execute(u'Any X WHERE X has_text %(text)s', {'text' : 'foo'})
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   534
            self.assertEqual(rset.searched_text(), 'foo')
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   535
4939
349af486f5ed fix limited_rql w/ UNION query
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4536
diff changeset
   536
    def test_union_limited_rql(self):
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   537
        with self.admin_access.web_request() as req:
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   538
            rset = req.execute('(Any X,N WHERE X is Bookmark, X title N)'
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   539
                                ' UNION '
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   540
                                '(Any X,N WHERE X is CWGroup, X name N)')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   541
            rset.limit(2, 10, inplace=True)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   542
            self.assertEqual(rset.limited_rql(),
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   543
                              'Any A,B LIMIT 2 OFFSET 10 '
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   544
                              'WITH A,B BEING ('
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   545
                              '(Any X,N WHERE X is Bookmark, X title N) '
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   546
                              'UNION '
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   547
                              '(Any X,N WHERE X is CWGroup, X name N)'
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   548
                              ')')
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   549
5667
04cbd80fd5dc [rset] do not break when rset.related_entity(x,y) is not an entity
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 5426
diff changeset
   550
    def test_count_users_by_date(self):
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   551
        with self.admin_access.web_request() as req:
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   552
            rset = req.execute('Any D, COUNT(U) GROUPBY D WHERE U is CWUser, U creation_date D')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   553
            self.assertEqual(rset.related_entity(0,0), (None, None))
5667
04cbd80fd5dc [rset] do not break when rset.related_entity(x,y) is not an entity
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 5426
diff changeset
   554
5687
3ea39709b50e [rset] Add a line break the first result in repr of multiple rows rset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 5679
diff changeset
   555
    def test_str(self):
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   556
        with self.admin_access.web_request() as req:
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   557
            rset = req.execute('(Any X,N WHERE X is CWGroup, X name N)')
10612
84468b90e9c1 [py3k] basestring → six.string_types
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10603
diff changeset
   558
            self.assertIsInstance(str(rset), string_types)
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   559
            self.assertEqual(len(str(rset).splitlines()), 1)
5687
3ea39709b50e [rset] Add a line break the first result in repr of multiple rows rset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 5679
diff changeset
   560
3ea39709b50e [rset] Add a line break the first result in repr of multiple rows rset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 5679
diff changeset
   561
    def test_repr(self):
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   562
        with self.admin_access.web_request() as req:
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   563
            rset = req.execute('(Any X,N WHERE X is CWGroup, X name N)')
10612
84468b90e9c1 [py3k] basestring → six.string_types
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10603
diff changeset
   564
            self.assertIsInstance(repr(rset), string_types)
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   565
            self.assertTrue(len(repr(rset).splitlines()) > 1)
5687
3ea39709b50e [rset] Add a line break the first result in repr of multiple rows rset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 5679
diff changeset
   566
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   567
            rset = req.execute('(Any X WHERE X is CWGroup, X name "managers")')
10612
84468b90e9c1 [py3k] basestring → six.string_types
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10603
diff changeset
   568
            self.assertIsInstance(str(rset), string_types)
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   569
            self.assertEqual(len(str(rset).splitlines()), 1)
5687
3ea39709b50e [rset] Add a line break the first result in repr of multiple rows rset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 5679
diff changeset
   570
10691
af266f27c4d5 [py3k] __getslice__ → __getitem__ with slice support
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10612
diff changeset
   571
    def test_slice(self):
af266f27c4d5 [py3k] __getslice__ → __getitem__ with slice support
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10612
diff changeset
   572
        rs = ResultSet([[12000, 'adim', u'Adim chez les pinguins'],
af266f27c4d5 [py3k] __getslice__ → __getitem__ with slice support
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10612
diff changeset
   573
                        [12000, 'adim', u'Jardiner facile'],
af266f27c4d5 [py3k] __getslice__ → __getitem__ with slice support
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10612
diff changeset
   574
                        [13000, 'syt',  u'Le carrelage en 42 leçons'],
af266f27c4d5 [py3k] __getslice__ → __getitem__ with slice support
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10612
diff changeset
   575
                        [14000, 'nico', u'La tarte tatin en 15 minutes'],
af266f27c4d5 [py3k] __getslice__ → __getitem__ with slice support
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10612
diff changeset
   576
                        [14000, 'nico', u"L'épluchage du castor commun"]],
af266f27c4d5 [py3k] __getslice__ → __getitem__ with slice support
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10612
diff changeset
   577
                       'Any U, L, T WHERE U is CWUser, U login L,'\
af266f27c4d5 [py3k] __getslice__ → __getitem__ with slice support
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10612
diff changeset
   578
                       'D created_by U, D title T',
af266f27c4d5 [py3k] __getslice__ → __getitem__ with slice support
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10612
diff changeset
   579
                       description=[['CWUser', 'String', 'String']] * 5)
af266f27c4d5 [py3k] __getslice__ → __getitem__ with slice support
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10612
diff changeset
   580
        self.assertEqual(rs[1::2],
af266f27c4d5 [py3k] __getslice__ → __getitem__ with slice support
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10612
diff changeset
   581
            [[12000, 'adim', u'Jardiner facile'],
af266f27c4d5 [py3k] __getslice__ → __getitem__ with slice support
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10612
diff changeset
   582
             [14000, 'nico', u'La tarte tatin en 15 minutes']])
af266f27c4d5 [py3k] __getslice__ → __getitem__ with slice support
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10612
diff changeset
   583
10180
ea10572fccfe [rset] fix crash on displaying rset where some symmetric relation is used. Closes #4739253
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9656
diff changeset
   584
    def test_nonregr_symmetric_relation(self):
ea10572fccfe [rset] fix crash on displaying rset where some symmetric relation is used. Closes #4739253
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9656
diff changeset
   585
        # see https://www.cubicweb.org/ticket/4739253
ea10572fccfe [rset] fix crash on displaying rset where some symmetric relation is used. Closes #4739253
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9656
diff changeset
   586
        with self.admin_access.client_cnx() as cnx:
ea10572fccfe [rset] fix crash on displaying rset where some symmetric relation is used. Closes #4739253
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9656
diff changeset
   587
            p1 = cnx.create_entity('Personne', nom=u'sylvain')
ea10572fccfe [rset] fix crash on displaying rset where some symmetric relation is used. Closes #4739253
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9656
diff changeset
   588
            cnx.create_entity('Personne', nom=u'denis', connait=p1)
ea10572fccfe [rset] fix crash on displaying rset where some symmetric relation is used. Closes #4739253
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9656
diff changeset
   589
            cnx.commit()
ea10572fccfe [rset] fix crash on displaying rset where some symmetric relation is used. Closes #4739253
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9656
diff changeset
   590
            rset = cnx.execute('Any X,Y WHERE X connait Y')
ea10572fccfe [rset] fix crash on displaying rset where some symmetric relation is used. Closes #4739253
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9656
diff changeset
   591
            rset.get_entity(0, 1) # used to raise KeyError
8085
51929d531aff [rset] fix crash while building entity from rset w/ some subquery. Closes #2089055
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8048
diff changeset
   592
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   593
if __name__ == '__main__':
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   594
    unittest_main()