cubicweb/test/unittest_rset.py
author Alexandre Richardson <alexandre.richardson@logilab.fr>
Tue, 12 Jan 2016 14:31:14 +0100
changeset 11169 c1eb5a676c80
parent 11057 0b59724cb3f2
child 11171 b81e543e623a
permissions -rw-r--r--
[rset] Always complete attribute/relation caches in ResultSet.get_entity RQL queries are often designed to fill up the ORM's caches when fetching entities out of the result set. Until now, if an entry already existed in the entity cache, ResultSet.get_entity would return it unchanged, not using the new ResultSet's contents to update the attribute cache, breaking expectations (if the attributes are needed, they'd then be fetched later one at a time, one entity at a time), resulting in loads of DB accesses. So we change ResultSet.get_entity so that: * if the entity is already cached and has been instantiated from the same rset, it is returned as-is (to avoid loops) * if the entity is not yet cached, it is instantiated * if the entity is cached via another rset, its attribute/relation caches are completed Closes #9942503
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')
11169
c1eb5a676c80 [rset] Always complete attribute/relation caches in ResultSet.get_entity
Alexandre Richardson <alexandre.richardson@logilab.fr>
parents: 11057
diff changeset
   310
            other_rset = req.execute('Any X, P WHERE X is Bookmark, X path P')
c1eb5a676c80 [rset] Always complete attribute/relation caches in ResultSet.get_entity
Alexandre Richardson <alexandre.richardson@logilab.fr>
parents: 11057
diff changeset
   311
            # check that get_entity fetches e from the request's cache, and
c1eb5a676c80 [rset] Always complete attribute/relation caches in ResultSet.get_entity
Alexandre Richardson <alexandre.richardson@logilab.fr>
parents: 11057
diff changeset
   312
            # updates it with attributes from the new rset
c1eb5a676c80 [rset] Always complete attribute/relation caches in ResultSet.get_entity
Alexandre Richardson <alexandre.richardson@logilab.fr>
parents: 11057
diff changeset
   313
            self.assertIs(other_rset.get_entity(0, 0), e)
c1eb5a676c80 [rset] Always complete attribute/relation caches in ResultSet.get_entity
Alexandre Richardson <alexandre.richardson@logilab.fr>
parents: 11057
diff changeset
   314
            self.assertIn('path', e.cw_attr_cache)
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   315
            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
   316
            self.assertEqual(pprelcachedict(e._cw_related_cache), [])
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   317
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   318
            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
   319
            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
   320
            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
   321
            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
   322
            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
   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
                              [])
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   325
            e.complete()
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   326
            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
   327
            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
   328
            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
   329
                              [])
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   330
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   331
            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
   332
            self.assertRaises(NotAnEntity, rset.get_entity, 0, 3)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   333
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   334
    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
   335
        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
   336
            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
   337
            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
   338
            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
   339
            # 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
   340
            # 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
   341
            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
   342
                              [('in_state_subject', [seid])])
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   343
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   344
    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
   345
        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
   346
            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
   347
            req.cnx.commit()
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   348
            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
   349
                                '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
   350
            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
   351
            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
   352
            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
   353
                             [('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
   354
            # first level of recursion
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   355
            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
   356
            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
   357
            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
   358
            # second level of recursion
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   359
            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
   360
            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
   361
            self.assertRaises(KeyError, s.cw_attr_cache.__getitem__, 'description')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   362
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   363
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   364
    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
   365
        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
   366
            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
   367
                               '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
   368
            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
   369
            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
   370
            # 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
   371
            # 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
   372
            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
   373
            # 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
   374
            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
   375
            self.assertIsInstance(cached, ResultSet)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   376
            self.assertEqual(cached.rowcount, 0)
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   377
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   378
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   379
    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
   380
        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
   381
            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
   382
            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
   383
            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
   384
                                '((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
   385
                                ' UNION '
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   386
                                ' (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
   387
            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
   388
                        ('Bookmark', 'manger'), ('CWGroup', 'owners'),
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   389
                        ('CWGroup', 'users'))
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   390
            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
   391
                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
   392
                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
   393
                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
   394
                self.assertEqual(entity.cw_attr_cache[attr], n)
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   395
9347
bd841d6ae723 [rset] New method: ResultSet.one()
Christophe de Vienne <cdevienne@gmail.com>
parents: 9331
diff changeset
   396
    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
   397
        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
   398
            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
   399
                                         upassword=u'cdevienne',
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   400
                                         surname=u'de Vienne',
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   401
                                         firstname=u'Christophe')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   402
            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
   403
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   404
            self.assertEqual(e.surname, u'de Vienne')
9347
bd841d6ae723 [rset] New method: ResultSet.one()
Christophe de Vienne <cdevienne@gmail.com>
parents: 9331
diff changeset
   405
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   406
            e = req.execute(
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   407
                '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
   408
            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
   409
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   410
            e = req.execute(
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   411
                '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
   412
            self.assertEqual(e.surname, u'de Vienne')
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_no_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
            with self.assertRaises(NoResultError):
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   417
                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
   418
bd841d6ae723 [rset] New method: ResultSet.one()
Christophe de Vienne <cdevienne@gmail.com>
parents: 9331
diff changeset
   419
    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
   420
        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
   421
            req.create_entity(
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   422
                '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
   423
                surname=u'de Vienne', firstname=u'Christophe')
9347
bd841d6ae723 [rset] New method: ResultSet.one()
Christophe de Vienne <cdevienne@gmail.com>
parents: 9331
diff changeset
   424
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   425
            req.create_entity(
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   426
                '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
   427
                firstname=u'adrien')
9347
bd841d6ae723 [rset] New method: ResultSet.one()
Christophe de Vienne <cdevienne@gmail.com>
parents: 9331
diff changeset
   428
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   429
            with self.assertRaises(MultipleResultsError):
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   430
                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
   431
572
9849fed789c9 test and fix potential error with None optional relation
sylvain.thenault@logilab.fr
parents: 0
diff changeset
   432
    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
   433
        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
   434
            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
   435
            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
   436
            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
   437
            self.assertEqual(entity, None)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   438
            self.assertEqual(rtype, None)
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   439
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
   440
    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
   441
        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
   442
            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
   443
            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
   444
                                '((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
   445
                                ' UNION '
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   446
                                ' (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
   447
            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
   448
            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
   449
            self.assertEqual(rtype, 'title')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   450
            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
   451
            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
   452
            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
   453
            self.assertEqual(rtype, 'name')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   454
            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
   455
99eb71b311e4 [rset] fix entity building for some result set with UNION and subqueries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6857
diff changeset
   456
    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
   457
        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
   458
            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
   459
            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
   460
                                '((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
   461
                                ' UNION '
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   462
                                ' (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
   463
            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
   464
            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
   465
            self.assertEqual(rtype, 'title')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   466
            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
   467
99eb71b311e4 [rset] fix entity building for some result set with UNION and subqueries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6857
diff changeset
   468
    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
   469
        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
   470
            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
   471
            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
   472
                                '((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
   473
                                ' UNION '
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   474
                                ' (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
   475
            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
   476
            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
   477
            self.assertEqual(rtype, 'title')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   478
            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
   479
99eb71b311e4 [rset] fix entity building for some result set with UNION and subqueries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6857
diff changeset
   480
    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
   481
        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
   482
            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
   483
            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
   484
                                '((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
   485
                                ' UNION '
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   486
                                ' (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
   487
            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
   488
            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
   489
            self.assertEqual(rtype, 'title')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   490
            self.assertEqual(entity.title, 'aaaa')
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   491
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
   492
    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
   493
        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
   494
            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
   495
            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
   496
            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
   497
                                '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
   498
            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
   499
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
   500
    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
   501
        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
   502
            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
   503
                                '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
   504
                                '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
   505
            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
   506
            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
   507
            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
   508
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   509
    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
   510
        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
   511
            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
   512
            # 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
   513
            self.assertTrue(rset)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   514
            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
   515
                              set(['CWUser',]))
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   516
            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
   517
                              set(['CWGroup',]))
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   518
6857
8d2062387134 [rset] add utility method to get entities and attributes from any rset
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 6415
diff changeset
   519
    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
   520
        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
   521
            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
   522
            # 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
   523
            self.assertTrue(rset)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   524
            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
   525
            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
   526
            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
   527
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   528
    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
   529
        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
   530
            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
   531
            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
   532
                              'Any X WHERE X final FALSE, X is CWEType')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   533
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   534
    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
   535
        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
   536
            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
   537
            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
   538
            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
   539
            self.assertEqual(rset.searched_text(), 'foo')
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   540
4939
349af486f5ed fix limited_rql w/ UNION query
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4536
diff changeset
   541
    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
   542
        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
   543
            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
   544
                                ' UNION '
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 CWGroup, X name N)')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   546
            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
   547
            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
   548
                              '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
   549
                              'WITH A,B BEING ('
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   550
                              '(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
   551
                              'UNION '
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   552
                              '(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
   553
                              ')')
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   554
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
   555
    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
   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 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
   558
            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
   559
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
    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
   561
        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
   562
            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
   563
            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
   564
            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
   565
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
    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
   567
        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
   568
            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
   569
            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
   570
            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
   571
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   572
            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
   573
            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
   574
            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
   575
10691
af266f27c4d5 [py3k] __getslice__ → __getitem__ with slice support
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10612
diff changeset
   576
    def test_slice(self):
af266f27c4d5 [py3k] __getslice__ → __getitem__ with slice support
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10612
diff changeset
   577
        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
   578
                        [12000, 'adim', u'Jardiner facile'],
af266f27c4d5 [py3k] __getslice__ → __getitem__ with slice support
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10612
diff changeset
   579
                        [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
   580
                        [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
   581
                        [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
   582
                       '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
   583
                       '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
   584
                       description=[['CWUser', 'String', 'String']] * 5)
af266f27c4d5 [py3k] __getslice__ → __getitem__ with slice support
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10612
diff changeset
   585
        self.assertEqual(rs[1::2],
af266f27c4d5 [py3k] __getslice__ → __getitem__ with slice support
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10612
diff changeset
   586
            [[12000, 'adim', u'Jardiner facile'],
af266f27c4d5 [py3k] __getslice__ → __getitem__ with slice support
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10612
diff changeset
   587
             [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
   588
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
   589
    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
   590
        # 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
   591
        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
   592
            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
   593
            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
   594
            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
   595
            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
   596
            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
   597
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   598
if __name__ == '__main__':
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   599
    unittest_main()